精华内容
下载资源
问答
  • 注意,矩形可以由两个坐标表示,即左上角和右下角。所以主要是给我们以下四个坐标。可以假定矩形与坐标轴平行。一种解决方案是一个接一个地选取一个矩形的所有点,查看该点是否在另一个矩形内。这可以使用此处以下是...

    注意,矩形可以由两个坐标表示,即左上角和右下角。所以主要是给我们以下四个坐标。

    可以假定矩形与坐标轴平行。

    一种解决方案是一个接一个地选取一个矩形的所有点,查看该点是否在另一个矩形内。这可以使用此处

    以下是一种更简单的方法。如果满足以下条件之一,则两个矩形不重叠。

    1)一个矩形位于另一个矩形的上边缘上方。

    2)一个矩形位于另一矩形左边缘的左侧。

    我们需要检查上述情况,以确定给定的矩形是否重叠。以下是上述方法的实现。

    // Java program

    class GFG {

    static class Point {

    int x, y;

    }

    // Returns true if two rectangles (l1, r1) and (l2, r2) overlap

    static boolean doOverlap(Point l1, Point r1, Point l2, Point r2) {

    // If one rectangle is on left side of other

    if (l1.x > r2.x || l2.x > r1.x) {

    return false;

    }

    // If one rectangle is above other

    if (l1.y < r2.y || l2.y < r1.y) {

    return false;

    }

    return true;

    }

    /* Driver program to test above function */

    public static void main(String[] args) {

    Point l1 = new Point(),r1 = new Point(),

    l2 = new Point(),r2 = new Point();

    l1.x=0;l1.y=10; r1.x=10;r1.y=0;

    l2.x=5;l2.y=5; r2.x=15;r2.y=0;

    if (doOverlap(l1, r1, l2, r2)) {

    System.out.println("Rectangles Overlap");

    } else {

    System.out.println("Rectangles Don't Overlap");

    }

    }

    }

    如果两个给定的矩形重叠,则返回true。l1

    r1:第一个矩形的右下角坐标。

    l2:第二个矩形的左上坐标。

    :第二个矩形的右下角坐标。

    l1:第一个矩形的左上坐标。

    r1:第一个矩形的右下角坐标。

    l2

    r

    展开全文
  • 设 c为矩形中心, h为矩形半長, p为圆心,r为半径。 方法是计算圆心与矩形的最短距离 u,若 u 的长度小于 r 则两者相交。 首先利用绝对值把 p - c 转移到第一象限,下图显示不同象限的圆心也能映射至第一象限,这...

    设 c为矩形中心, h为矩形半長, p为圆心,r为半径。
    在这里插入图片描述
    方法是计算圆心与矩形的最短距离 u,若 u 的长度小于 r 则两者相交。

    1. 首先利用绝对值把 p - c 转移到第一象限,下图显示不同象限的圆心也能映射至第一象限,这不影响相交测试的结果:

    在这里插入图片描述
    2. 然后,把 v 减去 h,负数的分量设置为0,就得到圆心与矩形最短距离的矢量 u。下图展示了4种情况,红色的 u是结果。
    在这里插入图片描述
    3. 最后要比较 u 和 r 的长度,若距离少于 r,则两者相交。可以只求 u 的长度平方是否小于 r 的平方。

    代码:

    bool BoxCircleIntersect(Vector2 c, Vector2 h, Vector2 p, float r) {
        Vector2 v = abs(p - c);    // 第1步:转换至第1象限
        Vector2 u = max(v - h, 0); // 第2步:求圆心至矩形的最短距离矢量
        return dot(u, u) <= r * r; // 第3步:长度平方与半径平方比较
    } 
    

    这个方法可能最早记录于[1],而[2][3]也有相关描述。这个方法应该是最优的,而且可扩展至任何维度。如矩形不是轴对齐矩形(AABB)而是定向矩形(OBB),可以把圆心旋转至矩形的座标系。

    这个方法考虑了矩形的对称及轴对齐性质,实际上等同5个分离轴测试[3],包括矩形4边、圆心与矩形最近点的分离轴。后者容易被忽略。

    这类型问题可以使用 閔可夫斯基和转化为圆角矩形和点的相交问题,可以应用不同的距离函数,如[5]。

    [1] Arvo, “A Simple Method for Box-Sphere Intersection Testing”, Graphics Gems, pp. 247-250, 1993. http://tog.acm.org/resources/GraphicsGems/gems/BoxSphere.c
    [2] Gottschalk, "Separating axis theorem ",. Technical Report TR96-024, Department of Computer Science, UNC Chapel Hill, 1996.
    [3] Philip, Eberly, Geometric tools for computer graphics , Morgan Kaufmann, pp.644-646, 2002.
    [4] Gomez, “Simple Intersection Tests for Games,” Gamasutra, October 1999. Gamasutra - Simple Intersection Tests For Games
    [5] Quilez, “Modeling with distance functions”, 2008. Iigo Quilez - fractals, computer graphics, mathematics, demoscene and more

    展开全文
  • 参考:知乎高赞回答:怎样判断平面上一个矩形和一个圆形是否有重叠? 第一步:将矩形的中心平移至坐标轴圆心处,同时圆也要同步变换。 第二步:将圆变换置第一象限 第三步:计算 u⃗\vec uu,u⃗=v⃗−h⃗\vec u =...

    参考:知乎高赞回答:怎样判断平面上一个矩形和一个圆形是否有重叠?

    矩形与圆形的重叠问题
    第一步:将矩形的中心平移至坐标轴圆心处,同时圆也要同步变换。
    第二步:将圆变换置第一象限
    向量变换
    第三步:计算 u\vec uu=vh\vec u = \vec v -\vec h;注:v\vec v表示由变换之后的矩形中心指向变换之后圆心的向量,h\vec h表示由变换之后的矩形中心指向矩形右上端点的向量。
    第四步:不妨假设u=(x,y)\vec u=(x,y) 将x,y中小于0的坐标都置为0,如第二幅图所示;
    第五步:如果uradius|\vec u| \leq radius 则说明有重叠,否则没有。

    代码实现
    (x1,y1)(x_1,y_1)表示矩形的左下端点的坐标,(x2,y2)(x_2,y_2)表示是右上角的坐标。

    bool checkOverlap(int radius, int x_center, int y_center, int x1, int y1, int x2, int y2) {
            int tx = (x1+x2)/2, ty = (y1+y2)/2; // (tx,ty)表示未变换之前的矩形中心
            int tdx = -tx, tdy = -ty; // (tdx,tdy)表示变换之后的矩形中心
            // (x11,y11),(x21,y21)表示矩形的左下和右上端点
            int x11 = x1+tdx,x21 = x2 + tdx, y11 = y1+tdy, y21 = y2+tdy;
            // (xc,yc)表示变换到第一象限的圆心坐标 
            int xc = abs(x_center+tdx), yc = abs(y_center+tdy); 
            // (ux,uy)表示u向量
            int ux = xc-x21, uy = yc-y21;
            // 将u向量中的x,y小于0的置为0
            ux = max(0,ux), uy = max(0,uy);
            // 判断
            return ux*ux+uy*uy <= radius*radius;  
        }
    

    注:使用图片均来自 知乎高赞回答:怎样判断平面上一个矩形和一个圆形是否有重叠?

    展开全文
  • RT, 求效率较高的方法 , 谢谢大家.
  • 问题描述 在2D平面中,圆与圆检测是否发生碰撞很简单,方法即为比较两个圆心...参考这篇文章:怎样判断平面上一个矩形和一个圆形是否有重叠? 旋转的矩形与圆的碰撞检测 而对于旋转的矩形,意思是矩形的边与坐标轴...

    问题描述

    在2D平面中,圆与圆检测是否发生碰撞很简单,方法即为比较两个圆心之间的距离与半径之和。而矩形与圆则需要稍微复杂一点的计算。

    不旋转的矩形与圆的碰撞检测

    不旋转,意思是矩形的边分别与两个坐标轴平行,矩形长平行于X轴,矩形宽平行于Y轴。

    下面是其碰撞检测的具体逻辑:
    参考这篇文章:怎样判断平面上一个矩形和一个圆形是否有重叠?

    旋转的矩形与圆的碰撞检测

    而对于旋转的矩形,意思是矩形的边与坐标轴有一定夹角,设为θ。此时我们有个思路就是将矩形与坐标轴对其,把问题转为为不旋转的矩形就可以得到决绝。
    那么我们是旋转矩形还是圆呢?显然我们会选择旋转圆,因为这样简单一些。这样问题就描述成:圆心绕着矩形的中心旋转θ,得到与坐标轴对齐后的圆的新坐标。
    在这里插入图片描述

    数学问题:点绕着任意点旋转θ后的坐标公式

    x’ = (xc-xr) * cos(θ) - (yc-yr) * sin(θ) + xr;
    y’ = (xc-xr) * sin(θ) + (yc-yr)* cos(θ) + yr;

    在这里圆中心的初始坐标为(xc, yc),矩形的初始坐标为(xr, yr)。
    新的圆的坐标为(x’, y’),新的矩形与坐标轴角度为0。

    编码实现

    在这里插入图片描述

    展开全文
  • 怎样判断平面上一个矩形和一个圆形是否有重叠? - Milo Yip的回答 - 知乎 https://www.zhihu.com/question/24251545/answer/27184960 https://leetcode-cn.com/problems/circle-and-rectangle-overlapping/solu...
  • 今天在做一个拖拽改变元素排序的东西的时候,在做被拖动元素同时碰撞到两个元素时,究竟应该与哪个元素交换位置的...如图,左侧的橙色箭头所指的线,是蓝色矩形右边和黑色矩形左边的距离,如果蓝色矩形右边的左边小于黑色...
  • java判断图形相交,并获得相交区域

    千次阅读 2019-07-27 08:22:44
    客户提出的需求:比如地图上有2个图形,图形任意,需要判断出图形的交点区域的图形。 这样做会遇到很多的难点:...这样的判断其实有一定的难度性,需要判断客户点击的图形是怎样的,根据不同的图形来判断。而且判...
  • 给你两个大小一样的,边长为a,b的矩形将其放入一个正方形里,问怎样放可以使正方形面积最小(要求正方形边和矩形边平行) 题目: Find the minimum area of a square land on which you can place two identical ...
  • 首先运用矢量的叉积可以很方便地判断点是否在给定线段的直线上:若 \(Q\) 在直线 \(P_1P_2\) 上,则 \(\overrightarrow{P_1Q}\times \overrightarrow{P_1P_2}=0\)。然后我们只需要保证点 \(Q\) 在以 \(P_1P_2\) 为对...
  • 已经经过霍夫变换得到线段但是不知道怎样判断矩形,并将图片中的矩形分割出来。求教。
  • 效果如下: ...怎样进行还原操作,以及怎样判断框选主的是矩形(只允许框选矩形进行合并) … 实现的步骤: 构造需要操作的div并设置相关的样式 <div class="box"> <div v-for=...
  • Kotlin(一)属性讲解

    2018-10-10 16:41:00
    假设你声明这样一个 矩形,它能判断自己是否是正方形。 不需要一个单独的字段来存储这个信息(是否 是正方形),因为可以随时通过检查矩形的长宽是否相等来判断 : class Rectangle(val height: Int, v...
  • 1629 - Cake slicing(DP)

    2015-07-18 10:11:19
    花了近2个小时最终AC,好爽。。一道类似于最优矩阵链乘的题目,受《切木棍》那道题的启发,该题的原理也是一样的,只不过变成...那么问题就是怎样快速的判断一个矩形内有多少个樱桃,于是决定再开一个数组记录这个矩形
  • Chapter 1 怎样判断两个矩形区域是否出现交叉或重叠现象 Solution 1: CRect rect1,rect2; ................... CRgn rgn; rgn.CreateRectRgn(rect1.left,rect1.top,rect1.right,rect1.bottom); if (rgn....
  • uva 11800

    2015-08-01 15:37:27
    题意:给出一个平面上四个点的坐标,问判断这四个点能组成怎样的四边形,按正方形,矩形,菱形,平行四边形,梯形,普通四边形的顺序判断并输出。 题解:先用凸包把四个点排好序,然后依次判断。#include #include...
  • 那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式: ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,...n 方括号表示取整函数) 奇妙的是其中出现了黄金分割数(1+√5)/2 = 1.618...因此,...
  • uva 11800 - Determine the Shape

    千次阅读 2013-08-17 21:40:55
    判断这4个点能组成怎样的四边形。 正方形:Square 矩形:Rectangle 菱形:Rhombus 平行四边形:Parallelogram 梯形:Trapezium 普通四边形:Ordinary Quadrilateral #include #include using namespace std;...
  • 横版过关游戏开发-碰撞检测

    千次阅读 2008-06-15 13:18:00
    上回说哪了?碰撞检测。碰撞检测应该是所有事件的触发点。...程序怎样实现:所有图形元素,都应该有一个外包图形,如点,圆,三角形,矩形。为了简单起见,这次,我都用了矩形判断的时候,是用几个宏
  • QPSK解调过程中的抽样判决

    千次阅读 2020-04-16 13:32:13
    采样判决器是一种通过采样的形式将原来的基带信号恢复或者再生的仪器,信号的值就当成1,从而得到1,同样在其它的时候得到不同的抽样值根据情况判断此处原来的值到底是0还是1。 在数字基带信号传输(就是一串数字...
  • 题意 : 给你一个含n个单词的文本,按照一些规则放入宽度为w的矩形中,怎样使最大的空格最小。 题解 : 首先我们可以发现答案是满足二分性质的,如果少的空格可以那么多的也一定可以,这样的话我们就可以对答案...
  • 在RPG游戏中,一般都将场景分为许多矩形的单元,碰撞的问题被大大的简化了,只要判断精灵所在的单元是不是有其它的东西就可以了。而在飞行射击游戏(包括象荒野大镖客这样的射击游戏)中,碰撞却是最关键的技术,...
  • 一个Java小游戏抓不住的方块,用户可以通过鼠标抓取方块,但是无论用户怎样努力,方块总是朝着与鼠标相反的方向运动,总是抓不住方块。主要是利用Java的图形界面技术和消息响应机制完成了抓不住的方块的制作。通过...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0161 判断字符串是由数字、大写字母或小写字母组成 105 0162 判断字符串中的某一字符是否大写 106 0163 判断字符串中是否有小写字母 107 0164 判断字符串中是否有指定的字符 107 0165 判断字符是否可以转换...
  • 0161 判断字符串是由数字、大写字母或小写字母组成 105 0162 判断字符串中的某一字符是否大写 106 0163 判断字符串中是否有小写字母 107 0164 判断字符串中是否有指定的字符 107 0165 判断字符是否可以转换...

空空如也

空空如也

1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

怎样判断矩形