Javascript lepp fuction не дает точных ответов - PullRequest
2 голосов
/ 10 января 2020

Мне нужно интерполировать между тремя различными диапазонами: (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)

1 Ответ

2 голосов
/ 10 января 2020

Необходимо проверить диапазон с помощью оператора логического И && вместо логического ИЛИ ||, который проверяет только одно сравнение.

Это означает, что все значения t принимают первое условие, пока все значения не станут больше или равны единице.

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...