当前位置: 首页 > 知识库问答 >
问题:

两个矩形相交

房光临
2023-03-14

我有两个矩形,每个矩形有4个值:

左侧位置< code>X、顶部位置< code>Y、宽度< code>W和高度< code>H:

X1, Y1, H1, W1
X2, Y2, H2, W2

矩形不旋转,如下所示:

+--------------------> X axis
|
|    (X,Y)      (X+W, Y)
|    +--------------+
|    |              |
|    |              |
|    |              |
|    +--------------+
v    (X, Y+H)     (X+W,Y+H)

Y axis

判断两个矩形的交集是否为空的最佳解是什么?

共有3个答案

欧阳衡
2023-03-14

如果两个矩形具有相同的尺寸,您可以:

if (abs (x1 - x2) < w && abs (y1 - y2) < h) {
    // overlaps
}
宣望
2023-03-14

最好的例子...

/**
 * Check if two rectangles collide
 * x_1, y_1, width_1, and height_1 define the boundaries of the first rectangle
 * x_2, y_2, width_2, and height_2 define the boundaries of the second rectangle
 */
boolean rectangle_collision(float x_1, float y_1, float width_1, float height_1, float x_2, float y_2, float width_2, float height_2)
{
  return !(x_1 > x_2+width_2 || x_1+width_1 < x_2 || y_1 > y_2+height_2 || y_1+height_1 < y_2);
}

还有一种方式看到这个链接...并自行编码。

贾越
2023-03-14
if (X1+W1<X2 or X2+W2<X1 or Y1+H1<Y2 or Y2+H2<Y1):
    Intersection = Empty
else:
    Intersection = Not Empty

如果您有四个坐标-< code >((X,Y),(A,B))和< code>((X1,Y1),(A1,B1)),而不是两个加上宽度和高度,它看起来会像这样:

if (A<X1 or A1<X or B<Y1 or B1<Y):
    Intersection = Empty
else:
    Intersection = Not Empty
 类似资料:
  • 问题内容: 测试2个矩形是否相交的快速方法是什么? 在Internet上进行了搜索,找到了这种单行代码(WOOT!),但我不知道如何用Javascript编写它,它似乎是用C ++的古老形式编写的。 问题答案: 这就是将代码转换为JavaScript的方式。请注意,正如注释所建议的那样,您的代码和本文的代码中都有一个错字。该功能应该并且应该具体起作用。 测试用例:

  • 我正在as3中编写一个冲突检测系统。它的目的很简单:我有一些移动的矩形和一些静态的矩形。当一个移动的矩形与另一个矩形碰撞时,我想将源(碰撞)矩形移动到碰撞区域之外,但仍然尽可能靠近(基于源的轨迹)。 在每一帧中,我更新移动矩形的位置,并检查所有矩形之间的接触。 下图代表以下内容: A:方框#1正以45度角向静态矩形(#2)移动。 b:经过几次“刻度”后,我们看到矩形#1移动到矩形#2(静态)的空间

  • 问题内容: 我找到了解决方案,但想确保我的逻辑是最有效的。我觉得有更好的方法。我有左下角的(x,y)坐标,2个矩形的高度和宽度,我需要返回第三个矩形,即它们的交点。我不想发布代码,因为我觉得它在作弊。 我弄清楚哪个在图表上最左边和最高。 我检查一个是否与另一个完全重叠,然后反向查看另一个是否在X轴上完全重叠第一个。 我检查X轴上的局部相交。 我基本上对Y轴重复步骤2和3。 我做一些数学运算,并根据

  • 问题内容: 我需要快速创建一个只有两个圆角的矩形(也可以使用目标C代码)。 目前,我的代码正在创建两个矩形 和 并将它们合并(有两个直角和两个圆角),但是我对代码不满意,并且我很确定应该有更好的方法。 我是iOS和图形开发的新手。 问题答案: 在 Swift 2.3中, 您可以这样做 在 Objective-C中, 您可以使用class方法 示例实现- 并将上述方法称为-

  • 本文向大家介绍C语言实现两个矩阵相乘,包括了C语言实现两个矩阵相乘的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现两个矩阵相乘的具体代码,供大家参考,具体内容如下 程序功能:实现两个矩阵相乘的C语言程序,并将其输出 代码如下: 运行结果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 产出: 在文件include from/usr/include/C++/4.8/IOStream:39:0、from proy3.cpp:2:/usr/include/C++/4.8/ostream:548:5:注意:模板std::basic_ostream&std::operator<<(std::basic_ostream&,const无符号char*)操作符<<(Basic_ostream&