简单地说:给定两个点A和B,找到它们之间的点。
例如,如果我想沿着一条线一步将某物从位置 x=1 移动到 x=4:
1-----------------------4
第一步位于位置 1,第二步位于位置 4,因此对象会立即从一个位置移动到另一个位置。但是,如果我希望对象花费一定的时间或帧数来进行过渡,我需要通过查找均匀间隔的中间点来优化它。
如果我想让物体从1移动到4需要两步(或两帧),
1-----------X-----------4
我需要计算新点 (X) 是什么,以便我可以在适当的时间在那里绘制对象。在这种情况下,点 X 将是
(max-min)
location = min + (current_step) * --------
steps
location
这就是我们正在努力寻找的。min
=1, max
=4,在本例中steps
=2,因为我们想将跨度分为两步:
step: location:
0 1
1 2.5
2 4
1------------(2.5)-----------4
如果我们想采取 4 个步骤:
step: location:
0 1
1 1.75
2 2.5
3 3.25
4 4
1---(1.75)---(2.5)---(3.25)---4
等等。对于四步,对象移动每帧总距离的 25%。 10 步、10% 等等,令人作呕。
对于多个维度(当对象具有 2 维或 3 维轨迹时),只需将其独立应用于每个 X、Y、Z 轴。
This is linear插值。还有其他种类。一如既往,谷歌可以帮助你 http://www.google.com/search?q=interpolation.
其他应用包括纹理映射、抗锯齿、图像平滑和缩放等,当然还有游戏和图形之外的许多其他用途。
注意:很多框架已经提供了这一点。例如,在 XNA 中,它是矩阵Lerp http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.matrix.lerp.aspx.