2013-06-16 10 views
9

私はProcessingを使ったクラスを取っています。Processingのmap()関数はどのように機能しますか?

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

別の範囲から番号を再マッピングします。それによると

は、ドキュメント(http://www.processing.org/reference/map_.html)です。

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

第2の例に示されているように、範囲外の値は意図的かつ有用であることが多いため、範囲外の数値は最小値と最大値の値にクランプされません。

isはランダム関数に似ていますが、範囲はユーザーによって設定されていますか?また、私は最初の例の説明を理解できません:数字は0から100の値に変換され、画面の端から端までの値になります。私はなぜ直接的に変換するだけでなく、スクリーンに関係する値の範囲に番号25を考えていますか?

答えて

19

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

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

MIN1:MIN2 = MAX1:

関数は値の二つの範囲の割合を確立MAX2を

として、あなたはそれを読むことができ

MIN2 としてMAX1 にあるMIN1 max2になります。
可変1 は、の値を最初の範囲の間に設定します。 min1〜max1。
変数2 は、の値を第2の範囲min2~max2の間の値にします。

この関数は、プログラマのための解決式である:これは

変数2 = MIN2 +(MAX2、MIN2)*((変数1-MIN1)/(MAX1-MIN1))

Processing 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)); 
} 
+1

正規化された値(つまり0.0 - 1.0)を受け取ったプログラムの潜在的な使用例を想像して、それを使って処理中の背景の色を変更したいとします。あなたはバックグラウンドに行くことができます(map(receivedValue、0.0、1.0、0.0、255.0)); –

+0

@ jesses.co.tt:これはあなたのコメントのポイントではないことは分かっていますが、この場合は 'background(receivedValue * 255.0)'を行う方がずっと簡単でしょうか? – flarn2006

+0

@ flarn2006はい、map()は単なる便利な関数であり、時にはあなたが言ったようにもっと簡単です...しかし、私はmap()がもっと複​​雑な場合に便利だと思います... –

2

このように考えると、0〜10の範囲を100等分します。 (あなたは部品あたり0.1を得るでしょう)今0から100を100等分に分割します(1パーツにつき1つのパーツを得ます).0から10の範囲の0.1は0から100の範囲の1に等しくなります。 0〜10の範囲にある5が0〜100の範囲にある場合は、5を0〜10の部分で割って、その数に0〜100の部分の数を掛けます。 !(50)

P.S.私はこれが実際にどのように機能するのかわかりませんが、私は事を明確にするための例を与えようと考えていました。

関連する問題