交叉矩形的总面积

时间:2010-12-29 23:37:47

标签: algorithm

用于确定两个相交的矩形的总面积的算法是什么?可以从坐标轴上旋转?

3 个答案:

答案 0 :(得分:18)

这里大致是你需要做的,尽可能一般地表达,但涵盖所有可能性:

  • 计算出交集的类别。即交叉区域有多少条边?它可以是0到8之间的任何东西。
  • 查找交叉点的所有顶点。这将是矩形边缘与矩形本身相关角落之间的所有交叉点。解决这个问题是最复杂/乏味的。
  • 根据需要将交叉区域划分为三角形,计算出交叉区域。

这是矩形可以交叉的所有方式: alt text

<强>更新

我有一些想法,对交叉点进行分类的最佳方法是围绕每个矩形的周长进行追踪,并计算每条边与另一条边相交的次数。你会得到一个矢量,例如对于六边交叉区域:{1,1,1,1},{0,1,1,1}和8:{2,2,2,2},{2,2,2,2} 。您需要检查的两个特殊情况是,当一个矩形完全包围另一个矩形并且边缘在线时。您需要仔细检查,但这将是功能对交叉点进行分类的起点。

答案 1 :(得分:3)

区域(R1联合R2)=区域(R1)+区域(R2) - 区域(R1交叉点R2),因此您可以计算交叉区域以获得联合区域。

两个矩形(或两个凸多边形)的交点很简单:

  • 它们是凸多边形
  • 他们的点的特征如下:任何一对边的交点,以及一个在另一边内的矩形点。

所以它是这样的:

  • L是最初为空的链表
  • R1具有边缘e1,e2,e3,e4,R2具有边缘f1,f2,f3,f4。计算ei和fj的交点,对于所有i,j = 1,2,3,4。将它们添加到列表L。
  • 对于R1的每个顶点v,如果v在R2内,则将其添加到L。
  • 对于R2的每个顶点w,如果w在R1内,则将其添加到L。

L中的点凸壳是你的交点。由于L中的每个点都在交叉点的边界上,因此您可以对其进行三角测量并计算其面积。易:

  • L = [x0,x1,...]
  • 根据(xi - x0)相对于通过x0的水平线的角度在L中对点进行分类
  • 第一个三角形是x0,x1,x2
  • 第二个三角形是x0,x2,x3
  • 第n个三角形是x0,x(n + 1),x(n + 2)

三角形的面积由苍鹭公式给出:

  • a,b,c是边长
  • s = 0.5 *(a + b + c)
  • area = sqrt(s *(s - a)*(s - b)*(s - c))

但要注意独立地计算s - a,s - b和s - c,因为你可能会遇到舍入错误(如果c~a和b&lt;&lt; a,例如?)

答案 2 :(得分:1)

好的,你有3种可能性: 1.矩形不相交 2.一个矩形完全包含在另一个内(或者它们重合) 交点的结果是一些凸多边形。您可以通过将多边形区域划分为三角形来计算多边形的面积(通过从第一个顶点绘制线段到除了相邻的一个顶点之外的所有其他线段)。你总结一下这些区域。你可以使用希罗德定理来计算三角形的面积,这就是中学几何学所在的地方。