使用多个直线切割分割二维多边形
Splitting a 2D polygon using multiple straight cuts
如何使用多条直线切割线将多边形分割成更小的多边形?想象一下用锋利的刀切纸。我正在寻找一种已知的算法来解决这个问题,或者更好的是,现有的 javascript 库。
我认为布尔运算不会解决这个问题,但我当然可能是错的。
我按照 David Eisenstat 在对问题的评论中提供的步骤进行了操作,并让它开始工作。所以基本上:
1.查找所有线交点
包括多边形中的所有切割线和每条单独的线。 Bentley-Ottmann sweep line algorithm可以用来求交点。
2。构建图表
这很容易使用交点及其对应的线段完成。
3。在图中查找循环
当时的图表是decomposed into a collection of oriented cycles。
我以 Angus Johnson 的 Clipper 库发誓:
http://www.angusj.com/delphi/clipper/documentation/Docs/Overview/_Body.htm
它使用华帝算法,其中涉及一些复杂的树结构来跟踪交叉点。它处理多边形孔洞、多个重叠多边形、将几乎平行的线与固定点合并,其标记机制让您可以非常详细地跟踪事后相交的地方。
如何使用多条直线切割线将多边形分割成更小的多边形?想象一下用锋利的刀切纸。我正在寻找一种已知的算法来解决这个问题,或者更好的是,现有的 javascript 库。
我认为布尔运算不会解决这个问题,但我当然可能是错的。
我按照 David Eisenstat 在对问题的评论中提供的步骤进行了操作,并让它开始工作。所以基本上:
1.查找所有线交点
包括多边形中的所有切割线和每条单独的线。 Bentley-Ottmann sweep line algorithm可以用来求交点。
2。构建图表
这很容易使用交点及其对应的线段完成。
3。在图中查找循环
当时的图表是decomposed into a collection of oriented cycles。
我以 Angus Johnson 的 Clipper 库发誓:
http://www.angusj.com/delphi/clipper/documentation/Docs/Overview/_Body.htm
它使用华帝算法,其中涉及一些复杂的树结构来跟踪交叉点。它处理多边形孔洞、多个重叠多边形、将几乎平行的线与固定点合并,其标记机制让您可以非常详细地跟踪事后相交的地方。