openFrameworksには[a,b]を[c, d]に写像する線形写像を使ってxを写像する、関数ofMap(x,a,b,c,d)というものがあります。これの使い方で新しい発見がありました。

たとえば、[1,3]を[0,4]に変換するような写像で2を変換します。すると、[1,3]を[0,4]に移す線形写像は

f(x) = 2(x-1)

となります。これで2を変換すると、f(2)=2となるので、ofMap(2,1,3,0,4)の値は2が帰ってきます。

次に4を変換してみます。するとf(4)=6となり、[0,4]の範囲からはみ出てしまいます。プログラムを組んでいる中で、はみ出さずに、最大を超えないようにしたいことが、多々あります。そこで、今まではMAXとかMINとかを使って、最大と最小の範囲に収まるように、コードを書いていました。ただ、面倒くさかった!

たまたま、ofMapの使い方を忘れたので、リファレンスを読んでいたら、なんと!ちゃんとあるじゃないですか!最大と最小で抑える方法!単純に第6引数にtrueを書くだけです。

具体的にはofMap(4,1,3,0,4)==6になりますが、ofMap(4,1,3,0,4,true)==4となって、最大値で抑えられます。

oF使って長いですが、意外と見落としがあるもんですね。