タイトルが長くなってしまいましたが、やっている事としてはProcessingで言うmap関数の実装です。
こちらの関数ですが、他の環境だと実装されていない事もあったりするので、自前実装する際の参考用に計算式をメモ。
※C#で記載してます。
/// <summary>
/// 渡された数値をある範囲から別の範囲に変換
/// </summary>
/// <param name="value">変換する入力値</param>
/// <param name="start1">現在の範囲の下限</param>
/// <param name="stop1">現在の範囲の上限</param>
/// <param name="start2">変換する範囲の下限</param>
/// <param name="stop2">変換する範囲の上限</param>
/// <returns>変換後の値</returns>
float Map(float value, float start1, float stop1, float start2, float stop2)
{
return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));
}
関数についてザックリと説明すると表題にもある通り、
渡した値(value
)をある範囲(start1
~ stop1
の間)から別の範囲(start2
~ stop2
の間)の相対的な位置に変換します。
例を記載すると下記のようなイメージ。
float val, result;
// 変数valは範囲A(下記で言うと20~80の間)に収まる値が入る
val = 20f;
// 20~80の間の数値を100~200の間の数値に再マッピング
result = Map(val, 20f, 80f, 100f, 200f);
Console.WriteLine(result); // 100
val = 30f;
result = Map(val, 20f, 80f, 100f, 200f);
Console.WriteLine(result); // 116.6667
val = 50f;
result = Map(val, 20f, 80f, 100f, 200f);
Console.WriteLine(result); // 150
val = 80f;
result = Map(val, 20f, 80f, 100f, 200f);
Console.WriteLine(result); // 200