BLOG ブログ

変位量の変換のはなし

 結論だけ言ってしまうと上図の通り。
 それはたとえばマウスの動きを画面に反映したいとき、位置座標を音の高さに利用したいとき、センサから得た明るさをモータのスピードに変換したいとき。
 プログラムを作っていると数値を別の数値に利用したいときがしばしばあります。
 しかしそのまま直接変数に代入したり、引数に渡したりしても思い通りに行かないはずです。
 数値を別の数値として利用するためには適切な変換が必要になります。
 この記事ではその考え方のコツをまとめました。

具体的な例で考える

たとえば以下のような例を考えてみましょう。
センサで検知した距離などの数値を-100から100までの範囲に変換して表示したいとします。

センサ:200~250
表示:-100~100

①範囲の大きさを求める

差で範囲の大きさを求める
まずセンサと表示それぞれの範囲の大きさを求めます。
これは単純に引き算で求められます。

[範囲] = [最大値] - [最小値]
[センサの範囲] = 250 - 200 = 50
[表示の範囲] = 100 - (-100) = 200

②範囲を合わせる

倍率をかけて範囲を合わせる
範囲の大きさがわかったら今度は何倍すれば同じ大きさにできるかを考えます。
倍の大きさにしたければ2倍。
半分にしたければ0.5倍をかけてやればよさそうですね。
何倍にすれば同じ大きさにできるかは割り算で求められます。

[倍率] = [目的の範囲] ÷ [元の範囲]

ここでは
[表示の範囲] ÷ [センサの範囲] = 200 ÷ 50
= 4[倍]
になります。

③ズレの修正

ズレの調整
同じ大きさの範囲の中で動けるようになったらあとはスタートの位置をずらすだけです。
倍率をかけたあとにどれだけずらせば変換後のスタート位置に持っていけるか考えてみましょう。

[必要なズレ] = [目的の最小値] - [元の最小値] ×[倍率]

ここでは
[表示の最小値] - [センサの最小値] ×[倍率] = -100 - 200 × 4
= -100 -800
= -900
となります。

変換式

できた変換式
ここまででできた変換式を整理すると上の図のようになります。
試しにセンサ入力が200のときを考えてみると、

[表示] = 200 × 4 -900
= 800 - 900
= -100


同様にセンサの入力が最大値の250のときを考えてみると

[表示] = 250 × 4 -900
= 1000 -900
= 100

これで-100から100までの範囲に変換できたことがわかりますね。

まとめ

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

CONTACT お問い合わせ

無料体験授業は随時開催しています。 ご希望やご質問など、お気軽にお寄せください。