两个重叠的矩形

时间:2016-09-07 11:05:47

标签: java overlap

我在弄清楚代码出了什么问题时遇到了很多麻烦。实际上,我很难解决两个矩形重叠的问题。从理论上讲,以下代码应适用于以下矩形:

Rect1:(2.5,4)width = 2.5,height = 43

Rect2:(1.5,5)width = 0.5,height = 3

请记住,我不能使用Rectangle类来解决这个问题。我所做的是计算左边和右边的x值以及两个矩形的顶边和底边的y值。

我首先考虑 - 我知道这并未涵盖所有可能的情况 - r2在r1范围内的情况。

注意(x1,y1)和(x2,y2)分别表示矩形1和2的中心。

right1 = x1 + w1/2;
left1 = x1 - w1/2;
bottom1 = y1 - h1/2;
top1 = y1 + h1/2;

right2 = x2 + w2/2;
left2 = x2 - w2/2;
bottom2 = y2 - h2/2;
top2 = y2 + h2/2;


overlap = (  (right2 < right1 && right2 > left1) &&
(bottom2 > bottom1 && bottom2 < top1) &&
(left2 > left1 && left2 < right1) &&
(top2 < top1 && top2 > bottom1) );

同样,我意识到这种情况并非无所不包。但即使在这一点上测试一个矩形是否在另一个矩形内,使用上面的Rect1和Rect2值进行输入,重叠计算为false ...但它不应该 - 我已经完成了数学运算并建议代码应该工作。我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果水平和垂直两边都有一些交叉点,那么矩形将会重叠 - 所以基本上就是检查每个尺寸的两条线是否重叠。

检查是否有一行x1 - > x2与线x3重叠 - > x4是第一行是在第二行结束之前开始并在其开始之后结束,还是在代码中:

x1 <= x4 && x2 >= x3

要将其转换为矩形,请将测试应用于两个维度:

(x1 <= x4 && x2 >= x3) && (y1 <= y4 && y2 >= y3)

..其中一个矩形是x1,y1 - &gt; x2,y2和另一个是x3,y3 - > x4,y4(很容易从起始位置和宽度计算)。

相关问题