2010-08-10 92 views
11

处理有我用所有的时间有很大的功能:值再映射

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

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

它重新映射value(即具有预期范围的low1high1)进入low2high2目标范围)。

我想了解它背后的数学,所以我可以在其他语言中使用它。 任何人都想给我一个骨头,并帮助我逆向工程呢?我知道这是一个已经重新调整和重新抵消的lerp ......今天早上感觉脑死亡了。

回答

23

从你的描述来看,应该是这样做的吧?

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

找到你进入第一个范围多远,通过缩放范围的大小比例的距离,这是你应该进入第二范围多远。

+0

完美,谢谢 – ack 2010-08-10 17:49:28

+0

这会不会完全在真的相当普遍突破从0..1重新映射到另一个范围的情况?由零划分.. – metaleap 2013-10-31 09:25:59

+0

@metaleap我想你误读了一些东西。分母是间隔的宽度,在这种情况下1-0 = 1。 – Cascabel 2013-10-31 14:16:22

1

我想补充一点,有时可以找到low1和high1之间的因子,这样您可以在使用该因子作为LERP的t之前用曲线调整它。

因此,t =(value-low1)/(high1-low1)得到行low1到high1的值的相对位置。

然后,您可以用一些曲线滤波器调制t,例如伽马,偏置,增益等。同样,如果限制超过设定的低点和高点的值,则也将0和1钳位在一起。

然后再用吨LOW2和高温2等之间的线性插值:最终值= LOW2 *(1-T)+高温2 * T