Sök…


Slumpmässigt nummer mellan 0 och 1

Math.random();

producerar ett jämnt fördelat slumpmässigt antal mellan 0 (inklusive) och 1 (exklusivt)

Exempel på utgång:

  • ,22282187035307288
  • ,3948539895936847
  • ,9987191134132445

Slumpmässigt antal mellan min- och maxvärden

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

Denna funktion kallas genom att passera ett intervall med minimi- och maximivärden.

Exempel:

randomMinMax(1, 10);

Exempelutgångar:

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

Slumpvis vinkel, i grader

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

Exempelutgångar:

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

Slumpmässigt värde från en matris

Förutsatt att vi har ett array myArray :

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

Observera att vi använder int att kasta resultatet av Math.random() till ett int eftersom värden som 2.4539543 skulle vara ett giltigt arrayindex.

Slumpmässig punkt inuti en cirkel

Definiera först cirkelradie och dess centrum:

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

Generera sedan en slumpmässig vinkel i radianer från mitten:

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

Generera sedan en effektiv radie för den returnerade punkten, så att den kommer att vara inom en given radius . En enkel Math.random()*radius kommer inte att göra, för med denna fördelning kommer produktionspunkterna att hamna i den inre cirkeln av halva radien halva tiden, men kvadraten för cirkeln är en fjärdedel av originalet. För att skapa en rätt distribution bör funktionen vara så här:

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

Denna funktion producerar ett värde som har sin sannolikhetsfunktion linjärt ökar från 0 vid noll till max vid radius . Det händer eftersom en summa av slumpmässiga värden har en sannolikhetsdensitetsfunktion som är lika med sammandragningen av alla slumpmässiga värdenas individuella densitetsfunktioner. Detta är några utvidgade matematiker för en person i medelklass, men ett slags GIF presenteras för att rita en kurva för upplösningsfunktion för två uniformerade distributionstäthetsfunktioner som förklaras som " rutasignaler ". if operatören viker den resulterande funktionen över sitt maximala, och lämnar endast en sågtandformad graf.

Denna funktion väljs eftersom kvadratet på en cirkelremsa belägen mellan radius=r och radius=r+dr ökar linjärt med ökande r och mycket liten konstant dr så att dr*dr<<r . Därför är mängden punkter som genereras nära mitten mindre än mängden punkter som genereras vid kanten av cirkeln med samma marginal som radien för mittområdet är mindre än radien för hela cirkeln. Så totalt sett är punkter jämnt fördelade över hela cirkeln.

Nu får du din slumpmässiga position:

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

För att få en slumpmässig punkt PÅ cirkeln (på kanten av cirkeln för en given radie), använd radius istället för rad .

PS: Exemplet blev överbelastat genom förklaring av matematik.

Slumpvis vinkel, i radianer

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

Exempelutgångar:

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

Bestämma framgången för en "procent chans" operation

Om du behöver rulla efter en true eller false i en "x% chans" -situation, använd:

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

Används som:

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

Skapa en slumpmässig färg

För att få någon slumpmässig färg:

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

Om du behöver mer kontroll över de röda, gröna och blå kanalerna:

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;

Här kan du ange ditt eget intervall för r , g och b (detta exempel är från 0-255).

Slumpmässigt slinga genom alfabetet

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

Exempel på utgång:

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

Slumpa fram ett 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);    

Exempel på utgång

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

Denna metod är känd som Fisher-Yates array shuffle .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow