Recherche…


Nombre aléatoire entre 0 et 1

Math.random();

produit un nombre aléatoire uniformément réparti entre 0 (inclus) et 1 (exclusif)

Exemple de sortie:

  • 0.22282187035307288
  • 0.3948539895936847
  • 0.9987191134132445

Nombre aléatoire entre les valeurs min et max

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

Cette fonction est appelée en passant une plage de valeurs minimales et maximales.

Exemple:

randomMinMax(1, 10);

Exemple de sorties:

  • 1.661770915146917
  • 2.5521070677787066
  • 9.436270965728909

Angle aléatoire, en degrés

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

Exemple de sorties:

  • 31.554428357630968
  • 230.4078639484942
  • 312.7964010089636

Valeur aléatoire d'un tableau

En supposant que nous avons un tableau myArray :

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

Notez que nous utilisons int pour Math.random() le résultat de Math.random() en int, car les valeurs comme 2.4539543 ne seraient pas un index de tableau valide.

Point aléatoire à l'intérieur d'un cercle

Définissez d'abord le rayon du cercle et son centre:

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

Ensuite, générez un angle aléatoire en radians à partir du centre:

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

Ensuite, générez un rayon effectif du point retourné, de sorte qu'il se trouve dans un radius donné. Un simple Math.random()*radius ne le fera pas, car avec cette distribution, les points produits se retrouveront dans le cercle intérieur à moitié rayon, mais le carré de ce cercle est le quart de l'original. Pour créer une distribution correcte, la fonction devrait être comme ceci:

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

Cette fonction produit une valeur dont la fonction de probabilité augmente linéairement de 0 à zéro au maximum au radius . Cela se produit parce qu'une somme de valeurs aléatoires a une fonction de densité de probabilité égale à la convolution de toutes les fonctions de densité individuelles des valeurs aléatoires. Il s’agit de mathématiques étendues pour une personne de niveau moyen, mais une sorte de GIF est présentée pour dessiner un graphique de la fonction de convolution de deux fonctions de densité de distribution uniforme expliquées sous la forme de « signaux de boîte ». L'opérateur if plie la fonction résultante sur son maximum, ne laissant qu'un graphique en dents de scie.

Cette fonction est sélectionnée car le carré d’une bande de cercle située entre radius=r et radius=r+dr augmente linéairement avec l’augmentation de r et la très petite constante dr sorte que dr*dr<<r . Par conséquent, la quantité de points générés à proximité du centre est inférieure à la quantité de points générés au bord du cercle avec la même marge que le rayon de la zone centrale est inférieur au rayon de tout le cercle. Donc, globalement, les points sont répartis uniformément dans tout le cercle.

Maintenant, obtenez votre position au hasard:

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

Pour obtenir un point aléatoire sur le cercle (sur le bord du cercle d'un rayon donné), utilisez le radius au lieu de rad .

PS: L'exemple a fini par être surchargé par l'explication des maths.

Angle aléatoire, en radians

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

Exemple de sorties:

  • 5.490068569213088
  • 3.1984284719180205
  • 4.581117863808207

Détermination du succès d'une opération "pourcentage de chance"

Si vous devez effectuer un jet pour un true ou un false dans une situation "x% chance", utilisez:

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

Utilisé comme:

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

Créer une couleur aléatoire

Pour obtenir une couleur aléatoire:

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

Si vous avez besoin de plus de contrôle sur les canaux rouge, vert et bleu:

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;

Vous pouvez spécifier ici votre propre plage pour r , g et b (cet exemple va de 0 à 255).

Boucle aléatoire dans l'alphabet

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

Exemple de sortie:

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

Randomize Un tableau

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

Exemple de sortie

A, K, T, F, V, X, Y, G UNE

Cette méthode est connue sous le nom de mélange de tableaux Fisher-Yates .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow