ActionScript 3
무작위 값 생성
수색…
0과 1 사이의 임의의 숫자
Math.random();
0 (포함)과 1 (제외) 사이의 균등하게 분산 된 난수를 생성합니다.
예제 출력 :
- 0.22282187035307288
- 0.3948539895936847
- 0.9987191134132445
최소값과 최대 값 사이의 임의의 숫자
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)];
2.4539543
과 같은 값은 유효한 배열 인덱스가 아니기 때문에 int를 사용하여 Math.random()
의 결과를 int
로 캐스트합니다.
원 안에 임의의 점
먼저 원의 반경과 중심을 정의합니다.
var radius:Number = 100;
var center:Point = new Point(35, 70);
그런 다음 중심에서 임의의 각도 ( 라디안) 를 생성합니다.
var angle:Number = Math.random() * Math.PI * 2;
그런 다음 반환 된 점의 유효 반경을 생성합니다. 그러면 주어진 radius
내에있게됩니다. 이 분포를 사용하면 생성 점이 시간의 절반 반 반지름의 내부 원으로 끝나기 때문에 간단한 Math.random()*radius
은 수행하지 않지만 해당 원의 제곱은 원본의 1/4입니다. 적절한 배포판을 만들려면 함수가 다음과 같아야합니다.
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
);
원의 임의의 점 (주어진 반경의 원의 가장자리)을 얻으려면 rad
대신 radius
를 사용하십시오.
추신 : 예는 수학에 대한 설명으로 과부하가되었습니다.
무작위 각도 (라디안 단위)
function randomAngleRadians():Number
{
return Math.random() * Math.PI * 2;
}
출력 예 :
- 5.490068569213088
- 3.1984284719180205
- 4.581117863808207
"퍼센트 기회"작업의 성공 여부 결정
"x % 확률"상황에서 true
또는 false
로 롤백해야하는 경우 다음을 사용하십시오.
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);
}
예제 출력 :
Y, J, C, T, O, R, G, B, M, F, E, D, U, S, L, X, K, Q, H, 지
배열 무작위 화
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);
예제 출력
H, W, S, Q, E, K, T, F, V, X, Y, G, B, Z, D, R, U, N, O, M, I, L, 에이
이 방법을 Fisher-Yates 배열 셔플이라고 합니다.