Szukaj…


Liczba losowa od 0 do 1

Math.random();

tworzy równomiernie rozłożoną liczbę losową od 0 (włącznie) do 1 (wyłącznie)

Przykładowe dane wyjściowe:

  • 0,22282187035307288
  • 0,3948539895936847
  • 0,9987191134132445

Losowa liczba między wartościami minimalną i maksymalną

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

Ta funkcja jest wywoływana przez przekazanie zakresu wartości minimalnych i maksymalnych.

Przykład:

randomMinMax(1, 10);

Przykładowe wyniki:

  • 1,661770915146917
  • 2.5521070677787066
  • 9,436270965728909

Kąt losowy, w stopniach

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

Przykładowe wyniki:

  • 31,554428357630968
  • 230.4078639484942
  • 312.7964010089636

Losowa wartość z tablicy

Zakładając, że mamy tablicę myArray :

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

Zauważ, że używamy int aby rzutować wynik Math.random() na int, ponieważ wartości takie jak 2.4539543 nie byłyby poprawnym indeksem tablicy.

Losowy punkt wewnątrz koła

Najpierw określ promień okręgu i jego środek:

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

Następnie wygeneruj losowy kąt w radianach od środka:

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

Następnie wygeneruj efektywny promień zwróconego punktu, aby znalazł się w danym radius . Prosty Math.random()*radius nie zadziała, ponieważ przy takim rozkładzie punkty Math.random()*radius w wewnętrznym okręgu w połowie promienia przez połowę czasu, ale kwadrat tego koła jest ćwiartką oryginału. Aby utworzyć prawidłowy rozkład, funkcja powinna wyglądać następująco:

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

Ta funkcja generuje wartość, której funkcja prawdopodobieństwa rośnie liniowo od 0 przy zera do maksimum przy radius . Dzieje się tak, ponieważ suma wartości losowych ma funkcję gęstości prawdopodobieństwa równą splotowi wszystkich indywidualnych funkcji gęstości wartości losowych. Jest to kilka rozszerzonych obliczeń matematycznych dla przeciętnej osoby, ale przedstawiono miły GIF, aby narysować wykres funkcji splotu dwóch ujednoliconych funkcji gęstości rozkładu wyjaśnionych jako „ sygnały ramkowe ”. Operator if składa wynikową funkcję ponad maksimum, pozostawiając jedynie wykres w kształcie piły.

Ta funkcja jest wybrana, ponieważ kwadrat paska koła znajdującego się między radius=r radius=r+dr rośnie liniowo wraz ze wzrostem r i bardzo małą stałą dr tak że dr*dr<<r . Dlatego liczba punktów generowanych blisko środka jest mniejsza niż liczba punktów generowanych na krawędzi koła o ten sam margines, ponieważ promień obszaru środkowego jest mniejszy niż promień całego koła. Ogólnie rzecz biorąc, punkty są równomiernie rozmieszczone w całym okręgu.

Teraz zdobądź swoją losową pozycję:

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

Aby uzyskać losowy punkt NA kole (na krawędzi koła o danym promieniu), użyj radius zamiast rad .

PS: Przykład został przeciążony wyjaśnieniem matematyki.

Kąt losowy w radianach

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

Przykładowe wyniki:

  • 5.490068569213088
  • 3.1984284719180205
  • 4.581117863808207

Określenie powodzenia operacji „procent szans”

Jeśli musisz rzucić na true lub false w sytuacji „x% szansy”, użyj:

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

Używany jak:

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

Utwórz losowy kolor

Aby uzyskać dowolny losowy kolor:

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

Jeśli potrzebujesz większej kontroli nad kanałami czerwonym, zielonym i niebieskim:

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;

Tutaj można określić własny zakres dla r , g i b (w tym przykładzie wynosi od 0-255).

Losowo przeglądaj alfabet

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

Przykładowe dane wyjściowe:

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

Przykładowe dane wyjściowe

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, ZA

Ta metoda jest znana jako tasowanie tablic Fisher-Yates .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow