October 2008
Math.randomは、毎回同じ確率でランダム値を
返却するとても単純な優しいメソッドです。
しかし、このMath.randomメソッドは、非常に、柔軟で、パワーがあります。
Math.randomのようなコントラストの強いランダム現象は、
私たちの周りでは、あまり存在しません。
天候などの自然現象、人の成長や感情、生活、会話、また、
サウンドスペクトラムのビジュアライズ表示など、
ほとんどすべての物事は、コントラストが強い現象ではありません。
var a:Number=Math.random()*10000;
を100回ループ実行した出力結果、
1,500,9299,4,10,15,700,600,2090,1090,99,8829,,,,,,,,,,,,,
これは、非常にコンストラストが強い結果と言えます。
この現象は、私たちにとって異常です。
ActionScriptには、より自然なランダムメソッド、
BitmapData.perlinNoiseメソッドは存在しますが
BitmapDataに限らずより自然なランダムを、取得することが必要な機会は多いです。
より自然なランダムの意味は、drunkメソッドを知ることで理解できると思います。
より自然なランダム発生装置、drunkメソッドを紹介します。
> drunk method sample
上下のプログラムの違いは、
ENTER_FRAMEイベントリスナーメソッド内の
x,y,rgbのランダム値の取得の3行を、
drunkメソッドかMath.randomメソッドかに変更しただけです。
その他、すべてのコードが全く同じとは思えないランダムメソッドの威力です。
※どちらかといえば、
私たちの周りで起きている出来事すべては、上の自然なランダムdrunkメソッドで
表現されているものに近いと思います。
drunkメソッドも内部で、Math.random()を使用していて、
実は、Math.random同様とても単純で、作成も簡単です。
第一引数 : 0から指定した範囲のランダムな値を返却します。
第二引数 : 前のランダム値のオフセットを指定します。
例えば、
Randomクラスが、drunkメソッドを実装しているとします。
var rnd:Random=new Random();
var value:Number=rnd.drunk(100,10);
trace(value);
//output : 80
value=rnd.drunk(100,10);
このときのvalueの出力結果は、
70から90の間の乱数です。
これが,drunkメソッドです。
非常に単純なこのdrunkメソッドを使用するだけで、
上記のサンプルの結果が得られます。
このdrunkメソッドは、Max/Mspのdrunkオブジェクトを参考にしました。
> Max/Msp drunk method
このオブジェクトのdrunkという名前は、
数値の範囲の中で「酔っぱらいの千鳥足」のように
変化する値を返却することからこのように名づけられたらしいです。