0x01 从大到小
335(src) —> 23(dest)
src = dest + Math.abs(src -dest) * ratio
0x02 从小到大
35(src) —> 335(dest)
src = dest - Math.abs(src -dest) * ratio
0x03 简写
src = dest + (src - dest) * ratio
0x04 应用在角度上
如果应用在角度变换,就要留意,尤其是当跨度大于180°时,如从335 --> 15
,如果用上面的函数,会绕一个大圈,为方便理解,可以用如下办法
function lerpAngle(aim, cur, ratio) {
var dt = cur - aim;
if (dt > Math.PI) {
//从小到大 35 --> 335
// console.log(translateToAngle(aim), translateToAngle(cur), dt);
return aim - (Math.PI * 2 - dt) * ratio;
}
if (dt < -Math.PI) {
//从大到小 325 --> 5
// console.log(translateToAngle(aim), translateToAngle(cur), dt);
return aim + (Math.PI * 2 - Math.abs(dt)) * ratio;
}
return aim + dt * ratio
}
function translateToAngle(param) {
return 360 * (param / (2 * Math.PI));
}
其他
初高中数学忘得好快啊。。。。。。三角函数什么的全忘了。。。。