寻找两个矩形的重叠区域(C#实现)

13

编辑:

以下是我用来解决这个问题的简单代码,如果有兴趣可以看一下(感谢Fredrik):

    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(),我考虑使用分离轴测试,但如果矩形只有水平和垂直线段,是否有一种更简单(更快)的方法来进行检查?

对于计算它们相交的区域,如果矩形只有水平和垂直线段,是否有一种快速的方法?

最后,这与问题无关,但我很感谢任何有关计算机图形学数学的好书/网页建议。我已经离开学校有一段时间了,感觉自己忘记了一切 :)!其他人也有这个问题吗?

(注意:我发现这个问题与这个不同,后者似乎更复杂,并没有直接回答这个问题。)


一个水平的矩形在垂直方向上也是一个矩形,这取决于你认为哪一边是顶部。 - Danny Varod
6
如果overlap.IsEmpty,则应改为如果!overlap.IsEmpty。 - ReinierDG
2个回答

14

也许我误解了您的问题,但是不是Rectangle.Intersect方法可以完成此工作吗?它返回相交的区域,然后您可以轻松计算它的面积。


1

听起来像是基本的碰撞检测。你看过维基百科上的这个页面了吗?

Mike

编辑:Fredrik在我回答的同时也给出了他的回复,他得到了我的赞同(:


谢谢,我会查看该网站! - Evan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接