2010-08-10 70 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