如何从多个轮廓线生成三角网格

问题描述 投票:1回答:1

我需要在两条或更多条三维轮廓线之间生成一个三角网格。轮廓线只是一个点阵列,并且始终是闭合的。

Example contour lines

我已经尝试使用Poly2Tri库进行delaunay三角测量,但这不是很好,因为它只能在2d工作,而我可以让它在3d中工作,它不处理等高线垂直堆叠(即:丢弃第三维时具有相同的坐标)

有谁知道最好使用哪种算法,理想情况下我可以在c#应用程序中使用现有的库?

c# computational-geometry mesh surface triangulation
1个回答
1
投票

您可以继续使用2D Delaunay算法,但每次在两个相邻层(z1,z2)之间进行。 (z1 <z2)

假设轮廓线被采样并在z平面上以逆时针顺序存储为一组(x,y,z)。您需要为三角测量构造一组边界/孔点:

  • 检测或计算重叠线段(x1,y1,z1)(x2,y2,z1)和(x1,y1,z2)(x2,y2,z2)
  • 沿着两个相邻线段的平均法线方向向内移动(x1,y1,z1)一个小偏移。同样,向内移动(x2,y2,z1);向外移动(x1,y1,z2)(x2,y2,z2)。现在两条(或更多条)轮廓线分开,你可以得到两个(或更多)边界/孔点设置。
  • 在由边界和空洞定义的区域内应用Delaunay trangulation(即生成随机点,边界外或内部的落点,构造三角形)。我假设Poly2Tri将处理三角形部分覆盖一个洞的情况。在(x,y)平面中包含所有三角形后,通过插入原始数据来恢复偏移并计算z。

对(z2,z3)层再次进行三角测量,依此类推。请注意,z2处的孔/边界点保持不变,但如果发生重叠,而不是向内移动,它现在向外移动。最后,将所有三角形组合成一个网格。

© www.soinside.com 2019 - 2024. All rights reserved.