C#

渡された数値をある範囲から別の範囲に変換する方法について

タイトルが長くなってしまいましたが、やっている事としては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

参考/関連リンク