3D 表面的三角形网格

计算科学 网格生成 gmsh
2021-12-03 21:50:14

我有一个不规则的网格点来描述这个表面(南美洲的一个大型俯冲断层)。颜色是深度。无论如何,我有不规则间隔的 3D 坐标(经度、纬度、深度)。我正在尝试使用 gmsh 生成三角形网格,但我正在努力解决如何。我可以用一个小python函数使每个不规则网格点成为gmsh中的一个“点”:

def xyz2gmsh(fout,x,y,z):
    f=open(fout,'w')
    for k in range(len(x)):
        line='Point('+str(k+1)+') = {%.6f, %.6f, %.6f, 0.01};\n' %(x[k],y[k],z[k])
        f.write(line)
    f.close()

这个文件(fout)生成加载到 gmsh 但没有显示!据我了解,我需要以某种方式告诉 gmsh 这些点共同代表要网格化的表面。如何?我可以告诉 gmsh 为制作特定尺寸的元素进行拍摄吗?

谢谢!

1个回答

我会将我的评论扩展到答案。由于您的表面相当光滑,而不是生成表面网格,您可以生成仅包含已采样点的 2D 网格,然后通过稍后(x,y)z

这可能就足够了,也可能不会。三角测量算法,如 Tyler Olsen 链接的算法,针对某些标准进行了优化(最大化最小角度)。将 2D 三角剖分提升到曲面网格时,结果可能不太理想,具体取决于曲面的斜率。Hjelle 关于三角剖分的书中的第 8 章涵盖了分散数据插值,可能对您有所帮助。

您提到了 gmsh,但实际上我更喜欢使用Triangle程序来完成大多数网格任务。它的输入/输出文件格式要简单得多,因此您可以很容易地编写脚本来创建或解析它们。如果您不想麻烦,我有 C、Fortran 和 Python 中的代码。

在 gmsh 中,您必须指定一个线循环来参数化输入点的凸包。使用三角形,你可以给它一个点云;它将为您计算凸包,然后对内部进行三角测量。如果域不是凸的,您只需要描述边界。要获得给定区域的三角形,您可以给它一个命令行开关,或者.area如果所需的大小取决于您所在的位置,您可以编写一个特殊文件。我有示例代码用于在 Python 中执行此操作,以解决我需要在某些区域比其他区域更精细的网格的情况。