ActionScript 3
Генерация случайных величин
Поиск…
Случайное число от 0 до 1
Math.random();
создает равномерно распределенное случайное число между 0 (включительно) и 1 (эксклюзивным)
Пример вывода:
- +0,22282187035307288
- 0,3948539895936847
- 0,9987191134132445
Случайное число между значениями min и max
function randomMinMax(min:Number, max:Number):Number {
return (min + (Math.random() * Math.abs(max - min)));
}
Эта функция вызывается путем передачи диапазона минимальных и максимальных значений.
Пример:
randomMinMax(1, 10);
Примеры выходов:
- +1,661770915146917
- 2,5521070677787066
- +9,436270965728909
Случайный угол, в градусах
function randomAngle():Number {
return (Math.random() * 360);
}
Примеры выходов:
- +31,554428357630968
- +230,4078639484942
- +312,7964010089636
Случайное значение из массива
Предполагая, что у нас есть массив myArray
:
var value:* = myArray[int(Math.random() * myArray.length)];
Обратите внимание, что мы используем int
для передачи результата Math.random()
в int, поскольку значения, такие как 2.4539543
, не будут действительным индексом массива.
Случайная точка внутри круга
Сначала определите радиус окружности и его центр:
var radius:Number = 100;
var center:Point = new Point(35, 70);
Затем генерируйте случайный угол в радианах из центра:
var angle:Number = Math.random() * Math.PI * 2;
Затем создайте эффективный радиус возвращенной точки, поэтому он будет находиться внутри заданного radius
. Простой Math.random()*radius
не будет выполняться, потому что при этом распределении точки создания будут Math.random()*radius
в внутренний круг половины радиуса половины времени, но квадрат этого круга составляет четверть оригинала. Чтобы создать правильное распределение, функция должна быть такой:
var rad:Number=(Math.random()+Math.random())*radius; // yes, two separate calls to random
if (rad>radius) { rad=2*radius-rad; }
Эта функция дает значение, которое имеет свою вероятностную функцию, линейно увеличивающуюся от 0 до нуля до максимума при radius
. Это происходит потому, что сумма случайных значений имеет функцию плотности вероятности, равную свертке всех индивидуальных функций плотности случайных величин. Это некоторые расширенные математические вычисления для человека среднего класса, но представлен вид GIF для рисования графика функции свертки двух функций плотности распределения в форме, которые объясняются как « боковые сигналы ». Оператор if
сгибает результирующую функцию по ее максимуму, оставляя только пилообразный график.
Эта функция выбрана потому, что квадрат круглой полосы, расположенной между radius=r
и radius=r+dr
линейно возрастает с ростом r
и очень малой постоянной dr
так, что dr*dr<<r
. Поэтому количество точек, сгенерированных вблизи центра, меньше, чем количество точек, созданных на краю круга, на тот же край, что и радиус центральной области меньше радиуса всей окружности. Таким образом, точки равномерно распределены по всему кругу.
Теперь найдите свою случайную позицию:
var result:Point = new Point(
center.x + Math.cos(angle) * rad,
center.y + Math.sin(angle) * rad
);
Чтобы получить случайную точку на круге (на краю круга заданного радиуса), используйте radius
вместо rad
.
PS: Пример оказался перегруженным объяснением математики.
Случайный угол, в радианах
function randomAngleRadians():Number
{
return Math.random() * Math.PI * 2;
}
Примеры выходов:
- +5,490068569213088
- 3,1984284719180205
- +4,581117863808207
Определение успеха операции «процентный шанс»
Если вам нужно катиться для true
или false
в ситуации «x% шанс», используйте:
function roll(chance:Number):Boolean {
return Math.random() >= chance;
}
Используется как:
var success:Boolean = roll(0.5); // True 50% of the time.
var again:Boolean = roll(0.25); // True 25% of the time.
Создайте случайный цвет
Для того, чтобы получить какой - либо случайный цвет:
function randomColor():uint
{
return Math.random() * 0xFFFFFF;
}
Если вам нужно больше контролировать красный, зеленый и синий каналы:
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;
Здесь вы можете указать свой собственный диапазон для r
, g
и b
(этот пример от 0 до 255).
Случайно петля через алфавит
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);
}
Пример вывода:
V, M, F, E, D, U, S, L, X, K, Q, H, A, I, W, N, P, Y, J, C, T, O, R, G, Z
Рандомизировать массив
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);
Пример вывода
B, Z, D, R, U, N, О, М, I, L, С, J, P, H, W, S, Q, E, K, T, F, V, X, Y, G,
Этот метод известен как Shuffle массива Fisher-Yates .