Ricerca…


Numero casuale compreso tra 0 e 1

Math.random();

produce un numero casuale uniformemente distribuito tra 0 (incluso) e 1 (esclusivo)

Esempio di output:

  • ,22282187035307288
  • ,3948539895936847
  • ,9987191134132445

Numero casuale tra valori minimi e massimi

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

Questa funzione viene chiamata passando un intervallo di valori minimi e massimi.

Esempio:

randomMinMax(1, 10);

Risultati di esempio:

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

Angolo casuale, in gradi

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

Risultati di esempio:

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

Valore casuale da una matrice

Supponendo che abbiamo un array myArray :

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

Nota che usiamo int per 2.4539543 il risultato di Math.random() a un int perché valori come 2.4539543 non sarebbero un indice di array valido.

Punto casuale all'interno di un cerchio

Prima definisci il raggio del cerchio e il suo centro:

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

Quindi genera un angolo casuale in radianti dal centro:

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

Quindi genera un raggio efficace del punto restituito, quindi sarà all'interno del radius dato. Un semplice Math.random()*radius non funzionerà, perché con questa distribuzione i punti prodotti finiranno nel cerchio interno di mezzo raggio metà del tempo, ma il quadrato di quel cerchio è un quarto dell'originale. Per creare una corretta distribuzione, la funzione dovrebbe essere così:

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

Questa funzione produce un valore che ha la sua funzione di probabilità che aumenta linearmente da 0 a zero al massimo al radius . Succede perché una somma di valori casuali ha una funzione di densità di probabilità uguale alla convoluzione di tutte le funzioni di densità individuale dei valori casuali. Questa è una matematica estesa per una persona di grado medio, ma una GIF gentile viene presentata per tracciare un grafico della funzione di convoluzione di due funzioni di densità di distribuzione uniformi spiegate come " segnali di casella ". L'operatore if ripiega la funzione risultante sul suo massimo, lasciando solo un grafico a forma di dente di sega.

Questa funzione è selezionata perché il quadrato di una striscia circolare situata tra radius=r e radius=r+dr aumenta linearmente con r crescente e costante dr molto piccolo in modo che dr*dr<<r . Pertanto, la quantità di punti generati vicino al centro è minore della quantità di punti generati sul bordo del cerchio dello stesso margine in cui il raggio dell'area centrale è inferiore al raggio dell'intero cerchio. Quindi, in generale, i punti sono equamente distribuiti in tutto il cerchio.

Ora, prendi la tua posizione casuale:

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

Per ottenere un punto casuale sul cerchio (sul bordo del cerchio di un dato raggio), utilizzare il radius anziché il rad .

PS: l'esempio è stato sovraccaricato dalla spiegazione della matematica.

Angolo casuale, in radianti

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

Risultati di esempio:

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

Determinazione del successo di un'operazione "percentuale di possibilità"

Se è necessario eseguire il roll su true o false in una situazione di "x% chance", utilizzare:

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

Usato come:

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

Crea un colore casuale

Per ottenere un colore casuale:

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

Se hai bisogno di più controllo sui canali rosso, verde e blu:

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;

Qui è possibile specificare un intervallo per r , g e b (questo esempio è 0-255).

Passa in modo casuale attraverso l'alfabeto

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

Esempio di output:

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

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

Esempio di output

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

Questo metodo è noto come array shauffle Fisher-Yates .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow