计算java中矩形的交集区域

时间:2012-10-23 18:12:21

标签: java area rectangles

我遇到一个算法问题。我想计算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
        }

等。它将是如此漫长和愚蠢。

1 个答案:

答案 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) - 如果这是负的怎么办? 好吧,你刚刚检查了第一行的条件......