Вот как я это понимаю:
Какой процент 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