2009-10-11 109 views
12

编辑:寻找两个矩形(在C#)的重叠区域

我用来解决的情况下,任何人有兴趣(感谢弗雷德里克)问题

简单代码:

int windowOverlap(Rectangle rect1, Rectangle rect2) 
    { 
     if (rect1.IntersectsWith(rect2)) 
     { 
      Rectangle overlap = Rectangle.Intersect(rect1, rect2); 
      if (overlap.IsEmpty) 
       return overlap.Width * overlap.Height; 
     } 

     return 0; 
    } 

原题:

我想知道和一个快速和肮脏的方法来检查,如果两个矩形重叠,如果他们这样做计算重叠的区域。为了好奇心,我对以下情况感兴趣:1)两个矩形中的所有线条都是垂直或水平的,或者2)任何两个矩形的一般情况,但我真正需要的唯一答案是情况1.

double areaOfOverlap(Rect A, Rect B) 
{ 
    if (A.Intersects(B)) 
    { 
     // calculate area 
     // return area 
    } 

    return 0; 
} 

对于A.Intersects()我用的是分离轴测试的思考,但如果矩形只有水平和垂直线条是否有一个更简单的(快):我的线沿线的思考检查方法?

并计算在它们交叉有一个快速的方法,如果只矩形水平线和垂直线做它的区域?

最后,这与问题无关,但我会感谢任何人可能有一个好的书/网页的建议,我可以审查计算机图形学的数学。我已经离开了大学一段时间,觉得我忘记了一切:)!任何人都有这个问题?

(注:我发现这个问题比this这似乎更复杂,不直接回答这个问题不同。)

+0

水平矩形是一个竖长方形,取决于哪一方你考虑顶部 – 2009-10-11 17:57:08

+4

** if(overlap.IsEmpty)** 应该是 ** if(!overlap.IsEmpty)** – ReinierDG 2010-06-16 11:28:30

回答

11

也许我误解你的问题,但不将Rectangle.Intersect方法做这项工作?它返回相交区域,然后你可以很容易地计算出它的面积。

+0

是的,这是完美的:)。谢谢! – Evan 2009-10-11 18:05:46

1

听起来像基本的碰撞检测。你有迈克

看着 this page on Wikipedia?

编辑:弗雷德里克让他在我做这一个相同的时间响应,他的回答得到了我给予好评(:

+0

谢谢,我会查看该网站! – Evan 2009-10-11 18:06:49