Oto jak to rozumiem:
Jaki procent x
mieści się w zakresie
Załóżmy, że masz zakres od 0
do 100
. Biorąc pod uwagę dowolną liczbę z tego zakresu, w jakim „procencie” z tego zakresu się znajduje? To powinno być dość proste, 0
byłoby 0%
, 50
byłoby 50%
i 100
będzie 100%
.
A co jeśli twój zasięg miałby to 20
zrobić 100
? Nie możemy zastosować tej samej logiki jak powyżej (podzielić przez 100), ponieważ:
20 / 100
nie daje nam 0
( 20
powinno być 0%
teraz). Powinno to być łatwe do naprawienia, wystarczy zrobić licznik 0
dla przypadku 20
. Możemy to zrobić, odejmując:
(20 - 20) / 100
Jednak to już nie działa, 100
ponieważ:
(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% x
mieś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 400
mieści się w starym zakresie. Możemy zastosować powyższe równanie.
(400 - 200) / (1000 - 200) = 0.25
Tak więc 400
leż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 10
dobrze? 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 400
w zakresie [200, 1000]
zostanie zmapowane do 12.5
zakresu[10, 20]
TLDR
Aby zmapować x
ze starego zakresu na nowy zakres:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN