Oto jak to rozumiem:
Jaki procent xmieści się w zakresie
Załóżmy, że masz zakres od 0do 100. Biorąc pod uwagę dowolną liczbę z tego zakresu, w jakim „procencie” z tego zakresu się znajduje? To powinno być dość proste, 0byłoby 0%, 50byłoby 50%i 100będzie 100%.
A co jeśli twój zasięg miałby to 20zrobić 100? Nie możemy zastosować tej samej logiki jak powyżej (podzielić przez 100), ponieważ:
20 / 100
nie daje nam 0( 20powinno być 0%teraz). Powinno to być łatwe do naprawienia, wystarczy zrobić licznik 0dla przypadku 20. Możemy to zrobić, odejmując:
(20 - 20) / 100
Jednak to już nie działa, 100ponieważ:
(100 - 20) / 100
nie daje nam 100%. Ponownie możemy to naprawić, odejmując również od mianownika:
(100 - 20) / (100 - 20)
Bardziej uogólnionym równaniem służącym do ustalenia, jaki% xmieści się w zakresie, byłoby:
(x - MIN) / (MAX - MIN)
Skaluj zakres do innego zakresu
Teraz, gdy wiemy, jaki procent liczby mieści się w zakresie, możemy zastosować go, aby odwzorować liczbę na inny zakres. Przejdźmy przez przykład.
old range = [200, 1000]
new range = [10, 20]
Gdybyśmy mieli liczbę ze starego zakresu, jaka byłaby liczba z nowego zakresu? Powiedzmy, że liczba jest 400. Najpierw dowiedz się, jaki procent 400mieści się w starym zakresie. Możemy zastosować powyższe równanie.
(400 - 200) / (1000 - 200) = 0.25
Tak więc 400leży w 25%starym zakresie. Musimy tylko dowiedzieć się, jaka jest liczba 25%z nowego zakresu. Pomyśl o tym, co 50%o [0, 20]to. Byłoby 10dobrze? Jak doszedłeś do tej odpowiedzi? Cóż, możemy po prostu zrobić:
20 * 0.5 = 10
Ale co z [10, 20]? Musimy już wszystko zmienić 10. na przykład:
((20 - 10) * 0.5) + 10
bardziej ogólną formułą byłoby:
((MAX - MIN) * PERCENT) + MIN
Do pierwotnego przykład tego, co 25%z [10, 20]to:
((20 - 10) * 0.25) + 10 = 12.5
Tak więc 400w zakresie [200, 1000]zostanie zmapowane do 12.5zakresu[10, 20]
TLDR
Aby zmapować xze starego zakresu na nowy zakres:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN