【发布时间】:2021-05-13 03:02:45
【问题描述】:
我正在尝试对多个多边形进行三角剖分,以使三角形不会添加额外的点。为了保持问题简短,我将使用 2 个圆圈,实际上这些将是 opencv 轮廓,但是两者之间的转换非常复杂,圆圈也显示了问题。
所以我有以下代码 (based on the example) 以便首先获取圆圈,然后使用 triangle project 对其进行三角测量
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
def circle(N, R):
i = np.arange(N)
theta = i * 2 * np.pi / N
pts = np.stack([np.cos(theta), np.sin(theta)], axis=1) * R
seg = np.stack([i, i + 1], axis=1) % N
return pts, seg
pts0, seg0 = circle(30, 1.4)
pts1, seg1 = circle(16, 0.6)
pts = np.vstack([pts0, pts1])
seg = np.vstack([seg0, seg1 + seg0.shape[0]])
print(pts)
print(seg)
A = dict(vertices=pts, segments=seg, holes=[[0, 0]])
print(seg)
B = tr.triangulate(A) #note that the origin uses 'qpa0.05' here
tr.compare(plt, A, B)
plt.show()
现在这会导致外圈和内圈都像这里显示 一样进行三角剖分,显然忽略了这个洞。但是,通过设置“qpa0.05”标志,我们可以使圆圈使用此处 中看到的孔。然而这样做会导致三角形被分割,添加许多不同的三角形,将 qpa 增加到更高的值确实会导致三角形的数量有所减少,但它们仍然存在。
请注意,我希望能够处理同一形状中的多个孔,并且这些形状最终可能是凹的。
有人知道如何在不添加额外三角形的情况下让三角测量使用孔吗?
【问题讨论】:
-
请注意,我也愿意使用不同的库。
-
您尝试过 GLU tesselator 吗?该 API 有点奇怪,因为它反映了 oldschool C,但它工作得很好并且非常健壮。看到这个stackoverflow.com/questions/38640395/…
标签: python opencv geometry triangulation