特殊方向的多边形分解

时间:2013-08-06 07:12:44

标签: algorithm computational-geometry polygons decomposition

我正在寻找一个可以分解多边形的库。我想要定义定义多边形应该被分段的方向或线,如下所示:

an irregular polygon with internal subdivision lines, some vertical some not

这样我就得到了小多边形。有人知道一个支持这个的图书馆吗?

或任何想法?

2 个答案:

答案 0 :(得分:1)

我不确定您使用的是哪种语言。我有一个为我的目的而编写的库,它可以通过给定的行集和返回的多边形得到完整的分区。它是用PHP编写的,名为dimension,使用它可以解决你的问题:

  1. 通过一组LineSet_2D或Polygon_2D
  2. 来定义多边形
  3. 也通过Line_2D
  4. 定义分区行
  5. 使用LineSet_2D方法getPolygons查找所有多边形
  6. 我写了一个例子:

    //define or polygon. Note that Polygon_2D can also be used
    $rPolygon = new LineSet_2D(
        new Line_2D( 0, 3, 1, 1),
        new Line_2D( 1, 1, 3, 0),
        new Line_2D( 3, 0, 1,-1),
        new Line_2D( 1,-1, 0,-3),
        new Line_2D( 0,-3,-1,-1),
        new Line_2D(-1,-1,-3,0),
        new Line_2D(-3, 0,-1, 1),
        new Line_2D(-1, 1, 0, 3)
    );
    //define partition line set
    $rPartition = new LineSet_2D(
        new Line_2D(-1, 1, 1,-1),
        new Line_2D(-1,-1, 1, 1)
    );
    //result line set:
    $rResultSet    = LineSet_2D::createFromArray(array_merge(
        $rPolygon->getLines(), 
        $rPartition->getLines()
    ));
    //for example, dump plain result:
    var_dump($rResultSet->getPolygons());
    

    你也可以找到这个例子here但我认为这不是你问题的确切解决方案,因为我的LineSet_2D类将返回所有循环多边形(即不仅仅是'pieces')。

答案 1 :(得分:0)

您正在寻找“多边形斩波”布尔操作。您可以谷歌搜索可用资源。

自己做这个的一些队列.. 对于每个切片线..

  1. 找到切片线与多边形边缘的交点。
  2. 对于它相交的每条边,将边分割成两条。
  3. 将与分割边缘对应的多边形分割为两个多边形。
  4. 对所有多边形执行相同操作。 你将不得不处理特殊情况,比如分割线穿过顶点等等......