index.js
4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* 线性同余随机数生成器
*/
class Random {
/**
* 创建一个随机数生成器
*/
constructor(seed) {
this.seed = seed;
if (!this.seed && this.seed != 0) {
this.seed = new Date().getTime();
}
}
/**
* 返回一个随机数,在0.0~1.0之间
*/
get value() {
return this.range(0, 1);
}
/**
* 返回半径为1的圆内的一个随机点
*/
get insideUnitCircle() {
var randomAngle = this.range(0, 360);
var randomDis = this.range(1, 0);
var randomX = randomDis * Math.cos(randomAngle * Math.PI / 180);
var randomY = randomDis * Math.sin(randomAngle * Math.PI / 180);
return { x: randomX, y: randomY };
}
/**
* 返回半径为1的圆边的一个随机点
*/
get onUnitCircle() {
var randomAngle = this.range(0, 360);
var randomX = Math.cos(randomAngle * Math.PI / 180);
var randomY = Math.sin(randomAngle * Math.PI / 180);
return { x: randomX, y: randomY };
}
/**
* 返回一个在min和max之间的随机浮点数
*/
range(min, max) {
if (!this.seed && this.seed != 0) {
this.seed = new Date().getTime();
}
max = max || 1;
min = min || 0;
this.seed = (this.seed * 9301 + 49297) % 233280;
var rnd = this.seed / 233280.0;
return min + rnd * (max - min);
}
/**
* 返回一个随机数,在0.0~1.0之间
*/
static get value() {
return this.range(1, 0);
}
/**
* 返回半径为1的圆内的一个随机点
*/
static get insideUnitCircle() {
var randomAngle = this.range(0, 360);
var randomDis = this.range();
var randomX = randomDis * Math.cos(randomAngle * Math.PI / 180);
var randomY = randomDis * Math.sin(randomAngle * Math.PI / 180);
return { x: randomX, y: randomY };
}
/**
* 返回半径为1的圆边的一个随机点
*/
static get onUnitCircle() {
var randomAngle = this.range(0, 360);
var randomX = Math.cos(randomAngle * Math.PI / 180);
var randomY = Math.sin(randomAngle * Math.PI / 180);
return { x: randomX, y: randomY };
}
/**
* 返回一个在min和max之间的随机浮点数
*/
static range(min = 0, max = 1) {
if (!Random.seed && Random.seed != 0) {
Random.seed = new Date().getTime();
}
max = max || 1;
min = min || 0;
Random.seed = (Random.seed * 9301 + 49297) % 233280;
var rnd = Random.seed / 233280.0;
return min + rnd * (max - min);
}
/**
* 返回一个在min和max之间的随机整数,包括最大值
*/
static rangeInt(min, max) {
var Range = max - min;
var Rand = Random.range(0, 1);
return (min + Math.round(Rand * Range));
}
/**返回一个arr[0]到arr[1]之间的随机整数,包括最大值 */
static rangeIntByArr(arr) {
if (arr.length < 2) {
return 0;
}
return Random.rangeInt(arr[0], arr[1]);
}
/**返回一个arr[0]到arr[1]之间的随机数,包括最大值 */
static rangeByArr(arr) {
if (arr.length < 2) {
return 0;
}
return Random.range(arr[0], arr[1]);
}
/**从数组里随机一个元素 */
static rangeFromArr(arr) {
let idx = Random.rangeInt(0, arr.length - 1);
return arr[idx];
}
/**根据权重数组的概率分布,随机抽取值数组里的元素 */
static getValueByWeight(arrValue, arrWeight) {
let random = Random.range();
// cc.log("getValueByWeight random range===>>> ", random)
let temp = 0;
for (let i = 0; i < arrValue.length; i++) {
const weight = arrWeight[i] + temp;
if (random <= weight) {
// cc.log("getValueByWeight 随到了===>>> ", arrValue[i])
return arrValue[i];
}
temp = weight;
}
// cc.log("getValueByWeight 没随到 ")
return null;
}
}
exports.Random = Random;