矢量线性插值是否与线性外推相同?

时间:2013-03-14 11:36:43

标签: c vector interpolation

具有线性插值(lerp)功能,如下所示:

/// Performs a linear interpolation between two vectors. (@p v1 toward @p v2)
///  @param[out]    dest    The result vector. [(x, y, x)]
///  @param[in]     v1      The starting vector.
///  @param[in]     v2      The destination vector.
///  @param[in]     t       The interpolation factor. [Limits: 0 <= value <= 1.0]
inline void dtVlerp(float* dest, const float* v1, const float* v2, const float t)
{
    dest[0] = v1[0]+(v2[0]-v1[0])*t;
    dest[1] = v1[1]+(v2[1]-v1[1])*t;
    dest[2] = v1[2]+(v2[2]-v1[2])*t;
}

这里通过线性外推我的意思是在线找到一个位置(见图) enter image description here

它是否适用于线性外推(比如提供coef > 1或小于0)?

1 个答案:

答案 0 :(得分:3)

是的,外推与插值相同(至少在这种情况下)。

如果从高中几何中回忆起,任何一行都是由以下形式的等式定义的:

y = mx + c

其中m是渐变,c是偏移(具体地说,是y轴截距)。如果您查看上面的代码,您会看到每个维度都有一个形式的等式:

dest = v1 + (v2-v1)*t

这是一样的!我们简单地替换如下:

  • y <-- dest
  • x <-- t
  • m <-- (v2-v1)
  • c <-- v1

因此,您可以将t设置为任意值(不仅仅是在[0,1]范围内),并在该行的某处获得一个唯一的点。