Ecco come lo capisco:
Quale percentuale si xtrova in un intervallo
Supponiamo che tu abbia un intervallo da 0a 100. Dato un numero arbitrario di quell'intervallo, in quale "percentuale" di quell'intervallo si trova? Questo dovrebbe essere piuttosto semplice, 0sarebbe 0%, 50sarebbe 50%e 100sarebbe 100%.
Ora, che cosa se l'intervallo è stato 20per 100? Non possiamo applicare la stessa logica di cui sopra (dividere per 100) perché:
20 / 100
non ci dà 0( 20dovrebbe essere 0%ora). Questo dovrebbe essere semplice da risolvere, dobbiamo solo creare il numeratore 0per il caso di 20. Possiamo farlo sottraendo:
(20 - 20) / 100
Tuttavia, questo non funziona 100più perché:
(100 - 20) / 100
non ci dà 100%. Ancora una volta, possiamo risolvere questo problema sottraendo anche dal denominatore:
(100 - 20) / (100 - 20)
Un'equazione più generalizzata per scoprire quale% si xtrova in un intervallo sarebbe:
(x - MIN) / (MAX - MIN)
Scala l'intervallo su un altro intervallo
Ora che sappiamo in quale percentuale un numero si trova in un intervallo, possiamo applicarlo per mappare il numero su un altro intervallo. Facciamo un esempio.
old range = [200, 1000]
new range = [10, 20]
Se abbiamo un numero nel vecchio intervallo, quale sarebbe il numero nel nuovo intervallo? Diciamo che il numero è 400. In primo luogo, capire quale percentuale 400è all'interno del vecchio intervallo. Possiamo applicare la nostra equazione sopra.
(400 - 200) / (1000 - 200) = 0.25
Quindi, 400risiede nella 25%vecchia gamma. Dobbiamo solo capire quale sia il numero 25%della nuova gamma. Pensa a ciò che 50%di [0, 20]è. Sarebbe 10giusto? Come sei arrivato a quella risposta? Bene, possiamo semplicemente fare:
20 * 0.5 = 10
Ma che dire di [10, 20]? Dobbiamo spostare tutto 10ormai. per esempio:
((20 - 10) * 0.5) + 10
una formula più generalizzata sarebbe:
((MAX - MIN) * PERCENT) + MIN
Per l'esempio originale di ciò che 25%di [10, 20]è:
((20 - 10) * 0.25) + 10 = 12.5
Quindi, 400nell'intervallo [200, 1000]sarebbe mappato 12.5nell'intervallo[10, 20]
TLDR
Per mappare xdal vecchio intervallo al nuovo intervallo:
OLD PERCENT = (x - OLD MIN) / (OLD MAX - OLD MIN)
NEW X = ((NEW MAX - NEW MIN) * OLD PERCENT) + NEW MIN