Duc*_*een 4 c interpolation vector
线性插值 (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;
}
Run Code Online (Sandbox Code Playgroud)
这里的线性外推法是指在线上找到一个位置(见图)
它适用于线性外推(比如提供coef > 1
或小于0
)吗?
是的,外推法与内插法相同(至少在这种情况下)。
如果您还记得高中几何,任何直线都是由以下形式的方程定义的:
y = mx + c
Run Code Online (Sandbox Code Playgroud)
其中m
是梯度,c
是偏移量(具体来说,y 轴截距)。如果您查看上面的代码,您会看到每个维度都有一个以下形式的方程:
dest = v1 + (v2-v1)*t
Run Code Online (Sandbox Code Playgroud)
这是一样的!我们简单地替换如下:
y <-- dest
x <-- t
m <-- (v2-v1)
c <-- v1
因此,您可以设置t
为任何值(不仅仅是在 [0,1] 范围内)并获得线上某处的唯一点。