发现两个矩形的重叠区域(在C#)(Finding the overlapping area of t

2019-07-22 01:27发布

编辑:

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

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

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

最后,这是无关的问题,但我会很感激任何意见,有人可能对一本好书/网页,在那里我可以检讨计算机图形学的数学。 我已经离开大学了一会儿,觉得我忘记了一切:)! 任何人有这个问题?

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

Answer 1:

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



Answer 2:

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

麦克风

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



文章来源: Finding the overlapping area of two rectangles (in C#)