2011-10-27 264 views
7

我有用它们的顶点定义的多边形,我需要计算它们的联合和交集的区域。最令人沮丧的是它在Mapping Toolbox中实现,但我无法购买它。有谁知道如何制作一个快速算法来计算它? 谢谢你的时间。交叉点和多边形的联合

+0

该函数是'polybool'。我可以用'polyarea'来计算这个区域(这对我来说是可用的)。 – Kate

+0

我认为你不应该要求用户侵犯版权。编辑。 –

+0

@Kate:你的多边形是否保证凸出? – Jacob

回答

0

我发现我的多边形的交叉点,并补充说,是内部顶点/外多边形相交/联合任务(检查是否有1个位于多边形2和反之亦然内多边形的顶点使用“inpolygon “)。然后将所有点转换为极坐标,中心位于矩阵的平均坐标中,并按角度排序,以形成连续的闭合轮廓。知道这一点,很容易找到使用“多面积”的交叉点/联合区域。

1

我会做这样的:

  1. 小号是一组来自两个多边形顶点。
  2. 对于每个边缘ê在多边形1
    1. 对于每个边缘ë 在多边形2
      1. 如果ëE交叉
        1. 交点添加到小号
  3. 移除所有顶点小号是内部多边形1或2。

所得顶点集应弥补多边形的联合。

对于交点可以简单地消除所有的顶点在小号是(在第三步)两个多边形1和2的。

(你可以看一下交点和 “内部多边形” 别处-checks ;-)

+0

谢谢你的回答,但我怎么找到交点?是否有必要使用线的方程? – Kate

+0

添加了两个链接到我的答案。 – aioobe

+0

谢谢。我知道数学,但不幸的是我不是一个非常好的程序员,所以有代码是非常好的。 – Kate

0

的想法是要打破所有的边缘相交成四零件并与这些形成一个新的多边形。当你想要结合时,取两个外边缘。如果你想交集,取两个内边。

+0

一个很好的答案就是一个例子。 –

3

你只需要找到相交区域;该联盟的面积从这个平凡的地方获得。来自FEX的PolygonIntersection包可能会有用。

enter image description here

+1

你能展示一些伪代码,以便我们可以在其他语言中实现它吗? – Pacerier