2010-08-10 8 views
11

de procesamiento tiene una gran función que utilizo todo el tiempo:Valor Reasignación

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

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

Se reasigna value (que tiene un rango esperado de low1 a high1) en un rango objetivo de low2 a high2)

Quiero entender las matemáticas detrás de él para poder usarlo en otros idiomas. ¿Alguien quiere tirarme un hueso y ayudarme a realizar la ingeniería inversa? Entiendo que es un LEPR que ha sido redimensionado y re-compensado ... sintiendo muerte cerebral esta mañana.

Respuesta

23

Según su descripción, debería estar haciendo esto, ¿no?

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

hallar la distancia que usted está en el primer rango, la escala de esa distancia por la relación de tamaños de los rangos, y eso es lo lejos que debe estar en el segundo rango.

+0

perfecta, gracias a que – ack

+0

¿Esto no romper totalmente en la realidad bastante común caso de reasignación de 0..1 a otro rango? División por cero ... – metaleap

+0

@metaleap Creo que malinterpretaste algo. El denominador es el ancho del intervalo, 1-0 = 1 en ese caso. – Cascabel

1

Me gustaría agregar que a veces es útil encontrar el factor entre low1 y high1 para que pueda modularlo con una curva antes de usar el factor como t de LERP.

Entonces, t = (valor-bajo1)/(alto1-bajo1) para obtener la posición relativa de valor en la línea baja1 a alta1.

Luego puede modular t con un filtro de curva, por ejemplo, gamma, polarización, ganancia, etc. Como también, ajuste la t entre 0 y 1 si restringe los valores que superan los valores bajos y altos establecidos.

y luego usar el t para el Lerp entre BAJO2 y ALTA2 como: BAJO2 finalvalue = * (1-t) + ALTA2 * t

Cuestiones relacionadas