Python:圆柱体(或任何周期性曲面)的Delaunay三角剖分

2024-04-23 18:07:15 发布

您现在位置:Python中文网/ 问答频道 /正文

一年前,我问过如何正确地三角剖分平面上的一个周期形状:圆环(Getting a proper Delaunay triangulation of an annulus (using python))。在

我现在想把它扩展到对一个圆柱体(或者一般来说,任何周期性曲面)进行三角剖分。我尝试直接扩展二维代码:

from scipy.spatial import Delaunay
NZ = 14
NTheta = 14

R = 1 #radius of cylinder 
L = 3 #length of cylinder 

#define base rectangle (u,v)
u=np.linspace(0, 2*np.pi, NTheta) #periodic direction
v=np.linspace(0, L, NZ)
# u=u[:-1] #leave out one point
u,v=np.meshgrid(u,v)
u=u.flatten()
v=v.flatten()

#evaluate the parameterization at the flattened u and v
x=R*np.cos(u)
y=R*np.sin(u)
z=v

#define 2D points, as input data for the Delaunay triangulation of U
points2D=np.vstack([u,v]).T
tri = Delaunay(points2D, incremental=True)#triangulate the rectangle U
triSimplices = tri.simplices

xyz0 = np.vstack([x,y,z]).T

我通过参数化创建一个圆柱体,并通过基域(矩形)的scipy.spatial.Delaunay()获得三角剖分。显然,这种三角测量并不知道周期性。我可以通过移动最后一行并绘制: enter image description here

为了纠正这一点,我尝试了2D解决方案的直接扩展——在3D中添加一个额外的点,重新三角化并删除不需要的简单化。在

^{pr2}$

然而,将二维代码扩展到三维似乎有一个大问题——三维中的三角剖分给出的是四面体,而不是三角形!此外,它似乎对中心点的选择更为敏感。总之,我被卡住了。在

那么,对这样一个周期曲面进行三角剖分的正确方法是什么呢?在


Tags: ofthe代码npscipyspatialdelaunay剖分