//C# Console Application Home assignment
我有8个这样的坐标:
(x1,y1)(x2,y2)...(x8,y8) //前4个坐标是第1个矩形 //第二个矩形的其余部分
我存储的值如下:
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
}
我需要帮助算法来获得交叉区域。
注意:坐标可以有负值。
答案 0 :(得分:1)
我会使用System.Drawing
中的the Rectangle.Intersect
method。重新发明轮子是没有意义的......; - )
返回表示交集的第三个Rectangle结构 另外两个Rectangle结构。如果没有交叉路口,那么 返回空Rectangle。
答案 1 :(得分:0)
最简单的解决方案是首先注意矩形(或实际上任何东西)的交叉是可交换的。也就是说,如果我想要交叉A,B和C,我可以将A和B相交,然后将它与C OR 相交,并与B和C相交,然后将结果与A相交。
因此,存储矩形并将其与连续的矩形相交。所以你从第一个矩形开始,与第二个矩形相交。然后将结果与第三个相交,依此类推。
这将为您提供交叉矩形,因此您可以简单地计算面积。
<强>更新强>
您的问题似乎主要是您的矩形格式。即,定义矩形的4个顶点。这可以很容易地转到左上角的X / Y和宽度和高度,左上角是你的第一个顶点(显然),宽度和高度是这个顶点和右下角之间的差异