Algorithm 特殊方向上的多边形分解
我正在寻找一个可以进行多边形分解的库。我想定义多边形应该分割的方向或线,如下图所示: 这样我就得到了小多边形。有人知道支持这一点的图书馆吗Algorithm 特殊方向上的多边形分解,algorithm,computational-geometry,polygons,decomposition,Algorithm,Computational Geometry,Polygons,Decomposition,我正在寻找一个可以进行多边形分解的库。我想定义多边形应该分割的方向或线,如下图所示: 这样我就得到了小多边形。有人知道支持这一点的图书馆吗 有什么想法吗?我不知道你用的是哪种语言。我有一个为我的目的而编写的库,它可以通过给定的线集获得完整的分区,并返回多边形。它是在PHP上编写并调用的,使用它,您可以通过以下方式解决您的问题: 通过一组线LineSet_2D或多边形_2D定义多边形 也可通过线_2D定义分割线 使用LineSet_2D方法getPolygons查找所有多边形 我写了一个例子:
有什么想法吗?我不知道你用的是哪种语言。我有一个为我的目的而编写的库,它可以通过给定的线集获得完整的分区,并返回多边形。它是在PHP上编写并调用的,使用它,您可以通过以下方式解决您的问题:
//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());
您也可以找到此示例,但我认为它不是您问题的精确解决方案,因为我的LineSet_2D类将返回所有循环多边形(即,不仅是“碎片”)。您正在寻找“多边形切块”布尔运算。你可以在谷歌上搜索可用资源
有些人会要求你自己做这件事。。
对于每一条切片线
你必须注意特殊情况,比如分割穿过顶点的线等等 从图片上看,这并不明显-将直线添加到结果分区的标准是什么(直线,即存在边,但也有一些直线穿过多边形的边)。直线应具有边的方向,并从每个边点开始。但我的目标是定义随机方向,并在这个方向上进行分解。所以,它只是一组线?我的意思是,输入是:将被分解的polugon和一些线(让它们与多边形的边平行)。你期望结果是什么?一组新多边形?是的,我想输出一组小多边形,输入是多边形和一组线。我找到了这个库。你知道一个函数可以解决我的问题吗?嘿,谢谢你的回答,我用C++。你说的循环多边形是什么意思?我的解决方案应该是每个多边形,例如A,B,c。。。。在我的FiguleWror中,我认为将PHP改编成C++并不难(因为C++具有更多的语法和OOP能力)。通过提到循环多边形,我的意思是你将通过LineSet_2D进行分区,你将得到所有多边形,而不仅仅是原始多边形的碎片。例如:想象一个有两条对角线的正方形。它被分为4个部分,但它有更多的真实多边形,因为不仅有“小”三角形部分,还有“大”(半个正方形)三角形,甚至没有三角形(整个正方形没有一个小三角形部分)。你是说像diff等操作吗?在这种情况下这是可能的,但我想我有很多库,它们可以处理2个多边形,所以它应该有一些多边形和线?我不确定是否有库可以为您处理这些。我不使用其他人,因为我只使用一个。此外,除了交集例程之外,它更像是一个数据结构问题。所以,如果你找不到一个,我想很可能就是这样。你可以自己写一本。这并不难,而且可能很有趣。另外,您可以在将来自己修复任何bug。