
結論だけ言ってしまうと上図の通り。
それはたとえばマウスの動きを画面に反映したいとき、位置座標を音の高さに利用したいとき、センサから得た明るさをモータのスピードに変換したいとき。
プログラムを作っていると数値を別の数値に利用したいときがしばしばあります。
しかしそのまま直接変数に代入したり、引数に渡したりしても思い通りに行かないはずです。
数値を別の数値として利用するためには適切な変換が必要になります。
この記事ではその考え方のコツをまとめました。
具体的な例で考える
たとえば以下のような例を考えてみましょう。
センサで検知した距離などの数値を-100から100までの範囲に変換して表示したいとします。
センサ:200~250
表示:-100~100
センサで検知した距離などの数値を-100から100までの範囲に変換して表示したいとします。
センサ:200~250
表示:-100~100
①範囲の大きさを求める

まずセンサと表示それぞれの範囲の大きさを求めます。
これは単純に引き算で求められます。
[範囲] = [最大値] - [最小値]
[センサの範囲] = 250 - 200 = 50
[表示の範囲] = 100 - (-100) = 200
これは単純に引き算で求められます。
[範囲] = [最大値] - [最小値]
[センサの範囲] = 250 - 200 = 50
[表示の範囲] = 100 - (-100) = 200
②範囲を合わせる

範囲の大きさがわかったら今度は何倍すれば同じ大きさにできるかを考えます。
倍の大きさにしたければ2倍。
半分にしたければ0.5倍をかけてやればよさそうですね。
何倍にすれば同じ大きさにできるかは割り算で求められます。
[倍率] = [目的の範囲] ÷ [元の範囲]
ここでは
[表示の範囲] ÷ [センサの範囲] = 200 ÷ 50
= 4[倍]
になります。
倍の大きさにしたければ2倍。
半分にしたければ0.5倍をかけてやればよさそうですね。
何倍にすれば同じ大きさにできるかは割り算で求められます。
[倍率] = [目的の範囲] ÷ [元の範囲]
ここでは
[表示の範囲] ÷ [センサの範囲] = 200 ÷ 50
= 4[倍]
になります。
③ズレの修正

同じ大きさの範囲の中で動けるようになったらあとはスタートの位置をずらすだけです。
倍率をかけたあとにどれだけずらせば変換後のスタート位置に持っていけるか考えてみましょう。
[必要なズレ] = [目的の最小値] - [元の最小値] ×[倍率]
ここでは
[表示の最小値] - [センサの最小値] ×[倍率] = -100 - 200 × 4
= -100 -800
= -900
となります。
倍率をかけたあとにどれだけずらせば変換後のスタート位置に持っていけるか考えてみましょう。
[必要なズレ] = [目的の最小値] - [元の最小値] ×[倍率]
ここでは
[表示の最小値] - [センサの最小値] ×[倍率] = -100 - 200 × 4
= -100 -800
= -900
となります。
変換式

ここまででできた変換式を整理すると上の図のようになります。
試しにセンサ入力が200のときを考えてみると、
[表示] = 200 × 4 -900
= 800 - 900
= -100
同様にセンサの入力が最大値の250のときを考えてみると
[表示] = 250 × 4 -900
= 1000 -900
= 100
これで-100から100までの範囲に変換できたことがわかりますね。
試しにセンサ入力が200のときを考えてみると、
[表示] = 200 × 4 -900
= 800 - 900
= -100
同様にセンサの入力が最大値の250のときを考えてみると
[表示] = 250 × 4 -900
= 1000 -900
= 100
これで-100から100までの範囲に変換できたことがわかりますね。
まとめ

もう少しわかりやすいニュアンスでまとめると上記の式のようになります。
こういった法則性をみつけてプログラムを整理していくのがプログラミングの醍醐味です。
このページを読んだだけでは実感がわかないかもしれませんが、何か数値を変換して利用したいとき思い出してみてください。
こういった法則性をみつけてプログラムを整理していくのがプログラミングの醍醐味です。
このページを読んだだけでは実感がわかないかもしれませんが、何か数値を変換して利用したいとき思い出してみてください。