ActionScript 3
ランダム値生成
サーチ…
0と1の間の乱数
Math.random();
0以上1以下の均等に分散した乱数を生成します。
出力例:
- 0.22282187035307288
- 0.3948539895936847
- 0.9987191134132445
最小値と最大値の間の乱数
function randomMinMax(min:Number, max:Number):Number {
return (min + (Math.random() * Math.abs(max - min)));
}
この関数は、最小値と最大値の範囲を渡すことで呼び出されます。
例:
randomMinMax(1, 10);
出力例:
- 1.661770915146917
- 2.5521070677787066
- 9.436270965728909
ランダムな角度(度)
function randomAngle():Number {
return (Math.random() * 360);
}
出力例:
- 31.554428357630968
- 230.4078639484942
- 312.7964010089636
配列からのランダム値
私たちは配列myArray
を持っていると仮定しmyArray
:
var value:* = myArray[int(Math.random() * myArray.length)];
我々が使用に注意してくださいint
の結果キャストするMath.random()
同様の値ので、int型に2.4539543
有効な配列インデックスではありません。
円の中のランダムな点
最初に円の半径とその中心を定義します。
var radius:Number = 100;
var center:Point = new Point(35, 70);
次に、中心からランダムな角度をラジアンで生成します。
var angle:Number = Math.random() * Math.PI * 2;
次に、返された点の有効半径を生成します。したがって、与えられたradius
内側になります。この分布では、生成点は時間の半分の半分の半径の内円に終わるので、単純なMath.random()*radius
はしませんが、その円の四角は元の1/4です。適切な分布を作成するには、関数は次のようになります。
var rad:Number=(Math.random()+Math.random())*radius; // yes, two separate calls to random
if (rad>radius) { rad=2*radius-rad; }
この関数は、確率関数がゼロで0からradius
最大に直線的に増加する値を生成します。これは、ランダム値の合計が、すべてのランダム値の個々の密度関数の畳み込みに等しい確率密度関数を有するために起こる。これは平均的な等級の人のためのいくつかの拡張された数学であるが、 " 箱の信号 "として説明される2つの均一分布密度関数の畳み込み関数のグラフを描くためにGIFが提示される。 if
演算子は結果関数を最大値に折り返し、鋸歯状のグラフのみを残します。
この関数は、選択されているためとの間に位置する円ストリップの平方radius=r
及びradius=r+dr
直線的増加に伴って増加r
と非常に小さい定数dr
なるようにdr*dr<<r
。したがって、中心付近で発生する点は、円の端で生成される点の量よりも、中心領域の半径が円全体の半径より小さい同じマージンだけ小さい。全体的に、ポイントは円全体に均等に分布しています。
今、あなたのランダムな位置を取得してください:
var result:Point = new Point(
center.x + Math.cos(angle) * rad,
center.y + Math.sin(angle) * rad
);
円上の任意の点(ある半径の円の端にある)を得るには、 rad
代わりにradius
を使用します。
PS:例題は数学の説明で過負荷になってしまいました。
ランダム角度(ラジアン単位)
function randomAngleRadians():Number
{
return Math.random() * Math.PI * 2;
}
出力例:
- 5.490068569213088
- 3.1984284719180205
- 4.581117863808207
「パーセントチャンス」操作の成功の判定
「x%チャンス」の状況でtrue
またはfalse
ためにロールする必要がある場合は、次を使用します。
function roll(chance:Number):Boolean {
return Math.random() >= chance;
}
好きなもの:
var success:Boolean = roll(0.5); // True 50% of the time.
var again:Boolean = roll(0.25); // True 25% of the time.
ランダムな色を作成する
ランダムな色を得るには :
function randomColor():uint
{
return Math.random() * 0xFFFFFF;
}
赤、緑、青のチャンネルをさらに制御する必要がある場合:
var r:uint = Math.random() * 0xFF;
var g:uint = Math.random() * 0xFF;
var b:uint = Math.random() * 0xFF;
var color:uint = r << 16 | g << 8 | b;
ここでは、 r
、 g
、 b
独自の範囲を指定できます(この例は0〜255です)。
アルファベットをランダムにループする
var alphabet:Vector.<String> = new <String>[ "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z" ];
while (alphabet.length > 0)
{
var letter:String = alphabet.splice(int(Math.random() *
alphabet.length), 1)[0];
trace(letter);
}
出力例:
Y、J、C、T、O、R、G、B、C、F、E、D、U、S、L、X、K、Q、H、A、 Z
配列のランダム化
var alphabet:Array = [ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ];
for (var i:int=alphabet.length-1;i>0;i--) {
var j:int=Math.floor(Math.random()*(i+1));
var swap=alphabet[j];
alphabet[j]=alphabet[i];
alphabet[i]=swap;
}
trace(alphabet);
出力例
E、K、T、F、V、X、Y、G、B、Z、D、R、U、N、O、M、I、L、C、J、 A
この方法はFisher-Yatesアレイシャッフルとして知られています。