Algorithm 在现有等高线之间插入缺失的等高线

Algorithm 在现有等高线之间插入缺失的等高线,algorithm,language-agnostic,geometry,computational-geometry,geography,Algorithm,Language Agnostic,Geometry,Computational Geometry,Geography,等高线(也称为等值线)是跨二维标量场跟踪常量值的曲线。例如,在地理地图中,可能有等高线通过显示高程恒定的位置来说明地形的高程。在这种情况下,让我们将等高线存储为地图上的点列表 假设您的地图在已知高程处有多条等高线,否则您对地图的高程一无所知。假设地形是连续的且没有任何意外,您会使用什么算法来填充额外的等高线来近似地图的未知高程 很容易找到关于使用等高线插值单个点高程的建议。还有一些算法,比如将点高程转换为等高线的行进方块,但这些算法都不能准确地捕捉到这种用例。我们不需要任何特定点的高程;我们只需

等高线(也称为等值线)是跨二维标量场跟踪常量值的曲线。例如,在地理地图中,可能有等高线通过显示高程恒定的位置来说明地形的高程。在这种情况下,让我们将等高线存储为地图上的点列表

假设您的地图在已知高程处有多条等高线,否则您对地图的高程一无所知。假设地形是连续的且没有任何意外,您会使用什么算法来填充额外的等高线来近似地图的未知高程


很容易找到关于使用等高线插值单个点高程的建议。还有一些算法,比如将点高程转换为等高线的行进方块,但这些算法都不能准确地捕捉到这种用例。我们不需要任何特定点的高程;我们只需要轮廓线。当然,我们可以通过使用估计的高程填充阵列,然后使用行进方块根据阵列估计等高线来解决此问题,但该过程的两个步骤似乎不必要地昂贵,并且可能会引入伪影。当然还有更好的方法。

在我看来,所有方法都相当于通过插值重建3D曲面,即使是隐式的

您可以尝试通过展平曲线(将其转换为多段线)并对生成的多边形进行三角剖分来定义它们。(将有一个步骤关闭在域边界上结束的曲线。)

通过将三角形与新标高相交(沿边取消线性插值),将获得与新等曲线对应的新多段线。请注意,与旧标高的交点会重新创建旧多段线,这是正确的

可以对曲线应用后期平滑,但不能保证检索原始旧曲线,也不能防止闭合曲面相互交叉

请注意,沿曲线增加点的密度会给您一种错误的准确性感觉,因为等值线间距引起的误差将保持不变(事实上,重建曲面将是锥形的,其中一个曲率为零;最底部和最顶部直线内的曲面将是平的)


除使用平面三角形外,还可以考虑一种方案,在该方案中,计算每个顶点处的梯度向量(f.i.根据顶点及其相邻点上平面的最小二乘拟合),并使用该信息在三角形中生成二元多项式曲面。必须以这样的方式执行此操作:对于共享该边的两个三角形,沿边的值将重合。(不幸的是,我没有公式给你。)

然后,在平面近似下,将三角形进一步细分为更小的三角形,从而获得等值线

实际上,这与获取采样点,(Delaunay)对其进行三角剖分并将picewise连续面片拟合到三角形上没有太大区别


无论您将使用什么方法,无论是2D还是3D,如果您连续扫描z值的范围,那么推断会发生什么是非常有用的。这个思维实验确实重建了一个三维表面,它将具有连续性和光滑性


与粗糙的“平面三角剖分”模型相比,一个可能的改进是将两条等高线之间的每个三角形边延伸到下一条等高线。通过这种方式,可以实现高阶插值(立方),从而实现更平滑的重建

无论如何,您可以确定这将引入不连续性或其他类型的伪影。

混合方法:

  • 将等值线展平为多段线

  • 三角化由多段线和边界形成的多边形

  • 在每个节点上,估计表面梯度(平面到节点及其邻域的最小二乘拟合)

  • >P>在每个三角形中,考虑需要插值的两个边并计算端点上的导数(从已知的梯度和侧向);
  • 沿这些边使用Hermite插值,并求解所需的iso级别

  • 将在两侧获得的点连接起来

这种方法应该在复杂度和平滑度之间进行很好的折衷。它确实重建了一个连续的曲面(除了下面的注释)


注意,在某些情况下,yo将得到三个立方的解。如果每边有三个,按顺序加入。否则,请决定连接哪一条并使用其余两条闭合曲线。

明确重建3D曲面是获得无伪影等值线(或至少控制这些伪影)的最佳保证。在这方面,纯2D方法更差。