有没有“几何轮廓线算法”?

3

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

数据只是(x,y,z)的列表,其中只有一些点(大约40~60个)。 (x和y是位置,z是高度)
我该如何找到这条轮廓线和点?

你需要轮廓的向量表示吗?还是只关心获取最终图像? - samgak
@samgak 只关心获取最终图像。 - JaeWoo So
3个回答

4
作为第一步近似,您可以认为您的函数在数据点的三角剖分上是分段平面的。
可以使用Delaunay三角剖分技术,但在这种情况下,考虑到规则的极坐标排列,我想一个基于极角的简单规则就可以解决问题。
在三角形内插值并获取水平截面是一件简单的事情。不幸的是,这将产生粗略的近似,并且由于折线的粗糙度,您可能会注意到伪影。
一种可能的解决方法是将折线平滑为后处理步骤,例如将其转换为polyBeziers。
另一种方法,我更喜欢的是使用更高阶的插值方法。对于C1连续性,您可以计算给定点处的梯度估计,并在三角形上拟合二次函数。然后将三角形细分为子三角形,在子顶点处插值函数,并在这些子三角形中切换到平面模型。

1
作为一个不规则网格,你应该首先在其周围建立一个网格(例如,从 Voronoi tesellation开始)。
对于每个三角形,取其顶点的最大和最小高度,并找出该范围内等高线的高度(例如,如果你每隔10个单位绘制一条等高线,而三角形的高度从11.5到34.2,则通过该三角形的等高线高度为20和30)。
然后将三角形内的高度函数近似为线性函数,找出那些等高线所在的位置并绘制它们。

0

等高线图的数据可以通过二维化简Marching Cubes算法生成,该算法在这里有描述。在这种化简中,使用正方形代替立方体,并使用四个采样值进行插值,而不是立方体的八个角落。

这种化简也被称为Marching Squares


1
该方法必须进行调整,因为拓扑结构不是正方形网格。 - user1196549

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接