【问题标题】:Creating regular Delaunay grid in with scipy用 scipy 创建常规的 Delaunay 网格
【发布时间】: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 的结果。

【问题讨论】:

  • 显然两种三角剖分都是“正确的”,因为两种对角线的长度相同。您可能想查看Delaunayqhull_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


【解决方案1】:

您可以尝试三角测量而不是 Delaunay:

import matplotlib.tri as tri

xlen = 10
ylen = 16
xPoints = np.arange(0,xlen+1,1)
yPoints = np.arange(0,ylen+1,1)

gridPoints = np.array([[[x,y] for y in yPoints] for x in xPoints])
a = [[i+j*(ylen+1),(i+1)+j*(ylen+1),i+(j+1)*(ylen+1)] for i in range(ylen) for j in range(xlen)]
triang = tri.Triangulation(gridPoints[:,:,0].flatten(), gridPoints[:,:,1].flatten(),a)

plt.triplot(triang)
plt.plot(gridPoints[:,:,0],gridPoints[:,:,1],'bo')
plt.title("Triangulation Visualization")

【讨论】:

    猜你喜欢
    • 2015-09-26
    • 2017-03-17
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2015-04-06
    • 2011-09-26
    • 1970-01-01
    相关资源
    最近更新 更多