Есть определенные произвольные числа. Нужна функция, которая будет выводить которая будет приводить число к аналогичному числу с другим промежутком

К примеру, есть числа от 0 до 25 и нужна функция, которая будет выводить эти числа к аналогичным числам с 15 до 35. (0)=> 15, (20) => 29, (25) => 35


Ответы (3 шт):

Автор решения: Эникейщик

Элементарнейшая арифметика. От 0 до 25 - 100%, абсолютная длина - 25, сдвиг - 0. От 15 до 35 тоже 100%, абсолютная длина - 20, сдвиг - 15.

20 -> 80% от 25 (длина первого интервала). Соответственно берем 80% от 20 (длина второго интервала), получается 16. Плюс сдвиг 15, итого 31. А не 29 как у вас.

Вывести формулу и перевести все это в код на любом языке можете самостоятельно.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Линейная интерполяция: если даны два отрезка можно построить линейную функцию, которая отображает первый отрезок ((x0, x1)) на второй ((y0, y1)). Функция имеет вид

y = ax + b, где
a = (y1 - y0) / (x1 - x0)
b = y0 - x0 * a

Подстановкой проверяется что x0 отображается в y0, а x1 в y1.

const make_linear_interpolator = (x0, x1, y0, y1) => {
    const a = (y1 - y0) / (x1 - x0);
    const b = y0 - x0 * a;
    return x => a * x + b;
};

const li = make_linear_interpolator(0, 25, 15, 35);

for (const x of [0, 5, 10, 15, 20, 25]) {
    console.log(x, li(x));
}
$ node linear_interpolation.js
0 15
5 19
10 23
15 27
20 31
25 35
→ Ссылка
Автор решения: Anton Hramickih

как и писали выше функция следующая, сначала мы определяем абсолютное соотношение в процентах, а далее умножаем на него и прибавляем сдвигаемое значение

function numberConversion(num) {
  let convert = num * 0.8 + 15;
  return convert.toFixed(1);
}
console.log(numberConversion(25));

→ Ссылка