【发布时间】:2015-07-05 09:23:40
【问题描述】:
是否有某种方法可以像 Matlab Delaunay 产生的那样在 2D 中获得更有序的三角测量?这是 Matlab 的 2D Delaunay 三角剖分示例。
使用此代码:
xPoints = np.arange(0,11,1)
yPoints = np.arange(0,11,1)
gridPoints = np.array([[x,y] for y in yPoints for x in xPoints])
tri = Delaunay(gridPoints)
plt.triplot(gridPoints[:,0],gridPoints[:,1],tri.simplices.copy())
plt.plot(gridPoints[:,0],gridPoints[:,1],'bo')
plt.title("Triangulation Visualization")
我得到下面的三角测量:
请注意,Matlab 结果中的对角弧如何具有相同的斜率;但 scipy 结果中的结果各不相同。由于 Matlab 和 Scipy 都在内部使用 QHull,我认为有一些方法可以模仿 Matlab 的结果。
【问题讨论】:
-
显然两种三角剖分都是“正确的”,因为两种对角线的长度相同。您可能想查看
Delaunay的qhull_options=参数,它采用传递给qdelaunay的选项字符串。总结了各种可能的选项here,尽管没有明显的突出之处。不幸的是,由于它是封闭源代码,因此无法看到 MATLAB 的delaunay函数是如何工作的。 -
是的,两者都是正确的,但由于这是一个统一的域,matlab 的三角剖分允许对数学进行一些简化。感谢您提供该链接,我之前搜索时没有找到该链接。
-
对于您的问题,是否可以自己显式生成三角测量?对于统一的矩形域,这应该是合理的。
-
This old doc 表示 MATLAB 使用的 Qhull 选项是
'Qt','Qbb','Qc',但是当我使用带有scipy的选项时,我没有得到你想要的结果。我尝试了各种组合都无济于事。有趣的是 - 在该链接页面上,使用 Matlab Delaunay(示例 2)对统一“网格”进行三角剖分并 不 显示您寻求的规律性。我想知道您的特定 Matlab 示例(即间隔为 0.25 的单位平方)是否由侥幸产生?不幸的是,我没有获得许可进行测试的 Matlab。 -
对于您的示例,您可以通过在一组线性变换的输入点上运行
qdelaunay来生成一个很好的三角剖分。添加少量倾斜,例如x = x + eps * y,应该够用了。
标签: python numpy scipy computational-geometry delaunay