[英]Calculating area of intersection between two rectangles
//C# Console Application Home assignment
我有8个这样的坐标:
(x1,y1)(x2,y2)...(x8,y8)//前四个坐标用于第一个矩形//其余的用于第二个矩形
我存储这样的值:
int[,] array2D = new int[8,2];
array2d[0,0] = x1;
array2d[0,1] = y1;
array2d[1,0] = x2;
array2d[1,1] = y2;
//...
array[7,0] = x8;
array[7,1] = y8;
我想计算这些坐标之间的相交面积。
我已经有了以下代码来检查矩形何时不重叠(它可以工作):
if (!(array2D[2, 1] <= array2D[4, 1] && array2D[0, 1] >= array2D[6, 1]
&& array2D[2, 0] >= array2D[4, 0] && array2D[0, 0] <= array2D[6, 0]))
{
//not overlapping
}
{
//overlapping
}
我需要算法帮助来获取相交区域。
注意:坐标可以具有负值。
我将使用System.Drawing
的Rectangle.Intersect
方法 。 重新发明轮子没有意义... ;-)
返回表示其他两个Rectangle结构的交集的第三个Rectangle结构。 如果没有交集,则返回一个空的Rectangle。
最简单的解决方案是首先注意矩形(或其他任何东西)的交集是可交换的。 也就是说,如果我要与A,B和C相交,我可以与A和B相交,然后与C相交, 或者与B和C相交,然后与A相交。
因此,存储一个矩形并将其与连续的矩形相交。 因此,您从第一个矩形开始,与第二个矩形相交。 然后将结果与第三个相交,依此类推。
这将为您提供相交矩形,因此您可以简单地计算面积。
更新
您的问题似乎主要是矩形的格式。 即,定义矩形的4个顶点。 通过将左上角作为您的第一个顶点(很明显),可以轻松地将其转换为左上角的X / Y和宽度和高度,宽度和高度是该顶点与右下角之间的差
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.