@esengine/ecs-framework-math 2.10.1 → 2.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +10175 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/package.json +20 -11
- package/bin/Animation/Easing.d.ts +0 -244
- package/bin/Animation/Easing.d.ts.map +0 -1
- package/bin/Animation/Easing.js +0 -407
- package/bin/Animation/Easing.js.map +0 -1
- package/bin/Animation/Interpolation.d.ts +0 -172
- package/bin/Animation/Interpolation.d.ts.map +0 -1
- package/bin/Animation/Interpolation.js +0 -327
- package/bin/Animation/Interpolation.js.map +0 -1
- package/bin/Animation/index.d.ts +0 -8
- package/bin/Animation/index.d.ts.map +0 -1
- package/bin/Animation/index.js +0 -8
- package/bin/Animation/index.js.map +0 -1
- package/bin/Circle.d.ts +0 -277
- package/bin/Circle.d.ts.map +0 -1
- package/bin/Circle.js +0 -496
- package/bin/Circle.js.map +0 -1
- package/bin/Collision/CollisionDetector.d.ts +0 -114
- package/bin/Collision/CollisionDetector.d.ts.map +0 -1
- package/bin/Collision/CollisionDetector.js +0 -353
- package/bin/Collision/CollisionDetector.js.map +0 -1
- package/bin/Collision/index.d.ts +0 -7
- package/bin/Collision/index.d.ts.map +0 -1
- package/bin/Collision/index.js +0 -7
- package/bin/Collision/index.js.map +0 -1
- package/bin/Color.d.ts +0 -277
- package/bin/Color.d.ts.map +0 -1
- package/bin/Color.js +0 -470
- package/bin/Color.js.map +0 -1
- package/bin/Fixed32.d.ts +0 -266
- package/bin/Fixed32.d.ts.map +0 -1
- package/bin/Fixed32.js +0 -381
- package/bin/Fixed32.js.map +0 -1
- package/bin/FixedMath.d.ts +0 -109
- package/bin/FixedMath.d.ts.map +0 -1
- package/bin/FixedMath.js +0 -264
- package/bin/FixedMath.js.map +0 -1
- package/bin/FixedVector2.d.ts +0 -293
- package/bin/FixedVector2.d.ts.map +0 -1
- package/bin/FixedVector2.js +0 -413
- package/bin/FixedVector2.js.map +0 -1
- package/bin/MathUtils.d.ts +0 -312
- package/bin/MathUtils.d.ts.map +0 -1
- package/bin/MathUtils.js +0 -500
- package/bin/MathUtils.js.map +0 -1
- package/bin/Matrix3.d.ts +0 -288
- package/bin/Matrix3.d.ts.map +0 -1
- package/bin/Matrix3.js +0 -542
- package/bin/Matrix3.js.map +0 -1
- package/bin/Rectangle.d.ts +0 -266
- package/bin/Rectangle.d.ts.map +0 -1
- package/bin/Rectangle.js +0 -437
- package/bin/Rectangle.js.map +0 -1
- package/bin/Vector2.d.ts +0 -333
- package/bin/Vector2.d.ts.map +0 -1
- package/bin/Vector2.js +0 -484
- package/bin/Vector2.js.map +0 -1
- package/bin/Vector3.d.ts +0 -257
- package/bin/Vector3.d.ts.map +0 -1
- package/bin/Vector3.js +0 -372
- package/bin/Vector3.js.map +0 -1
- package/bin/index.d.ts +0 -25
- package/bin/index.d.ts.map +0 -1
- package/bin/index.js +0 -32
- package/bin/index.js.map +0 -1
- package/bin/nodes/ColorNodes.d.ts +0 -70
- package/bin/nodes/ColorNodes.d.ts.map +0 -1
- package/bin/nodes/ColorNodes.js +0 -427
- package/bin/nodes/ColorNodes.js.map +0 -1
- package/bin/nodes/FixedNodes.d.ts +0 -98
- package/bin/nodes/FixedNodes.d.ts.map +0 -1
- package/bin/nodes/FixedNodes.js +0 -612
- package/bin/nodes/FixedNodes.js.map +0 -1
- package/bin/nodes/FixedVectorNodes.d.ts +0 -58
- package/bin/nodes/FixedVectorNodes.d.ts.map +0 -1
- package/bin/nodes/FixedVectorNodes.js +0 -330
- package/bin/nodes/FixedVectorNodes.js.map +0 -1
- package/bin/nodes/VectorNodes.d.ts +0 -62
- package/bin/nodes/VectorNodes.d.ts.map +0 -1
- package/bin/nodes/VectorNodes.js +0 -355
- package/bin/nodes/VectorNodes.js.map +0 -1
- package/bin/nodes/index.d.ts +0 -20
- package/bin/nodes/index.d.ts.map +0 -1
- package/bin/nodes/index.js +0 -27
- package/bin/nodes/index.js.map +0 -1
package/bin/MathUtils.js
DELETED
|
@@ -1,500 +0,0 @@
|
|
|
1
|
-
import { Vector2 } from './Vector2';
|
|
2
|
-
/**
|
|
3
|
-
* 数学工具函数集合
|
|
4
|
-
*
|
|
5
|
-
* 提供常用的数学运算、插值、随机数生成等实用工具函数
|
|
6
|
-
*/
|
|
7
|
-
export class MathUtils {
|
|
8
|
-
// 角度转换
|
|
9
|
-
/**
|
|
10
|
-
* 角度转弧度
|
|
11
|
-
* @param degrees 角度值
|
|
12
|
-
* @returns 弧度值
|
|
13
|
-
*/
|
|
14
|
-
static degToRad(degrees) {
|
|
15
|
-
return degrees * MathUtils.DEG_TO_RAD;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 弧度转角度
|
|
19
|
-
* @param radians 弧度值
|
|
20
|
-
* @returns 角度值
|
|
21
|
-
*/
|
|
22
|
-
static radToDeg(radians) {
|
|
23
|
-
return radians * MathUtils.RAD_TO_DEG;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* 规范化角度到[0, 2π)范围
|
|
27
|
-
* @param radians 角度(弧度)
|
|
28
|
-
* @returns 规范化后的角度
|
|
29
|
-
*/
|
|
30
|
-
static normalizeAngle(radians) {
|
|
31
|
-
while (radians < 0)
|
|
32
|
-
radians += MathUtils.TWO_PI;
|
|
33
|
-
while (radians >= MathUtils.TWO_PI)
|
|
34
|
-
radians -= MathUtils.TWO_PI;
|
|
35
|
-
return radians;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* 规范化角度到(-π, π]范围
|
|
39
|
-
* @param radians 角度(弧度)
|
|
40
|
-
* @returns 规范化后的角度
|
|
41
|
-
*/
|
|
42
|
-
static normalizeAngleSigned(radians) {
|
|
43
|
-
while (radians <= -Math.PI)
|
|
44
|
-
radians += MathUtils.TWO_PI;
|
|
45
|
-
while (radians > Math.PI)
|
|
46
|
-
radians -= MathUtils.TWO_PI;
|
|
47
|
-
return radians;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* 计算两个角度之间的最短角度差
|
|
51
|
-
* @param from 起始角度(弧度)
|
|
52
|
-
* @param to 目标角度(弧度)
|
|
53
|
-
* @returns 角度差(-π到π)
|
|
54
|
-
*/
|
|
55
|
-
static angleDifference(from, to) {
|
|
56
|
-
let diff = to - from;
|
|
57
|
-
diff = MathUtils.normalizeAngleSigned(diff);
|
|
58
|
-
return diff;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 角度插值(处理角度环绕)
|
|
62
|
-
* @param from 起始角度(弧度)
|
|
63
|
-
* @param to 目标角度(弧度)
|
|
64
|
-
* @param t 插值参数(0到1)
|
|
65
|
-
* @returns 插值结果角度
|
|
66
|
-
*/
|
|
67
|
-
static lerpAngle(from, to, t) {
|
|
68
|
-
const diff = MathUtils.angleDifference(from, to);
|
|
69
|
-
return from + diff * t;
|
|
70
|
-
}
|
|
71
|
-
// 数值操作
|
|
72
|
-
/**
|
|
73
|
-
* 限制数值在指定范围内
|
|
74
|
-
* @param value 待限制的值
|
|
75
|
-
* @param min 最小值
|
|
76
|
-
* @param max 最大值
|
|
77
|
-
* @returns 限制后的值
|
|
78
|
-
*/
|
|
79
|
-
static clamp(value, min, max) {
|
|
80
|
-
return Math.max(min, Math.min(max, value));
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* 限制数值在0到1之间
|
|
84
|
-
* @param value 待限制的值
|
|
85
|
-
* @returns 限制后的值
|
|
86
|
-
*/
|
|
87
|
-
static clamp01(value) {
|
|
88
|
-
return Math.max(0, Math.min(1, value));
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* 线性插值
|
|
92
|
-
* @param a 起始值
|
|
93
|
-
* @param b 目标值
|
|
94
|
-
* @param t 插值参数(0到1)
|
|
95
|
-
* @returns 插值结果
|
|
96
|
-
*/
|
|
97
|
-
static lerp(a, b, t) {
|
|
98
|
-
return a + (b - a) * t;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* 反向线性插值(获取插值参数)
|
|
102
|
-
* @param a 起始值
|
|
103
|
-
* @param b 目标值
|
|
104
|
-
* @param value 当前值
|
|
105
|
-
* @returns 插值参数
|
|
106
|
-
*/
|
|
107
|
-
static inverseLerp(a, b, value) {
|
|
108
|
-
if (Math.abs(b - a) < MathUtils.EPSILON) {
|
|
109
|
-
return 0;
|
|
110
|
-
}
|
|
111
|
-
return (value - a) / (b - a);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* 重映射数值从一个范围到另一个范围
|
|
115
|
-
* @param value 输入值
|
|
116
|
-
* @param inMin 输入范围最小值
|
|
117
|
-
* @param inMax 输入范围最大值
|
|
118
|
-
* @param outMin 输出范围最小值
|
|
119
|
-
* @param outMax 输出范围最大值
|
|
120
|
-
* @returns 重映射后的值
|
|
121
|
-
*/
|
|
122
|
-
static remap(value, inMin, inMax, outMin, outMax) {
|
|
123
|
-
const t = MathUtils.inverseLerp(inMin, inMax, value);
|
|
124
|
-
return MathUtils.lerp(outMin, outMax, t);
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* 平滑阶跃函数(Hermite插值)
|
|
128
|
-
* @param t 输入参数(0到1)
|
|
129
|
-
* @returns 平滑输出(0到1)
|
|
130
|
-
*/
|
|
131
|
-
static smoothStep(t) {
|
|
132
|
-
t = MathUtils.clamp01(t);
|
|
133
|
-
return t * t * (3 - 2 * t);
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* 更平滑的阶跃函数
|
|
137
|
-
* @param t 输入参数(0到1)
|
|
138
|
-
* @returns 平滑输出(0到1)
|
|
139
|
-
*/
|
|
140
|
-
static smootherStep(t) {
|
|
141
|
-
t = MathUtils.clamp01(t);
|
|
142
|
-
return t * t * t * (t * (t * 6 - 15) + 10);
|
|
143
|
-
}
|
|
144
|
-
// 比较操作
|
|
145
|
-
/**
|
|
146
|
-
* 浮点数相等比较
|
|
147
|
-
* @param a 数值a
|
|
148
|
-
* @param b 数值b
|
|
149
|
-
* @param epsilon 容差,默认为EPSILON
|
|
150
|
-
* @returns 是否相等
|
|
151
|
-
*/
|
|
152
|
-
static approximately(a, b, epsilon = MathUtils.EPSILON) {
|
|
153
|
-
return Math.abs(a - b) < epsilon;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* 检查数值是否为零
|
|
157
|
-
* @param value 数值
|
|
158
|
-
* @param epsilon 容差,默认为EPSILON
|
|
159
|
-
* @returns 是否为零
|
|
160
|
-
*/
|
|
161
|
-
static isZero(value, epsilon = MathUtils.EPSILON) {
|
|
162
|
-
return Math.abs(value) < epsilon;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* 获取数值的符号
|
|
166
|
-
* @param value 数值
|
|
167
|
-
* @returns 1、-1或0
|
|
168
|
-
*/
|
|
169
|
-
static sign(value) {
|
|
170
|
-
return value > 0 ? 1 : value < 0 ? -1 : 0;
|
|
171
|
-
}
|
|
172
|
-
// 随机数生成
|
|
173
|
-
/**
|
|
174
|
-
* 生成指定范围内的随机数
|
|
175
|
-
* @param min 最小值(包含)
|
|
176
|
-
* @param max 最大值(不包含)
|
|
177
|
-
* @returns 随机数
|
|
178
|
-
*/
|
|
179
|
-
static random(min = 0, max = 1) {
|
|
180
|
-
return Math.random() * (max - min) + min;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* 生成指定范围内的随机整数
|
|
184
|
-
* @param min 最小值(包含)
|
|
185
|
-
* @param max 最大值(包含)
|
|
186
|
-
* @returns 随机整数
|
|
187
|
-
*/
|
|
188
|
-
static randomInt(min, max) {
|
|
189
|
-
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* 随机选择数组中的一个元素
|
|
193
|
-
* @param array 数组
|
|
194
|
-
* @returns 随机元素
|
|
195
|
-
*/
|
|
196
|
-
static randomChoice(array) {
|
|
197
|
-
return array[Math.floor(Math.random() * array.length)];
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* 生成随机布尔值
|
|
201
|
-
* @param probability 为true的概率(0到1),默认0.5
|
|
202
|
-
* @returns 随机布尔值
|
|
203
|
-
*/
|
|
204
|
-
static randomBoolean(probability = 0.5) {
|
|
205
|
-
return Math.random() < probability;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* 生成单位圆内的随机点
|
|
209
|
-
* @returns 随机向量
|
|
210
|
-
*/
|
|
211
|
-
static randomInUnitCircle() {
|
|
212
|
-
const angle = Math.random() * MathUtils.TWO_PI;
|
|
213
|
-
const radius = Math.sqrt(Math.random());
|
|
214
|
-
return Vector2.fromPolar(radius, angle);
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* 生成单位圆上的随机点
|
|
218
|
-
* @returns 随机单位向量
|
|
219
|
-
*/
|
|
220
|
-
static randomOnUnitCircle() {
|
|
221
|
-
const angle = Math.random() * MathUtils.TWO_PI;
|
|
222
|
-
return Vector2.fromAngle(angle);
|
|
223
|
-
}
|
|
224
|
-
// 数学函数
|
|
225
|
-
/**
|
|
226
|
-
* 快速平方根倒数(用于归一化)
|
|
227
|
-
* @param value 输入值
|
|
228
|
-
* @returns 平方根倒数
|
|
229
|
-
*/
|
|
230
|
-
static fastInverseSqrt(value) {
|
|
231
|
-
// 简化版本,现代JavaScript引擎优化很好
|
|
232
|
-
return 1 / Math.sqrt(value);
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* 快速幂运算(整数指数)
|
|
236
|
-
* @param base 底数
|
|
237
|
-
* @param exponent 指数(整数)
|
|
238
|
-
* @returns 幂运算结果
|
|
239
|
-
*/
|
|
240
|
-
static fastPow(base, exponent) {
|
|
241
|
-
if (exponent === 0)
|
|
242
|
-
return 1;
|
|
243
|
-
if (exponent === 1)
|
|
244
|
-
return base;
|
|
245
|
-
if (exponent === 2)
|
|
246
|
-
return base * base;
|
|
247
|
-
if (exponent === 3)
|
|
248
|
-
return base * base * base;
|
|
249
|
-
return Math.pow(base, exponent);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* 阶乘
|
|
253
|
-
* @param n 非负整数
|
|
254
|
-
* @returns 阶乘结果
|
|
255
|
-
*/
|
|
256
|
-
static factorial(n) {
|
|
257
|
-
if (n < 0)
|
|
258
|
-
return NaN;
|
|
259
|
-
if (n === 0 || n === 1)
|
|
260
|
-
return 1;
|
|
261
|
-
let result = 1;
|
|
262
|
-
for (let i = 2; i <= n; i++) {
|
|
263
|
-
result *= i;
|
|
264
|
-
}
|
|
265
|
-
return result;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* 最大公约数
|
|
269
|
-
* @param a 整数a
|
|
270
|
-
* @param b 整数b
|
|
271
|
-
* @returns 最大公约数
|
|
272
|
-
*/
|
|
273
|
-
static gcd(a, b) {
|
|
274
|
-
a = Math.abs(Math.floor(a));
|
|
275
|
-
b = Math.abs(Math.floor(b));
|
|
276
|
-
while (b !== 0) {
|
|
277
|
-
const temp = b;
|
|
278
|
-
b = a % b;
|
|
279
|
-
a = temp;
|
|
280
|
-
}
|
|
281
|
-
return a;
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* 最小公倍数
|
|
285
|
-
* @param a 整数a
|
|
286
|
-
* @param b 整数b
|
|
287
|
-
* @returns 最小公倍数
|
|
288
|
-
*/
|
|
289
|
-
static lcm(a, b) {
|
|
290
|
-
return Math.abs(a * b) / MathUtils.gcd(a, b);
|
|
291
|
-
}
|
|
292
|
-
// 序列和级数
|
|
293
|
-
/**
|
|
294
|
-
* 斐波那契数列
|
|
295
|
-
* @param n 项数
|
|
296
|
-
* @returns 第n项斐波那契数
|
|
297
|
-
*/
|
|
298
|
-
static fibonacci(n) {
|
|
299
|
-
if (n <= 0)
|
|
300
|
-
return 0;
|
|
301
|
-
if (n === 1)
|
|
302
|
-
return 1;
|
|
303
|
-
let a = 0, b = 1;
|
|
304
|
-
for (let i = 2; i <= n; i++) {
|
|
305
|
-
const temp = a + b;
|
|
306
|
-
a = b;
|
|
307
|
-
b = temp;
|
|
308
|
-
}
|
|
309
|
-
return b;
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* 等差数列求和
|
|
313
|
-
* @param first 首项
|
|
314
|
-
* @param last 末项
|
|
315
|
-
* @param count 项数
|
|
316
|
-
* @returns 等差数列和
|
|
317
|
-
*/
|
|
318
|
-
static arithmeticSum(first, last, count) {
|
|
319
|
-
return (first + last) * count * 0.5;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* 等比数列求和
|
|
323
|
-
* @param first 首项
|
|
324
|
-
* @param ratio 公比
|
|
325
|
-
* @param count 项数
|
|
326
|
-
* @returns 等比数列和
|
|
327
|
-
*/
|
|
328
|
-
static geometricSum(first, ratio, count) {
|
|
329
|
-
if (Math.abs(ratio - 1) < MathUtils.EPSILON) {
|
|
330
|
-
return first * count;
|
|
331
|
-
}
|
|
332
|
-
return first * (1 - Math.pow(ratio, count)) / (1 - ratio);
|
|
333
|
-
}
|
|
334
|
-
// 曲线和插值
|
|
335
|
-
/**
|
|
336
|
-
* 贝塞尔二次曲线
|
|
337
|
-
* @param p0 控制点0
|
|
338
|
-
* @param p1 控制点1
|
|
339
|
-
* @param p2 控制点2
|
|
340
|
-
* @param t 参数(0到1)
|
|
341
|
-
* @returns 曲线上的点
|
|
342
|
-
*/
|
|
343
|
-
static quadraticBezier(p0, p1, p2, t) {
|
|
344
|
-
const u = 1 - t;
|
|
345
|
-
const tt = t * t;
|
|
346
|
-
const uu = u * u;
|
|
347
|
-
return new Vector2(uu * p0.x + 2 * u * t * p1.x + tt * p2.x, uu * p0.y + 2 * u * t * p1.y + tt * p2.y);
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* 贝塞尔三次曲线
|
|
351
|
-
* @param p0 控制点0
|
|
352
|
-
* @param p1 控制点1
|
|
353
|
-
* @param p2 控制点2
|
|
354
|
-
* @param p3 控制点3
|
|
355
|
-
* @param t 参数(0到1)
|
|
356
|
-
* @returns 曲线上的点
|
|
357
|
-
*/
|
|
358
|
-
static cubicBezier(p0, p1, p2, p3, t) {
|
|
359
|
-
const u = 1 - t;
|
|
360
|
-
const tt = t * t;
|
|
361
|
-
const uu = u * u;
|
|
362
|
-
const uuu = uu * u;
|
|
363
|
-
const ttt = tt * t;
|
|
364
|
-
return new Vector2(uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x, uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y);
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Catmull-Rom样条插值
|
|
368
|
-
* @param p0 控制点0
|
|
369
|
-
* @param p1 控制点1
|
|
370
|
-
* @param p2 控制点2
|
|
371
|
-
* @param p3 控制点3
|
|
372
|
-
* @param t 参数(0到1)
|
|
373
|
-
* @returns 插值结果点
|
|
374
|
-
*/
|
|
375
|
-
static catmullRom(p0, p1, p2, p3, t) {
|
|
376
|
-
const t2 = t * t;
|
|
377
|
-
const t3 = t2 * t;
|
|
378
|
-
const x = 0.5 * ((2 * p1.x) +
|
|
379
|
-
(-p0.x + p2.x) * t +
|
|
380
|
-
(2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 +
|
|
381
|
-
(-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3);
|
|
382
|
-
const y = 0.5 * ((2 * p1.y) +
|
|
383
|
-
(-p0.y + p2.y) * t +
|
|
384
|
-
(2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 +
|
|
385
|
-
(-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3);
|
|
386
|
-
return new Vector2(x, y);
|
|
387
|
-
}
|
|
388
|
-
// 噪声函数
|
|
389
|
-
/**
|
|
390
|
-
* 简单伪随机噪声(基于种子)
|
|
391
|
-
* @param x 输入X
|
|
392
|
-
* @param y 输入Y
|
|
393
|
-
* @param seed 种子
|
|
394
|
-
* @returns 噪声值(0到1)
|
|
395
|
-
*/
|
|
396
|
-
static noise(x, y = 0, seed = 0) {
|
|
397
|
-
const n = Math.sin(x * 12.9898 + y * 78.233 + seed * 37.719) * 43758.5453;
|
|
398
|
-
return n - Math.floor(n);
|
|
399
|
-
}
|
|
400
|
-
/**
|
|
401
|
-
* 平滑噪声
|
|
402
|
-
* @param x 输入X
|
|
403
|
-
* @param y 输入Y
|
|
404
|
-
* @param seed 种子
|
|
405
|
-
* @returns 平滑噪声值(0到1)
|
|
406
|
-
*/
|
|
407
|
-
static smoothNoise(x, y = 0, seed = 0) {
|
|
408
|
-
const intX = Math.floor(x);
|
|
409
|
-
const intY = Math.floor(y);
|
|
410
|
-
const fracX = x - intX;
|
|
411
|
-
const fracY = y - intY;
|
|
412
|
-
const a = MathUtils.noise(intX, intY, seed);
|
|
413
|
-
const b = MathUtils.noise(intX + 1, intY, seed);
|
|
414
|
-
const c = MathUtils.noise(intX, intY + 1, seed);
|
|
415
|
-
const d = MathUtils.noise(intX + 1, intY + 1, seed);
|
|
416
|
-
const i1 = MathUtils.lerp(a, b, fracX);
|
|
417
|
-
const i2 = MathUtils.lerp(c, d, fracX);
|
|
418
|
-
return MathUtils.lerp(i1, i2, fracY);
|
|
419
|
-
}
|
|
420
|
-
// 实用工具
|
|
421
|
-
/**
|
|
422
|
-
* 将数值转换为指定精度
|
|
423
|
-
* @param value 数值
|
|
424
|
-
* @param precision 精度(小数位数)
|
|
425
|
-
* @returns 转换后的数值
|
|
426
|
-
*/
|
|
427
|
-
static toPrecision(value, precision) {
|
|
428
|
-
const factor = Math.pow(10, precision);
|
|
429
|
-
return Math.round(value * factor) / factor;
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* 检查数值是否在指定范围内
|
|
433
|
-
* @param value 数值
|
|
434
|
-
* @param min 最小值
|
|
435
|
-
* @param max 最大值
|
|
436
|
-
* @returns 是否在范围内
|
|
437
|
-
*/
|
|
438
|
-
static inRange(value, min, max) {
|
|
439
|
-
return value >= min && value <= max;
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* 获取数组中的最小值
|
|
443
|
-
* @param values 数值数组
|
|
444
|
-
* @returns 最小值
|
|
445
|
-
*/
|
|
446
|
-
static min(...values) {
|
|
447
|
-
return Math.min(...values);
|
|
448
|
-
}
|
|
449
|
-
/**
|
|
450
|
-
* 获取数组中的最大值
|
|
451
|
-
* @param values 数值数组
|
|
452
|
-
* @returns 最大值
|
|
453
|
-
*/
|
|
454
|
-
static max(...values) {
|
|
455
|
-
return Math.max(...values);
|
|
456
|
-
}
|
|
457
|
-
/**
|
|
458
|
-
* 计算数组的平均值
|
|
459
|
-
* @param values 数值数组
|
|
460
|
-
* @returns 平均值
|
|
461
|
-
*/
|
|
462
|
-
static average(values) {
|
|
463
|
-
if (values.length === 0)
|
|
464
|
-
return 0;
|
|
465
|
-
return values.reduce((sum, val) => sum + val, 0) / values.length;
|
|
466
|
-
}
|
|
467
|
-
/**
|
|
468
|
-
* 计算数组的中位数
|
|
469
|
-
* @param values 数值数组
|
|
470
|
-
* @returns 中位数
|
|
471
|
-
*/
|
|
472
|
-
static median(values) {
|
|
473
|
-
if (values.length === 0)
|
|
474
|
-
return 0;
|
|
475
|
-
const sorted = [...values].sort((a, b) => a - b);
|
|
476
|
-
const middle = Math.floor(sorted.length / 2);
|
|
477
|
-
if (sorted.length % 2 === 0) {
|
|
478
|
-
return (sorted[middle - 1] + sorted[middle]) / 2;
|
|
479
|
-
}
|
|
480
|
-
return sorted[middle];
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
// 数学常量
|
|
484
|
-
/** 圆周率 */
|
|
485
|
-
MathUtils.PI = Math.PI;
|
|
486
|
-
/** 2π */
|
|
487
|
-
MathUtils.TWO_PI = Math.PI * 2;
|
|
488
|
-
/** π/2 */
|
|
489
|
-
MathUtils.HALF_PI = Math.PI * 0.5;
|
|
490
|
-
/** π/4 */
|
|
491
|
-
MathUtils.QUARTER_PI = Math.PI * 0.25;
|
|
492
|
-
/** 角度到弧度转换系数 */
|
|
493
|
-
MathUtils.DEG_TO_RAD = Math.PI / 180;
|
|
494
|
-
/** 弧度到角度转换系数 */
|
|
495
|
-
MathUtils.RAD_TO_DEG = 180 / Math.PI;
|
|
496
|
-
/** 黄金比例 */
|
|
497
|
-
MathUtils.GOLDEN_RATIO = (1 + Math.sqrt(5)) * 0.5;
|
|
498
|
-
/** 默认浮点数比较容差 */
|
|
499
|
-
MathUtils.EPSILON = Number.EPSILON;
|
|
500
|
-
//# sourceMappingURL=MathUtils.js.map
|
package/bin/MathUtils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MathUtils.js","sourceRoot":"","sources":["../src/MathUtils.ts"],"names":[],"mappings":"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"}
|