14

Processingを使った授業を受けています。

map() 関数の理解に問題があります。

ドキュメント(http://www.processing.org/reference/map_.html)によると:

数値をある範囲から別の範囲に再マップします。

上記の最初の例では、数値 25 は、0 から 100 の範囲の値から、ウィンドウの左端 (0) から右端 (幅) までの範囲の値に変換されます。

2 番目の例に示すように、範囲外の値は多くの場合意図的で有用であるため、範囲外の数値は最小および最大パラメーター値にクランプされません。

ランダム関数に似ていますが、範囲はユーザーによって設定されますか? また、最初の例の説明が理解できません。数値が 0 から 100 の値に変換され、画面の端から端までの範囲の値になると書かれています。数字の 25 を画面に関連する値の範囲に直接変換しない理由を考えていますか?

4

3 に答える 3

30

このmap()機能は便利なショートカットであり、理解するのに費やした時間を後悔することはありません。
これはその構文です:

variable2 = map(variable1, min1, max1, min2, max2);

この関数は、値の 2 つの範囲間の比率を確立します。

最小 1 : 最小 2 = 最大 1 : 最大 2

次のように読むことができます: max1max2であるように、min1min2です。variable1は、最初の範囲min1~max1の間の値を格納します。variable2、2 番目の範囲min2~max2 の間の値を取得します。

これは、関数がプログラマーのために解く方程式です。

variable2 = min2+(max2-min2)*((variable1-min1)/(max1-min1))

これは、処理中の map() 関数の背後にある Java コードです。

static public final float map(float value, 
                              float istart, 
                              float istop, 
                              float ostart, 
                              float ostop) {
    return ostart + (ostop - ostart) * ((value - istart) / (istop - istart));
}
于 2013-06-16T16:34:26.807 に答える