Python 是否有一种简单的方法来计算非简单自交曲线的轮廓?

Python 是否有一种简单的方法来计算非简单自交曲线的轮廓?,python,algorithm,math,computational-geometry,Python,Algorithm,Math,Computational Geometry,我正在寻找一种方法来三角化和填充非简单(可能是自交)多边形轮廓的内部。我在网上找到了一些非常好的算法,可以对简单曲线进行三角剖分或找到一组点的凸包,但我需要找到一系列点的轮廓,我不能依赖它是约旦曲线(没有为每个自相交点打孔,比如说,地图盒/耳切) 我尝试了mapbox的earcut()的python端口,这很好,但是可以为自相交打孔 我无法尝试scipy.spatical,因为它根本不支持非简单曲线 我正在进行Python方面的研究,并计划最终将其移植到JavaScript中,但目前我不懂语言,

我正在寻找一种方法来三角化和填充非简单(可能是自交)多边形轮廓的内部。我在网上找到了一些非常好的算法,可以对简单曲线进行三角剖分或找到一组点的凸包,但我需要找到一系列点的轮廓,我不能依赖它是约旦曲线(没有为每个自相交点打孔,比如说,地图盒/耳切)

我尝试了mapbox的earcut()的python端口,这很好,但是可以为自相交打孔 我无法尝试
scipy.spatical
,因为它根本不支持非简单曲线

我正在进行Python方面的研究,并计划最终将其移植到JavaScript中,但目前我不懂语言,任何算法都可以

import earcut
from shapely.ops import cascaded_union
from shapely.geometry import Polygon
points = [[(0,0), (100,0), (100,50), (200,100), (0,100), (20,20), (80,20), (80,80), (20,80)],[]]
data = earcut.flatten(points)
flattrangles = earcut.earcut(data['vertices'])
alltriangles = [[points[0][j] for j in tr] for tr in triangles.T.tolist()]

cascaded_union([Polygon(tr) for tr in alltriangles])
需要一个没有孔的大多边形
得到了一个有两个三角形孔的多边形,其中的自交点是

如果你能发布一个草图,说明你想要的结果是什么,而不是不想要的结果,那将非常有用。我只能想出一种明确的方法来填充自相交多边形,它涉及自相交处的洞,你提到的不是你想做的…@vlsd,我想他的意思是:@MattTimmermans非零是我一直在想的(直到偶数/奇数,谢谢!),但即使这样也有可能出现“洞”就像维基百科上优秀的视觉例子所显示的那样,如果你的目标真的是填充,那么就没有必要进行三角测量。您可以使用奇偶校验或非零规则进行直多边形填充。@YvesDaoust:我的目标确实是最终填充多边形,但我确实希望通过opengl进行三角化以进行矢量化和渲染。我可以编写一个使用扫描线进行光栅化的算法,但我更喜欢一个经过良好测试的库来为我实现,至于孔,我现在确信,由于上面的评论,我需要重申这个问题并寻求非零规则三角剖分,而且真的不能使用“无孔”未明确定义的约束。我很快就会编辑这篇文章