Geometry 如何用直线分割简单多边形
我有一个简单的多边形(凸面或凹面,但没有孔),我需要用线段将其分割成多个部分。我不确定如何实际确定切片后产生多少多边形,或者如何对顶点进行分组 基本的凸面情况总是产生2个子多边形是很容易的,但是我如何处理复杂的凹面形状呢?以“E”形多边形为例。垂直切片可以生成4个多边形。如何确定构成这些子多边形的每个顶点 定义多边形:这里有两个选项。我的多边形可以是顶点的有序列表,也可以是三角形的数组。我更喜欢使用三角形数组的解决方案。在每个三角形之间循环,如果它们相交,用直线将其切分,应该是非常容易的。但是我不知道如何将这些三角形组合成子多边形 伪代码甚至一般建议都不错;C#实现是理想的。不久前,我提出了一个稍微不同的问题 这个答案给出了一种建立形状轮廓的方法,给出了该形状的三角形分解 基本概念是将所有三角形的边视为有向矢量,然后抵消相等但相对的边。< /P> 在您的例子中,将有一组三角形表示原始形状。你可以用这条线来分割各个三角形。然后,您将使用上面概述的方法将三角形重新聚集成形状,附带条件是切片边不会取消 上面提到的答案中有细节和图片。但总结一下这些步骤将是非常困难的Geometry 如何用直线分割简单多边形,geometry,line,polygon,computational-geometry,slice,Geometry,Line,Polygon,Computational Geometry,Slice,我有一个简单的多边形(凸面或凹面,但没有孔),我需要用线段将其分割成多个部分。我不确定如何实际确定切片后产生多少多边形,或者如何对顶点进行分组 基本的凸面情况总是产生2个子多边形是很容易的,但是我如何处理复杂的凹面形状呢?以“E”形多边形为例。垂直切片可以生成4个多边形。如何确定构成这些子多边形的每个顶点 定义多边形:这里有两个选项。我的多边形可以是顶点的有序列表,也可以是三角形的数组。我更喜欢使用三角形数组的解决方案。在每个三角形之间循环,如果它们相交,用直线将其切分,应该是非常容易的。但是我
所有这些都满足了您从多边形的三角剖分开始的愿望。但是,正如你最初的问题中的一个评论家指出的,你可能想考虑在.< /P> < P>中的选择。我在我的库中有这个算法。这是。如果您理解Javascript,我相信将其改写为您的编程语言会很容易。这有什么帮助吗?好办法。不过,我对实现它还是有点迷茫。你能提供一些细节吗?循环逻辑将如何运行?1) 随机选取三角形A和B。2)将A的每一侧与B匹配。3)如果任意一侧A+任意一侧B=零,则移除该一侧?但是,当我们处理PIONT时,如何去掉一个边?4) 现在我有了一个正方形C。我现在可以通过取正方形C和随机三角形D的并集来再次循环吗?然后我如何继续第二个子多边形?@Liquid,你所说的循环逻辑是什么意思?我必须写一个循环,它贯穿数组中的每个三角形,并进行你所建议的所有比较。我需要最终将单个三角形阵列分割为切片后产生的多边形数。@Liquid,我已经添加了更多细节。通过多边形循环创建一个边集,然后通过边集运行以获得结果多边形。谢谢!我想我现在唯一的问题是,如何将三角形数据转换成3条逆时针方向的边?我有两个数组,一个是每个多边形点的x,y顶点坐标。然后我有一个三角形数组,每个三角形是一个由三部分组成的名称,映射到顶点数组。示例:Tri[0,1,2]将指定多边形上的顶点1、2和3,每个顶点都是带有x和y分量的向量2。我如何将其转换为逆时针方向的边来进行边比较?嗨@Ivan Kuckir,它可以轻松地与谷歌地图一起工作吗?