2010-08-10 7 views
11

Processing ha una grande funzione che uso per tutto il tempo:Valore Remapping

map(value, low1, high1, low2, high2) 

http://processing.org/reference/map_.html

E remaps value (che ha un range previsto di low1 a high1) in un target range di low2-high2).

Voglio capire la matematica che c'è dietro così posso usarlo in altre lingue. Qualcuno vuole buttarmi un osso e aiutarmi a decodificarlo? Capisco che è un lerp che è stato ridimensionato e ri-compensato ... sentendo il cervello morto stamattina.

risposta

23

Dalla tua descrizione, dovrebbe farlo, giusto?

low2 + (value - low1) * (high2 - low2)/(high1 - low1) 

Scopri quanto sei lontano nella prima serie, la scala che la distanza dal rapporto tra dimensioni degli intervalli, e questo è quanto lontano si dovrebbe essere nel secondo intervallo.

+0

perfetto, grazie – ack

+0

non sarà questo completamente rompere in realtà abbastanza comune caso di rimappatura da 0..1 a un altro intervallo? Divisione per zero .. – metaleap

+0

@metaleap Penso che tu abbia interpretato male qualcosa. Il denominatore è la larghezza dell'intervallo, 1-0 = 1 in quel caso. – Cascabel

1

Vorrei aggiungere che a volte è utile trovare il fattore tra low1 e high1 in modo da poterlo modulare con una curva prima di utilizzare il fattore come LERP di t.

Quindi, t = (valore-basso1)/(alto1-basso1) per ottenere la posizione relativa del valore nella riga low1 a high1.

Quindi è possibile modulare t con un filtro di curva, ad esempio gamma, bias, guadagno, ecc. Come anche bloccare il t tra 0 e 1 se si desidera limitare i valori che superano i minimi e gli alti impostati.

e quindi utilizzare il t per il LERP tra il LOW2 e ALTA2 come: finalvalue = LOW2 * (1-t) + ALTA2 * t

Problemi correlati