有没有"Geometry Contour Line Algorithm"?

Is there any "Geometry Contour Line Algorithm"?

我想找到并绘制这样的轮廓线。

数据只是 (x,y,z) 的列表,其中只有几个点(大约 40~60)。 (x和y是位置,z是高度)

如何找到这个轮廓线和点?

等高线图的数据可以通过行进立方体算法的二维简化来生成,here 对此进行了描述。在简化中,使用正方形而不是立方体,并且使用四个采样值进行插值而不是立方体的八个角。

简化也称为marching squares

由于它看起来像一个不规则的网格,您应该首先围绕它构建一个网格(例如,从 Voronoi tesellation)。

对于每个三角形,取其顶点的最大和最小高度,并找出该范围内等高线的高度(例如,如果您每 10 个单位绘制等高线,三角形的高度为从 11.5 到 34.2,穿过该三​​角形的等高线的高度为 20 和 30)。

然后将三角形内部的高度函数逼近为线性函数,找出那些轮廓线所在的位置并绘制它们。

作为一阶近似,您可以承认您的函数在数据点的三角剖分上是分段平面的。

可以使用 Delaunay 三角剖分技术,但在这种情况下,鉴于规则的极坐标排列,我想基于极坐标的简单规则就可以做到。

在三角形内部进行插值并得到水平截面是一件简单的事情。不幸的是,这会产生粗略的近似值,您可能会注意到由于多段线的粗糙度而导致的伪影。

一种可能的解决方法是在后处理步骤中对多段线进行平滑处理,例如将它们变成 polyBeziers。

另一种我比较喜欢的方法是使用高阶插值法。对于 C1 连续性,您可以计算给定点处的梯度估计值,并在三角形上拟合二次函数。然后再细分子三角形中的三角形,在子顶点处进行函数插值,在这些子三角形中切换到平面模型。