Zoeken…


Willekeurig nummer tussen 0 en 1

Math.random();

produceert een gelijk verdeeld willekeurig getal tussen 0 (inclusief) en 1 (exclusief)

Voorbeelduitgang:

  • ,22282187035307288
  • ,3948539895936847
  • ,9987191134132445

Willekeurig getal tussen min en max waarden

function randomMinMax(min:Number, max:Number):Number {
    return (min + (Math.random() * Math.abs(max - min)));
}

Deze functie wordt opgeroepen door een bereik van minimum- en maximumwaarden door te geven.

Voorbeeld:

randomMinMax(1, 10);

Voorbeeld uitgangen:

  • 1,661770915146917
  • 2,5521070677787066
  • 9,436270965728909

Willekeurige hoek, in graden

function randomAngle():Number {
    return (Math.random() * 360);
}

Voorbeeld uitgangen:

  • 31,554428357630968
  • 230,4078639484942
  • 312,7964010089636

Willekeurige waarde van een array

Ervan uitgaande dat we een array myArray :

var value:* = myArray[int(Math.random() * myArray.length)];

Merk op dat we int om het resultaat van Math.random() naar een int te casten omdat waarden zoals 2.4539543 geen geldige array-index zouden zijn.

Willekeurig punt binnen een cirkel

Definieer eerst de cirkelradius en het middelpunt:

var radius:Number = 100;
var center:Point = new Point(35, 70);

Genereer vervolgens een willekeurige hoek in radialen vanuit het midden:

var angle:Number = Math.random() * Math.PI * 2;

Genereer vervolgens een effectieve straal van het geretourneerde punt, zodat deze zich binnen de gegeven radius . Een eenvoudige Math.random()*radius is niet voldoende, omdat met deze verdeling de geproduceerde punten de helft van de tijd in de binnenste cirkel van een halve straal Math.random()*radius , maar het vierkant van die cirkel is een kwart van het origineel. Om een juiste verdeling te maken, zou de functie er als volgt uit moeten zien:

var rad:Number=(Math.random()+Math.random())*radius; // yes, two separate calls to random
if (rad>radius) { rad=2*radius-rad; }

Deze functie produceert een waarde waarvan de waarschijnlijkheidsfunctie lineair toeneemt van 0 bij nul tot maximaal bij radius . Het gebeurt omdat een som van willekeurige waarden een waarschijnlijkheidsdichtheidsfunctie heeft die gelijk is aan convolutie van alle individuele dichtheidsfuncties van de willekeurige waarden. Dit is wat uitgebreide wiskunde voor een persoon van gemiddelde kwaliteit, maar er wordt een soort GIF gepresenteerd om een grafiek van de convolutiefunctie te tekenen van twee geüniformeerde distributiedichtheidsfuncties uitgelegd als " boxsignalen ". De operator if vouwt de resulterende functie over zijn maximum, waardoor alleen een zaagtandvormige grafiek overblijft.

Deze functie is geselecteerd omdat het vierkant van een cirkelstrook gelegen tussen radius=r en radius=r+dr lineair toeneemt met toenemende r en zeer kleine constante dr zodat dr*dr<<r . Daarom is het aantal punten dat dichtbij het midden wordt gegenereerd kleiner dan het aantal punten dat aan de rand van de cirkel wordt gegenereerd met dezelfde marge als de straal van het middelste gebied kleiner is dan de straal van de hele cirkel. Dus over het algemeen zijn de punten gelijk verdeeld over de hele cirkel.

Krijg nu uw willekeurige positie:

var result:Point = new Point(
    center.x + Math.cos(angle) * rad,
    center.y + Math.sin(angle) * rad
);

Gebruik een radius plaats van rad om een willekeurig punt op de cirkel te krijgen (aan de rand van de cirkel met een bepaalde straal).

PS: Het voorbeeld werd uiteindelijk overbelast door een verklaring van wiskunde.

Willekeurige hoek, in radialen

function randomAngleRadians():Number
{
    return Math.random() * Math.PI * 2;
}

Voorbeeld uitgangen:

  • 5,490068569213088
  • 3,1984284719180205
  • 4,581117863808207

Bepaling van het succes van een "procentuele kans" operatie

Als je moet rollen voor een true of false in een "x% kans" situatie, gebruik dan:

function roll(chance:Number):Boolean {
    return Math.random() >= chance;
}

Gebruikt als:

var success:Boolean = roll(0.5); // True 50% of the time.
var again:Boolean = roll(0.25); // True 25% of the time.

Maak een willekeurige kleur

Om een willekeurige kleur te krijgen:

function randomColor():uint
{
    return Math.random() * 0xFFFFFF;
}

Als je meer controle nodig hebt over de rode, groene en blauwe kanalen:

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 kunt u uw eigen bereik opgeven voor r , g en b (dit voorbeeld is van 0-255).

Willekeurig alfabet doorlopen

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);
}

Voorbeelduitgang:

V, M, F, E, D, U, S, L, X, K, Q, H, A, I, W, N, P, Y, J, C, T, O, R, G, B, Z

Randomiseer een array

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);    

Voorbeelduitvoer

B, Z, D, R, U, N, O, M, I, L, C, J, P, H, W, S, Q, E, K, T, V, V, X, Y, G, EEN

Deze methode staat bekend als Fisher-Yates array-shuffle .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow