12

我试图想出一种简单而有效的方法来创建一个与许多给定“样本”点相交的光滑表面。

对于表面上的任何 X、Y 点,我在 4 个方向中的每个方向(X 轴上的下一个较高点和较低点,然后是 Y 轴)中识别出最多 4 个采样点。鉴于这一点,我想要一种方法来计算在 4 个样本点之间插值的 Z 值。

当然,在给定 4 个样本点中任何一个的 X、Y 位置的情况下,该算法应该输出该点的 Z 值。另请注意,样本点可能少于 4 个。

我猜想 4 个样本点的 Z 值的一些函数,以某种方式与样本点的距离成反比,但我不知道如何做到这一点。

任何人都知道一个简单的方法来做到这一点?

4

6 回答 6

11

您可以通过从 Catmull-Rom 样条构造补丁来做到这一点。这些样条线将撞击每个控制点,并且它们在一阶导数中是连续的(尽管不是二阶导数)。我还发现它们非常容易使用。数学很简单,它们的行为很直观,控制点略有变化。

在最高级别,每个补丁需要 16 个点(在数据集的边缘,您可以在同一样条曲线中使用角点和边缘点两次)。

首先,您需要在 4x4 矩阵的每一行中的点p[i][j]上进行插值,以创建一组四个中间控制点q[i]。这是我的意思的粗略 ASCII 草图。

p00 p01 q0 p02 p03
p10 p11 q1 p12 p13
p20 p21 q2 p22 p23
p30 p31 q3 p32 p33

现在,您可以在这四个中间控制点中的每一个之间进行插值,以找到曲面上的最终样条点。

这是跨四个点的 Catmull-Rom 样条构造。在此示例中,您使用p[i-2]p[i+1]两侧的控制点在点p[i-1]p[i]之间进行插值。 u是从零到一的插值因子。 τ定义为样条上的张力,将影响样条曲面与控制点的紧密程度。

                 | 0   1   0    0 | | p[i−2] |
                 |−τ   0   τ    0 | | p[i−1] |
p(u) = 1 u u2 u3 | 2τ τ−3 3−2τ −τ | | p[i]   |
                 |−τ  2−τ τ−2   τ | | p[i+1] |

注意:如何在 Stackoverflow 的 gui 中进行布局并不是很明显,但u2u3应该分别代表u squaredu cubed

于 2008-12-05T18:34:54.230 回答
4

您可以利用双线性/双三次插值,但在三个方向(分别为三线性/三次三次)。如果您了解这些插值形式的工作原理,那就很简单了。有关更多信息,请参阅Wikipedia 上的 Tricubic Interpolation 。

于 2008-11-24T02:56:02.257 回答
1

您是在寻找表面插值还是网格就足够了?

对于表面插值,我看到其他人建议使用三角测量(例如使用这个: http ://en.wikipedia.org/wiki/Delaunay_triangulation )

创建网格:我的一位同事使用热方程 ( http://en.wikipedia.org/wiki/Heat_equation ) 来计算给定样本点之外的像素值。这产生了极其逼真的地形表面,并且并行化是微不足道的。

于 2008-11-25T01:32:25.203 回答
0

使用 catmull-rom 补丁

于 2008-11-24T02:46:25.553 回答
0

如果您想要对该点进行简单的线性插值,则中心点的 Z 值只是 4 个相邻 Z 值的平均值,因为距离在 Y 和 X 上都是对称的。

如果距离不对称,但中心点始终位于同一 X 和 Y 线上,则可以计算 Y 和 X 插值,最终值是它们的平均值。

所以 Zc 将是:Zc=(Zx1+x*(Zx2-Zx1)/(x2-x1)+Zy1+y*(Zy2-Zy1)/(y2-y1))/2,其中 x 和 y 是距离x1 和 y1。

于 2008-11-25T01:26:50.363 回答
0

使用问题中建议的方案(其中最近邻居的一些子集是从分散的集合中选择的)进行插值时的一个问题是结果不必是连续的。

想想看。假设我要沿着通过 (x,y) 平面的一些平滑、连续的路径移动。只要 4 个最近的邻居不改变,插值将是平滑的,无论您选择如何定义。但是,在某些时候,最近邻居的子集会突然改变。此时,您必须使插值在边界上保持一致。最好是使用自变量集的三角剖分。这确保了数据凸包内的连续(线性)插值。通过更多的工作,也可以通过三角测量来实现更高阶的插值。

如果您碰巧从事地质统计学,径向基函数也通常用于插值或克里金法。由于您正在研究基于距离的方法,因此请考虑径向基函数。例如,搜索“inverse multiquadric interpolation”。

于 2009-03-31T15:21:55.537 回答