ActionScript 3
Génération de valeur aléatoire
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 .