Vector3.Lerp
线性差值。
Vector3 Lerp(Vector3 a, Vector3 b, float t)
返回一个Vector3的值。Vector3 retrun = new Vector3( (b.x-a.x)*t , (b.y-a.y)*t , (b.z-a.z)*t )
也就是说,t为0,返回a。t为1,返回b。
但是这里也有特殊情况,当t大于1时,返回的还是b。
当t小于0,返回的是a。
这个就是普通的线性插值,也是钳制性的线性差值。
这个钳制就好像把最终的返回值限定在a和b之间。
代码实现是这样子的
public static Vector3 Lerp(Vector3 a , Vector3 b , float t)
{
t = t<0?0:t;
t = t>1?1:t;
return new Vector3(a.x+(b.x-a.x)*t,a.y+(b.y-a.y)*t,a.z+(b.z-a.z)*t);
}
Vector3.LerpUnclamped
非牵制性的线性差值。
很难理解。但是我们知道一点就好。这个函数的返回值会超过a和b的范围。
- 情况1
t在0,1之间,这个时候情况同上函数。
- 情况2
t大于1,比如t等于2。
设a = (10,0,0) b=(0,0,0)
那么返回值就是 return = (-10,0,0)
可能是这个计算公式 Vector3 retrun = new Vector3( (b.x-a.x)*(1-t) , (b.y-a.y)*(1-t) , (b.z-a.z)*(1-t) )
- 情况3
t小于0
这种情况自己应该可以计算粗回来了。
代码的实现是这样子的
public static Vector3 LerpUnClamped(Vector3 a , Vector3 b , float t)
{
return new Vector3(a.x+(b.x-a.x)*t,a.y+(b.y-a.y)*t,a.z+(b.z-a.z)*t);
}