简单代码:
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这似乎更复杂,不直接回答这个问题不同。)
水平矩形是一个竖长方形,取决于哪一方你考虑顶部 – 2009-10-11 17:57:08
** if(overlap.IsEmpty)** 应该是 ** if(!overlap.IsEmpty)** – ReinierDG 2010-06-16 11:28:30