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 .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow