![]() |
1
634
或者,使用笛卡尔坐标 (x1为左坐标,x2为右坐标,从左向右增加,y1为上坐标,y2为下坐标,从下向上增加)……
注意:所有具有编辑权限的SO用户。请不要再摆弄这个了。 假设你有直肠A和直肠B。 证据是矛盾的。四个条件中的任何一个保证 不存在重叠 :
所以不重叠的条件是 Cond1 Or Cond2 Or Cond3 Or Cond4 因此,重叠的一个充分条件是相反的。 Not (Cond1 Or Cond2 Or Cond3 Or Cond4)
德摩根定律说
Not Cond1 And Not Cond2 And Not Cond3 And Not Cond4 这相当于:
注释1
:很明显,同样的原理可以扩展到任何数量的维度。
|
![]() |
2
106
|
![]() |
3
24
|
![]() |
4
20
更容易检查一个矩形是否完全位于另一个矩形之外,因此如果它是 在左边…
或者在右边……
或者在上面…
或者在底部…
在第二个矩形中,它不可能与之碰撞。因此,为了有一个函数返回一个布尔值,说明矩形是否发生碰撞,我们只需通过逻辑OR组合条件,并对结果求反:
要想在只触摸时获得肯定的结果,我们可以将“<”和“>”更改为“<=”和“>=”。 |
![]() |
5
6
假设您已经像这样定义了矩形的位置和大小:
我的C++实现是这样的:
如上图所示的函数调用示例:
内部比较
|
![]() |
6
5
问自己一个相反的问题:如何确定两个矩形是否完全不相交?显然,完全位于矩形b左侧的矩形a不相交。如果A完全在右边。同样地,如果A完全在B之上或完全在B之下,在任何其他情况下,A和B相交。 以下内容可能有缺陷,但我对算法很有信心:
|
![]() |
7
3
下面是如何在Java API中完成的:
|
![]() |
8
2
|
![]() |
9
1
在这个问题中,当矩形处于任意旋转角度时,您将链接到数学。但是,如果我理解问题中关于角度的一点,我会解释所有的矩形都是相互垂直的。 一般知道重叠公式的面积是: 使用示例: 1 2 3 4 5 6 1 +---+---+ | | 2 + A +---+---+ | | B | 3 + + +---+---+ | | | | | 4 +---+---+---+---+ + | | 5 + C + | | 6 +---+---+ 1)将所有X坐标(左、右)收集到一个列表中,然后对其进行排序并删除重复项 1 3 4 5 6 2)将所有Y坐标(顶部和底部)收集到一个列表中,然后对其进行排序并删除重复项 1 2 3 4 6 3)通过唯一X坐标之间的间隙数*唯一Y坐标之间的间隙数创建二维阵列。 4 * 4 4)将所有矩形绘制到此网格中,增加每个单元格的计数: 1 3 4 5 6 1 +---+ | 1 | 0 0 0 2 +---+---+---+ | 1 | 1 | 1 | 0 3 +---+---+---+---+ | 1 | 1 | 2 | 1 | 4 +---+---+---+---+ 0 0 | 1 | 1 | 6 +---+---+ 5)绘制矩形时,很容易截取重叠部分。 |
![]() |
10
1
不要认为坐标表示像素的位置。把它们想象成像素之间。这样,2x2矩形的面积应该是4,而不是9。
|
![]() |
11
1
最简单的方法是
首先,请记住,在计算机中,坐标系是颠倒的。x轴和数学中的一样,但y轴向下增加,向上减少。 如果从中心绘制矩形。 如果x1坐标大于x2加上其宽度的一半。那就意味着走一半,他们会互相碰触。以同样的方式向下+一半的高度。它会碰撞…… |
![]() |
12
1
假设这两个矩形是矩形a和矩形b,中心是a1和b1(很容易找到a1和b1的坐标),高度是ha和hb,宽度是wa和wb,dx是a1和b1之间的宽度(x)距离,dy是a1和b1之间的高度(y)距离。
现在我们可以说A和B重叠:什么时候
|
![]() |
13
0
我已经实现了一个C版本,它很容易转换成C++。
|
![]() |
14
0
我有一个非常简单的解决方案 让x1、y1 x2、y2、l1、b1、l2分别为坐标和长度和宽度。 考虑条件((x2 现在,这些矩形重叠的唯一方式是,如果指向x1、y1的点位于另一个矩形内,或者类似地,指向x2、y2的点位于另一个矩形内。这正是上述条件所暗示的。 |
![]() |
15
0
A和B是两个矩形。c是它们的覆盖矩形。
它会处理所有可能的情况。 |
![]() |
16
0
这是从练习3.28从书介绍到Java编程的综合版。代码测试两个矩形是否是缩进的,一个在另一个内部,一个在另一个外部。如果这些条件都不满足,那么这两个条件就会重叠。 **3.28(几何:两个矩形)编写一个程序,提示用户输入 两个矩形的中心X、Y坐标、宽度和高度,并确定 第二个矩形是在第一个矩形内还是与第一个矩形重叠,如图所示 在图_3.9中。测试您的程序以覆盖所有情况。 以下是运行示例: 输入R1的中心X、Y坐标、宽度和高度:2.5 4 2.5 43 输入R2的中心X、Y坐标、宽度和高度:1.5 5 5 0.5 3 R2在R1内部 输入R1的中心X、Y坐标、宽度和高度:1 2 3 5.5 输入R2的中心X、Y坐标、宽度和高度:3 4 4.5 5 5 R2重叠R1 输入R1的中心X、Y坐标、宽度和高度:1 2 3 3 输入R2的中心X、Y坐标、宽度和高度:40 45 3 2 R2不与R1重叠
|
![]() |
17
0
|
![]() |
18
0
对于那些使用中心点和一半大小作为矩形数据,而不是典型的x、y、w、h或x0、y0、x1、x1的数据的用户,可以这样做:
|
![]() |
19
0
从另一个网站上看这件事。事实证明 如果我们从另一方面看问题(算法),这就相当简单了。 . 这意味着,与其回答问题:“矩形是否重叠?”我们将回答这个问题:“矩形是吗? 不 重叠?”. 最后,两个问题解决了相同的问题,但是 第二个问题的答案更容易实现 因为 矩形不会仅在一个位于另一个之下或一个位于另一个的左侧时重叠。 (这些情况中的一种已经足够发生了,但这两种情况都可能同时发生——在这里,很好地理解逻辑条件“或”是很重要的)。这减少了许多在第一个问题上需要考虑的情况。 整个事情也是 通过使用适当的变量名简化 :
偶数 如果我们对一个矩形有不同的表示,那么通过只修改定义变量变化的部分,很容易使上面的函数适应它。 函数的进一步部分保持不变(当然,这里并不真正需要注释,但是我添加了注释,以便每个人都能快速理解这个简单的算法)。 安 相等的 但可能有点不太可读 上述功能的形式 可能如下所示:
|
![]() |
20
-1
“如果您对两个面对每个矩形的顶点执行减法X或Y坐标,如果结果是相同的符号,则两个矩形不会重叠那些轴”(对不起,我不确定我的翻译是否正确)。
来源: http://www.ieev.org/2009/05/kiem-tra-hai-hinh-chu-nhat-chong-nhau.html |
![]() |
21
-1
这个答案应该是最重要的答案: 如果矩形重叠,则重叠区域将大于零。现在让我们找到重叠区域:
如果它们重叠,则重叠矩形的左边缘将是
因此该区域将是:
如果
很简单,不是吗? |
![]() |
22
-1
Java代码,以确定矩形是否彼此接触或重叠。 …
… |
![]() |
Linda · 不同数据帧的并排熊猫箱线图 7 年前 |
![]() |
el-nino · WPF滑块拇指重叠重复按钮 7 年前 |
|
user7055375 · 如何在一个DIV中重叠两个图像? 7 年前 |
![]() |
Schadenfreude · Excel XY图表(散点图)数据标签无重叠 10 年前 |
![]() |
CaitlinW · SVG中相邻路径上的重叠虚线/虚线笔划 11 年前 |