如何在两个向量之间线性插值?


16

我有一个速度矢量,我的客户在哪里,往哪里去,我有一个来自服务器的矢量,告诉客户应该在哪里。有时情况有所不同,因此我想在当前位置和服务器正确位置之间进行插值。

在此处输入图片说明

黑色箭头是客户端速度向量,红色箭头是服务器上的客户端速度向量,蓝色箭头是我要计算和插入的速度向量。

如何计算蓝色向量?那么,如何在它们之间进行线性插值?

Answers:


18

蓝色向量很容易计算:红色-黑色(向量之间的符号为负)。但是,如果您只想在黑色和红色矢量之间进行插值,则不必进行计算。线性插值只是线性组合。因此,您可以采用:alpha *黑色+(1-alpha)*红色,其中alpha必须来自间隔<0,1>。如果alpha为1,那么您将获得黑色矢量;当alpha为0时,您将获得红色矢量。

如果我理解正确,您将及时在这些向量之间进行插值。因此,只需选择正确的alpha增量即可。

我明白你的意思吗?还是您说的是完全不同的内容?


是的,你说对了。再问一个问题,如何将向量的数字相乘?该操作会给我带来新的帮助吗?例如,红色是长度为8的向量(0,10),而黑色是长度为4的向量(-2,5)。我该怎么做alpha *黑色或(1-alpha)*红色?谢谢。
gmemario 2011年

您只需将每个向量坐标分别相乘即可。例如,如果alpha为0.5,则alpha *黑色+(1-alpha)*红色=(0,5)+(-1,2.5)=(-1,7.5)-如果将其绘制到某些纸张上,则表示将会看到它确实恰好在这两个向量之间。
zacharmarz 2011年

10

拍摄这张照片:

在此处输入图片说明

AB是从A到B的红色向量。

假设P是从A到B的方式的25%。从原点到P的基本方式是

A + ( B - A ) / 4
= 3/4 A   +   B / 4

所以3/4 A和1/4 B

另一种发现方法是说您想要一个向量“接近” A到75%,而向量“接近” B到25%。(一个向量“ A”“接近” 100%就是“ A”)。

因此,您还可以找到P:

A*t + (1-t)*B

t = 0.75(说“接近” A的75%)

0.75A + 0.25B

因此,C中用于Vector3f类的简单LERP函数将是:

static Vector3f lerp( const Vector3f& A, const Vector3f& B, float t ){
  return A*t + B*(1.f-t) ;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.