计算两个矩形之间的交叉区域

时间:2014-02-07 14:12:13

标签: c# algorithm intersection

//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
}

我需要帮助算法来获得交叉区域。

注意:坐标可以有负值。

2 个答案:

答案 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和宽度和高度,左上角是你的第一个顶点(显然),宽度和高度是这个顶点和右下角之间的差异