Vector3.Lerp与Vector3.LerpUnclamped

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);
}

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值