我需要在三个不同的范围之间进行插值, (1,1.3),(.72,1) , (1.4,1.9)->(1,1.05) 和 (2,3)->(1.05,1.1) 其中前两项是 x 值,第二两项是 y 值,但该函数似乎并不即使对于给定的点,也返回正确的值,
感谢任何帮助。
function lerp(x1, x2, y1, y2, x) {
return y1 + (x2 - x1) * (y2 - y1) / (x2 - x1);
}
function savings(t) {
let res;
let m;
if (t >= 1 || t <= 1.3) {
res = lerp(1, 1.3, .72, 1, t);
console.log(res)
}
if (t >= 1.4 || t <= 1.9) {
res = lerp(1.4, 1.9, 1, 1.05, t);
console.log(res)
}
if (t >= 2 || t <= 3) {
res = lerp(2, 3, 1.05, 1.1, t);
console.log(res)
}
return res;
}
savings(1.3)
最佳答案
您需要使用 logical AND &&
检查范围运算符而不是 logical OR ||
,它仅检查一项比较。
这意味着 t
的所有值都采用第一个条件,直到所有值都大于或等于 1。
function lerp(x1, x2, y1, y2, x) {
return y1 + (x2 - x1) * (y2 - y1) / (x2 - x1);
}
function savings(t) {
if (t >= 1 && t <= 1.3) return lerp(1, 1.3, .72, 1, t);
if (t >= 1.4 && t <= 1.9) return lerp(1.4, 1.9, 1, 1.05, t);
if (t >= 2 && t <= 3) return lerp(2, 3, 1.05, 1.1, t);
}
console.log(savings(1.3));
关于Javascript lerp 函数没有给出准确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59680740/