找到两个矩形的重叠区域(在C#中)

时间:2009-10-11 17:38:48

标签: c# graphics overlap area rectangles

编辑:

简单的代码我曾经解决过这个问题以防任何人感兴趣(感谢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()我正在考虑使用分离轴测试,但如果矩形只有水平和垂直线,那么还有更简单(更快)的检查方法吗?

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

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

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

2 个答案:

答案 0 :(得分:12)

也许我误解了你的问题,但Rectangle.Intersect方法不能胜任这个问题吗?它返回交叉区域,然后您可以轻松计算它的区域。

答案 1 :(得分:1)

听起来像基本的碰撞检测。你看过this page on Wikipedia?

吗?

麦克

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