Aqui está como eu o entendo:
Qual porcentagem xestá em um intervalo
Vamos supor que você tenha um intervalo de 0até 100. Dado um número arbitrário desse intervalo, em que "porcentagem" desse intervalo ele se encontra? Isso deve ser bem simples, 0seria 0%, 50seria 50%e 100seria 100%.
Agora, o que se o intervalo foi 20de 100? Não podemos aplicar a mesma lógica acima (dividir por 100) porque:
20 / 100
não nos dá 0( 20deveria ser 0%agora). Isso deve ser simples de corrigir, basta criar o numerador 0para o caso de 20. Podemos fazer isso subtraindo:
(20 - 20) / 100
No entanto, isso não funciona 100mais porque:
(100 - 20) / 100
não nos dá 100%. Novamente, podemos corrigir isso subtraindo também o denominador:
(100 - 20) / (100 - 20)
Uma equação mais generalizada para descobrir qual% xestá em um intervalo seria:
(x - MIN) / (MAX - MIN)
Escala de escala para outra escala
Agora que sabemos qual a porcentagem de um número em um intervalo, podemos aplicá-lo para mapear o número para outro intervalo. Vamos passar por um exemplo.
old range = [200, 1000]
new range = [10, 20]
Se tivermos um número no intervalo antigo, qual seria o número no novo intervalo? Digamos que o número seja 400. Primeiro, descubra qual porcentagem 400está dentro do intervalo antigo. Podemos aplicar nossa equação acima.
(400 - 200) / (1000 - 200) = 0.25
Então, 400está na 25%faixa antiga. Só precisamos descobrir qual é o número 25%da nova faixa. Pense sobre o que 50%de [0, 20]é. Seria 10certo? Como você chegou a essa resposta? Bem, podemos apenas fazer:
20 * 0.5 = 10
Mas e daí [10, 20]? Precisamos mudar tudo 10agora. por exemplo:
((20 - 10) * 0.5) + 10
uma fórmula mais generalizada seria:
((MAX - MIN) * PERCENT) + MIN
Para o exemplo original do que 25%de [10, 20]é:
((20 - 10) * 0.25) + 10 = 12.5
Então, 400no intervalo [200, 1000]mapearia 12.5no intervalo[10, 20]
TLDR
Para mapear xdo intervalo antigo para o novo intervalo:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN