在现有轮廓线之间插入缺失的轮廓线

时间:2017-07-09 07:48:17

标签: algorithm language-agnostic geometry computational-geometry geography

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

假设您的地图在已知高程处有多条轮廓线,否则您对地图的高程一无所知。假设景观是连续的并且没有做任何令人惊讶的事情,您会使用什么算法来填充额外的等高线来近似地图的未知高程?

很容易找到有关使用等高线插入单个点的高程的建议。还有像Marching Squares这样的算法用于将点高程转换为等高线,但这些算法都没有完全捕获这个用例。我们不需要任何特定点的提升;我们只想要轮廓线。当然,我们可以通过填充具有估计高程的数组然后使用行进方格来基于阵列估计轮廓线来解决此问题,但是该过程的两个步骤看起来不必要地昂贵且可能引入伪像。当然有更好的方法。

2 个答案:

答案 0 :(得分:1)

IMO,关于所有方法都会以某种方式通过插值重建3D表面,即使是隐式的。

您可以尝试将曲线展平(将它们转换为折线)并对它们将定义的结果多边形进行三角测量。 (将关闭以域的边界结束的曲线的步骤。)

通过三角形与新水平的交叉(沿着边的无线性线性插值),您将获得与新的isocurves对应的新折线。请注意,与旧级别的交叉点会重新创建旧的折线,这是合理的。

您可以对曲线应用后平滑,但您无法保证检索原始的旧曲线,也无法阻止近距离相互交叉。

请注意,沿着曲线增加点的密度会给你一种错误的准确感,因为等值线的间距会产生误差(实际上重建的表面将是锥形的,具有一个曲率为null;最底部和最顶部线条内的表面将是平坦的。)

除了使用平面三角形之外,人们可能会想到一种方案,在这种方案中,您可以在每个顶点处计算梯度向量(来自顶点及其邻居上平面的最小二乘拟合的fi),并使用此信息生成二元变量三角形中的多项式曲面。您必须这样做,使得一侧的值与共享它的两个三角形重合。 (不幸的是,我没有给你的公式。)

然后通过以较小三角形进一步细分三角形来获得等值线,具有平坦的近似值。

实际上,这与获取样本点没有什么不同,(Delaunay)对它们进行三角测量并将三角形连续补丁拟合到三角形。

无论您使用何种方法,无论是2D还是3D,如果您以连续的方式扫描z值的范围,那么推断出会发生什么情况会很有用。这个思想实验确实重建了一个3D表面,它具有连续性和平滑性。

可能改善原油和平坦的三角测量"模型可以是将每个三角形边延伸到等多边形线之间,边形通向下一个等折线。这样,可以实现更高阶的插值(立方),从而提供更平滑的重建。

无论如何,你可以确定这会引入不连续性或其他类型的工件。

答案 1 :(得分:1)

混合方法:

  • 将等值线展平为折线;

  • 对由折线和边界形成的poygons进行三角测量;

  • 在每个节点上,估计表面坡度(平面与节点及其邻居的最小二乘拟合);

  • 在每个三角形中,考虑您需要插入的两边并计算端点处的导数(来自已知的渐变和侧面方向);

  • 沿着这些边使用Hermite插值并求解所需的等级;

  • 加入双方获得的分数。

这种方法应该是复杂性和平滑性之间的良好折衷。它确实重建了一个连续的表面(除了下面的评论之外)。

注意,在某些情况下,哟将获得立方体的三个解。如果每侧有三个,请按顺序加入。否则,决定加入哪个并使用其余两个来关闭曲线。

相关问题