等高线(也称为等值线)是在二维标量场上跟踪常量值的曲线。例如,在地理地图中,可能有等高线,通过显示高程恒定的位置来说明地形的高程。在本例中,让我们将等高线存储为地图上的点列表。
假设您的地图在已知高程处有多条等高线,否则您对地图的高程一无所知。假设地形是连续的,没有任何令人惊讶的事情,你会用什么算法来填充额外的等高线来逼近地图的未知海拔高度?
使用等高线插值单个点的高程很容易找到建议也有一些算法,例如将点高程转换为等高线的行进方格,但这些算法都不能准确地捕获这个用例我们不需要任何特定点的高程;我们只需要等高线。当然,我们可以通过用估计的高程填充一个数组,然后使用行军方格根据数组估计等高线来解决这个问题,但这两个步骤似乎不必要地昂贵,而且很可能引入伪影当然还有更好的办法。
最佳答案
在我看来,几乎所有的方法都相当于通过插值重建三维曲面,即使是隐式的。
您可以尝试将曲线展平(将它们转换为多段线)并根据它们的定义对生成的多边形进行三角剖分(将有一个步骤关闭结束于域边界的曲线。)
通过将三角形与新标高相交(沿边取消线性插值),将获得与新等参曲线相对应的新多段线请注意,与旧标高的交点将重新创建旧的多段线,这是合理的。
可以对曲线应用后期平滑,但不能保证检索原始的旧曲线,也不能防止闭合围线相互交叉。
注意,沿着曲线增加点的密度会给你一种错误的精度感觉,因为等值线的间距造成的误差将保持不变(事实上,重建的曲面将是锥形的,其中一个曲率为零;最底部和最顶部直线内的曲面将是平的)。
除了使用平面三角形外,还可以考虑一种方案,即在每个顶点计算梯度向量(f.i.从顶点及其相邻平面的最小二乘拟合),并使用此信息在三角形中生成二元多项式曲面。这样做的方式必须使共享边的两个三角形的边上的值重合。(不幸的是,我没有公式给你。)
然后通过在更小的三角形中进一步细分三角形来获得等值线,用平坦近似。
实际上,这与获取采样点(delaunay)对其进行三角剖分并将picewise连续面片拟合到三角形上并没有太大区别。
无论您将使用什么方法,无论是二维还是三维,如果您以连续的方式扫描z值的范围,那么对发生的事情进行推理是很有用的。该思想实验重建了一个具有连续性和光滑性的三维曲面。
与原始的“平面三角剖分”模型相比,一个可能的改进是将三角形之间的每一条边延伸到具有指向下一条等参多段线的边的等参多段线这样,可以实现更高阶的插值(立方),从而提供更平滑的重建。
无论如何,您可以确定这会引入不连续性或其他类型的工件。