Javascript lerp 函数没有给出准确的答案

标签 javascript math

我需要在三个不同的范围之间进行插值, (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/

相关文章:

javascript - 显示/隐藏 div(回到上一个)

c - 找到整数的所有因子的有效算法是什么?

c - 如何在 C 中按索引对齐两个整数数组?

c++ - (7 - 12) mod 24 等于 19 但在 C++ 中它等于 4294967291

algorithm - RTS游戏中视线计算的快速算法

javascript - Google 热图仅显示一处

php - 在 PHP 中拉取 GD 生成图像的远程 URL

javascript - 为什么这个倒计时时钟代码会返回一个未定义的字符串?

javascript - Visual Studio代码: Installation hook for snippets extension

math - numpy离散连续傅里叶变换