ActionScript 3
Zufällige Wertgenerierung
Suche…
Zufallszahl zwischen 0 und 1
Math.random();
erzeugt eine gleichmäßig verteilte Zufallszahl zwischen 0 (inklusive) und 1 (exklusiv)
Beispielausgabe:
- 0.22282187035307288
- 0,3948539895936847
- 0,9987191134132445
Zufallszahl zwischen min und max
function randomMinMax(min:Number, max:Number):Number {
return (min + (Math.random() * Math.abs(max - min)));
}
Diese Funktion wird durch Übergeben eines Bereichs von Minimal- und Maximalwerten aufgerufen.
Beispiel:
randomMinMax(1, 10);
Beispielausgaben:
- 1.661770915146917
- 2.5521070677787066
- 9.436270965728909
Zufälliger Winkel in Grad
function randomAngle():Number {
return (Math.random() * 360);
}
Beispielausgaben:
- 31.554428357630968
- 230.4078639484942
- 312.7964010089636
Zufälliger Wert aus einem Array
Angenommen, wir haben ein Array myArray
:
var value:* = myArray[int(Math.random() * myArray.length)];
Hinweis: Wir verwenden int
, um das Ergebnis von Math.random()
in ein int 2.4539543
da Werte wie 2.4539543
keinen gültigen 2.4539543
.
Zufälliger Punkt innerhalb eines Kreises
Definieren Sie zuerst den Kreisradius und seinen Mittelpunkt:
var radius:Number = 100;
var center:Point = new Point(35, 70);
Dann generieren Sie einen zufälligen Winkel im Bogenmaß von der Mitte:
var angle:Number = Math.random() * Math.PI * 2;
Dann generieren Sie einen effektiven Radius des zurückgegebenen Punkts, damit dieser innerhalb des angegebenen radius
. Ein einfacher Math.random()*radius
ist nicht Math.random()*radius
, da bei dieser Verteilung die produzierten Punkte zur Hälfte der Zeit im inneren Kreis des halben Radius enden, das Quadrat dieses Kreises jedoch ein Viertel des Originals ist. Um eine korrekte Verteilung zu erstellen, sollte die Funktion folgendermaßen aussehen:
var rad:Number=(Math.random()+Math.random())*radius; // yes, two separate calls to random
if (rad>radius) { rad=2*radius-rad; }
Diese Funktion erzeugt einen Wert, dessen Wahrscheinlichkeitsfunktion linear von 0 bei Null bis zum Maximum am radius
ansteigt. Dies geschieht, weil eine Summe von Zufallswerten eine Wahrscheinlichkeitsdichtefunktion aufweist, die gleich der Faltung aller einzelnen Dichtefunktionen der Zufallswerte ist. Dies ist eine erweiterte Mathematik für eine Durchschnittsperson, aber eine Art GIF wird dargestellt, um eine Kurve der Faltungsfunktion von zwei gleichförmigen Verteilungsdichtefunktionen zu zeichnen, die als " Box-Signale " erklärt werden. Der if
Operator faltet die resultierende Funktion über ihr Maximum, sodass nur ein sägezahnförmiger Graph übrig bleibt.
Diese Funktion wird ausgewählt, weil das Quadrat eines Kreisstreifens zwischen radius=r
und radius=r+dr
linear mit zunehmendem r
und sehr kleiner Konstante dr
ansteigt, so dass dr*dr<<r
. Daher ist die Menge von Punkten, die nahe in der Mitte erzeugt werden, um denselben Rand kleiner als die Anzahl von Punkten, die an der Kante des Kreises erzeugt werden, da der Radius des Mittelpunkts kleiner ist als der Radius des gesamten Kreises. Insgesamt sind die Punkte also gleichmäßig über den gesamten Kreis verteilt.
Holen Sie sich jetzt Ihre zufällige Position:
var result:Point = new Point(
center.x + Math.cos(angle) * rad,
center.y + Math.sin(angle) * rad
);
Um einen zufälligen Punkt auf dem Kreis (am Rand des Kreises eines gegebenen Radius) zu erhalten, verwenden Sie den radius
anstelle von rad
.
PS: Das Beispiel wurde durch die Erklärung der Mathematik überlastet.
Zufälliger Winkel, im Bogenmaß
function randomAngleRadians():Number
{
return Math.random() * Math.PI * 2;
}
Beispielausgaben:
- 5.490068569213088
- 3.1984284719180205
- 4.581117863808207
Ermittlung des Erfolgs einer "Prozent-Chance" -Operation
Wenn Sie in einer Situation mit "x% chance" für true
oder false
rollen müssen, verwenden Sie:
function roll(chance:Number):Boolean {
return Math.random() >= chance;
}
Verwendet wie:
var success:Boolean = roll(0.5); // True 50% of the time.
var again:Boolean = roll(0.25); // True 25% of the time.
Erstellen Sie eine zufällige Farbe
Um eine zufällige Farbe zu erhalten:
function randomColor():uint
{
return Math.random() * 0xFFFFFF;
}
Wenn Sie mehr Kontrolle über die roten, grünen und blauen Kanäle benötigen:
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;
Hier können Sie Ihren eigenen Bereich für r
, g
und b
angeben (dieses Beispiel ist von 0 bis 255).
Zufällig durch das Alphabet blättern
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);
}
Beispielausgabe:
V, M, F, E, D, U, S, L, X, K, A, I, W, N, P, Y, J, C, O, R, G, B Z
Zufällige Anordnung eines Arrays
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);
Beispielausgabe
B, Z, D, R, U, N, O, M, I, L, C, J, P, H, W, S, Q, E, K, F, V, X, Y, G, EIN
Diese Methode ist als Fisher-Yates-Array-Shuffle bekannt .