Вот как я понимаю:
Какой процент x
лежит в диапазоне
Предположим, у вас есть диапазон от 0
до 100
.Учитывая произвольное число из этого диапазона, в каком «проценте» из этого диапазона он лежит?Это должно быть довольно просто, 0
будет 0%
, 50
будет 50%
, а 100
будет 100%
.
Теперь, что если ваш диапазон был 20
до100
?Мы не можем применить ту же логику, что и выше (делим на 100), потому что:
20 / 100
не дает нам 0
(20
должно быть 0%
сейчас).Это должно быть легко исправить, нам просто нужно сделать числитель 0
для случая 20
.Мы можем сделать это, вычтя:
(20 - 20) / 100
Однако это больше не работает для 100
, потому что:
(100 - 20) / 100
не дает нам 100%
.Опять же, мы можем исправить это, вычитая из знаменателя также:
(100 - 20) / (100 - 20)
Более общее уравнение для определения того, что% x
лежит в диапазоне, будет:
(x - MIN) / (MAX - MIN)
Масштабирование диапазона до другого диапазона
Теперь, когда мы знаем, какой процент находится в диапазоне, мы можем применить его для сопоставления числа с другим диапазоном.Давайте рассмотрим пример.
old range = [200, 1000]
new range = [10, 20]
Если у нас есть число в старом диапазоне, каким будет число в новом диапазоне?Скажем, число 400
.Сначала выясните, какой процент 400
находится в пределах старого диапазона.Мы можем применить наше уравнение выше.
(400 - 200) / (1000 - 200) = 0.25
Итак, 400
лежит в 25%
старого диапазона.Нам просто нужно выяснить, какое число составляет 25%
нового диапазона.Подумайте, что такое 50%
из [0, 20]
.Это было бы 10
верно?Как вы пришли к этому ответу?Ну, мы можем просто сделать:
20 * 0.5 = 10
Но как насчет [10, 20]
?Нам нужно сдвинуть все на 10
сейчас.Например:
((20 - 10) * 0.5) + 10
более обобщенная формула будет выглядеть следующим образом:
((MAX - MIN) * PERCENT) + MIN
Для исходного примера того, что 25%
из [10, 20]
:
((20 - 10) * 0.25) + 10 = 12.5
Таким образом, 400
в диапазоне [200, 1000]
будет отображаться в 12.5
в диапазоне [10, 20]
TLDR
Для отображения x
из старого диапазона в новыйдиапазон:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN