Ось як я це розумію:
Який відсоток 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