12

编辑:

如果有人感兴趣,我用来解决问题的简单代码(感谢 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() 我正在考虑使用分离轴测试,但是如果矩形只有水平线和垂直线,是否有更简单(更快)的检查方法?

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

最后,这与问题无关,但我很感激有人在一本好书/网页上提出的任何建议,我可以在其中复习计算机图形学的数学。我已经离开大学一段时间了,感觉好像我忘记了一切:)!其他人有这个问题吗?

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

4

2 回答 2

12

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

于 2009-10-11T17:47:00.447 回答
1

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

麦克风

编辑:弗雷德里克在我做这个的同时做出回应,他的回答得到了我的支持(:

于 2009-10-11T17:48:20.787 回答