ActionScript 3
Generación de valor aleatorio
Buscar..
Número aleatorio entre 0 y 1
Math.random();
produce un número aleatorio distribuido uniformemente entre 0 (inclusive) y 1 (exclusivo)
Ejemplo de salida:
- 0.22282187035307288
- 0.3948539895936847
- 0.9987191134132445
Número aleatorio entre valores mínimo y máximo
function randomMinMax(min:Number, max:Number):Number {
return (min + (Math.random() * Math.abs(max - min)));
}
Esta función se llama pasando un rango de valores mínimo y máximo.
Ejemplo:
randomMinMax(1, 10);
Ejemplos de salidas:
- 1.661770915146917
- 2.5521070677787066
- 9.436270965728909
Angulo aleatorio, en grados
function randomAngle():Number {
return (Math.random() * 360);
}
Ejemplos de salidas:
- 31.554428357630968
- 230.4078639484942
- 312.7964010089636
Valor aleatorio de una matriz
Suponiendo que tenemos una matriz myArray
:
var value:* = myArray[int(Math.random() * myArray.length)];
Tenga en cuenta que usamos int
para convertir el resultado de Math.random()
en un int porque valores como 2.4539543
no serían un índice de matriz válido.
Punto aleatorio dentro de un círculo
Primero define el radio del círculo y su centro:
var radius:Number = 100;
var center:Point = new Point(35, 70);
Luego genera un ángulo aleatorio en radianes desde el centro:
var angle:Number = Math.random() * Math.PI * 2;
Luego genere un radio efectivo del punto devuelto, para que esté dentro del radius
dado. Un simple Math.random()*radius
no funcionará, porque con esta distribución los puntos Math.random()*radius
terminarán en el círculo interior de la mitad del radio la mitad del tiempo, pero el cuadrado de ese círculo es una cuarta parte del original. Para crear una distribución adecuada, la función debería ser así:
var rad:Number=(Math.random()+Math.random())*radius; // yes, two separate calls to random
if (rad>radius) { rad=2*radius-rad; }
Esta función produce un valor que tiene su función de probabilidad que aumenta linealmente desde 0 en cero hasta el máximo en el radius
. Ocurre porque una suma de valores aleatorios tiene una función de densidad de probabilidad igual a la convolución de todas las funciones de densidad individual de los valores aleatorios. Estas son algunas matemáticas extendidas para una persona de grado promedio, pero se presenta un tipo de GIF para dibujar una gráfica de la función de convolución de dos funciones de densidad de distribución uniformada explicadas como " señales de caja ". El operador if
pliega la función resultante sobre su máximo, dejando solo un gráfico en forma de diente de sierra.
Esta función se selecciona porque el cuadrado de una franja de círculo ubicada entre el radius=r
y el radius=r+dr
aumenta linealmente al aumentar r
y la constante muy pequeña dr
modo que dr*dr<<r
. Por lo tanto, la cantidad de puntos generados cerca del centro es menor que la cantidad de puntos generados en el borde del círculo por el mismo margen, ya que el radio del área central es menor que el radio del círculo completo. Entonces, en general, los puntos se distribuyen uniformemente en todo el círculo.
Ahora, consigue tu posición aleatoria:
var result:Point = new Point(
center.x + Math.cos(angle) * rad,
center.y + Math.sin(angle) * rad
);
Para obtener un punto al azar en el círculo (en el borde del círculo de un radio determinado), use el radius
lugar de rad
.
PD: El ejemplo terminó siendo sobrecargado por la explicación de las matemáticas.
Ángulo aleatorio, en radianes
function randomAngleRadians():Number
{
return Math.random() * Math.PI * 2;
}
Ejemplos de salidas:
- 5.490068569213088
- 3.1984284719180205
- 4.581117863808207
Determinar el éxito de una operación de "porcentaje de probabilidad"
Si necesita tirar para obtener un true
o false
en una situación de "x% de probabilidad", use:
function roll(chance:Number):Boolean {
return Math.random() >= chance;
}
Utilizado como
var success:Boolean = roll(0.5); // True 50% of the time.
var again:Boolean = roll(0.25); // True 25% of the time.
Crear un color al azar
Para obtener cualquier color al azar:
function randomColor():uint
{
return Math.random() * 0xFFFFFF;
}
Si necesita más control sobre los canales rojo, verde y azul:
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;
Aquí puede especificar su propio rango para r
, g
y b
(este ejemplo es de 0-255).
Recorrer aleatoriamente el 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);
}
Ejemplo de salida:
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
Aleatorizar una matriz
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);
Ejemplo de salida
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, UNA
Este método es conocido como shuffle de Fisher-Yates .