我遇到一个算法问题。我想计算2个矩形的交叉区域(两者都与OX和OY并列)。 矩形(我们称之为A)由(x1,y1,x2,y2)左上角(x1,y1)和右下角(x2,y2)描述,secodn将为B(x3,y3,x4, Y4)。 我想过一个算法,但看起来很蹩脚。
if(all of the points of rectangle A are inside of rectangle B)
calculate(A);
else if(all of points the points of rectangle B are in A)
calculate(B);
else if(x1 y1 is inside rectangle B)
if(x1 is on the left from x3){
if(y1 is under the y3)
else
}
等。它将是如此漫长和愚蠢。
答案 0 :(得分:1)
是的,它似乎有点低效,因为我认为,问题是可分离,可以扩展到3个或更多维度。
计算尺寸x中的重叠宽度,以及尺寸y中重叠的高度并将它们相乘就足够了。
(如果矩形在某个维度上不重叠,那么该值为0)
通过比较每个矩形的min_x,max_x值来进行重叠检测:
<------> <-------> vs. <-----> <----->
a b c d c d a b
Thus if b<=c OR a>=d, then no overlapping length = 0
<-------------> or <------------->
a <----> b a <------------->
c d c b d
+ the 2 symmetric cases (swap ab & cd)
从最后一行开始,公共区域的端点是d&amp;的 minimum 。 b; 公共区域的起点是&amp;区域的最大值。角
然后公共区域是min(d,b) - max(a,c) - 如果这是负的怎么办? 好吧,你刚刚检查了第一行的条件......