作为第一步近似,您可以认为您的函数在数据点的三角剖分上是分段平面的。可以使用Delaunay三角剖分技术,但在这种情况下,考虑到规则的极坐标排列,我想一个基于极角的简单规则就可以解决问题。在三角形内插值并获取水平截面是一件简单的事情。不幸的是,这将产生粗略的近似,并且由于折线的粗糙度,您可能会注意到伪影。一种可能的解决方法是将折线平滑为后处理步骤,例如将其转换为polyBeziers。另一种方法,我更喜欢的是使用更高阶的插值方法。对于C1连续性,您可以计算给定点处的梯度估计,并在三角形上拟合二次函数。然后将三角形细分为子三角形,在子顶点处插值函数,并在这些子三角形中切换到平面模型。
作为一个不规则网格,你应该首先在其周围建立一个网格(例如,从 Voronoi tesellation开始)。对于每个三角形,取其顶点的最大和最小高度,并找出该范围内等高线的高度(例如,如果你每隔10个单位绘制一条等高线,而三角形的高度从11.5到34.2,则通过该三角形的等高线高度为20和30)。然后将三角形内的高度函数近似为线性函数,找出那些等高线所在的位置并绘制它们。
等高线图的数据可以通过二维化简Marching Cubes算法生成,该算法在这里有描述。在这种化简中,使用正方形代替立方体,并使用四个采样值进行插值,而不是立方体的八个角落。 这种化简也被称为Marching Squares。