Así es como lo entiendo:
¿Qué porcentaje se xencuentra en un rango?
Supongamos que tiene un rango de 0a 100. Dado un número arbitrario de ese rango, ¿en qué "porcentaje" de ese rango se encuentra? Esto debería ser bastante simple, 0sería 0%, 50sería 50%y 100sería 100%.
Ahora, lo que si su rango fue 20de 100? No podemos aplicar la misma lógica que la anterior (dividir por 100) porque:
20 / 100
no nos da 0( 20debería ser 0%ahora). Esto debería ser simple de solucionar, solo necesitamos hacer el numerador 0para el caso de 20. Podemos hacer eso restando:
(20 - 20) / 100
Sin embargo, esto ya no funciona 100porque:
(100 - 20) / 100
no nos da 100%. Nuevamente, podemos solucionar esto restando también del denominador:
(100 - 20) / (100 - 20)
Una ecuación más generalizada para averiguar qué% se xencuentra en un rango sería:
(x - MIN) / (MAX - MIN)
Rango de escala a otro rango
Ahora que sabemos qué porcentaje de un número se encuentra en un rango, podemos aplicarlo para asignar el número a otro rango. Veamos un ejemplo.
old range = [200, 1000]
new range = [10, 20]
Si tenemos un número en el rango anterior, ¿cuál sería el número en el nuevo rango? Digamos que el número es 400. Primero, calcule qué porcentaje 400está dentro del rango anterior. Podemos aplicar nuestra ecuación anterior.
(400 - 200) / (1000 - 200) = 0.25
Por lo tanto, se 400encuentra en 25%el rango anterior. Solo tenemos que averiguar qué número es 25%del nuevo rango. Pensar en lo que 50%de [0, 20]es. Estaría 10bien? ¿Cómo llegaste a esa respuesta? Bueno, solo podemos hacer:
20 * 0.5 = 10
Pero, ¿qué pasa con [10, 20]? Necesitamos cambiar todo por 10ahora. p.ej:
((20 - 10) * 0.5) + 10
una fórmula más generalizada sería:
((MAX - MIN) * PERCENT) + MIN
Para el ejemplo original de lo que 25%de [10, 20]es:
((20 - 10) * 0.25) + 10 = 12.5
Entonces, 400en el rango [200, 1000]se mapearía 12.5en el rango[10, 20]
TLDR
Para asignar xdel rango antiguo al nuevo rango:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN