@esengine/ecs-framework-math 2.10.0 → 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.
Files changed (92) hide show
  1. package/dist/index.cjs +2 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.ts +10175 -0
  4. package/dist/index.mjs +2 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/dist/index.umd.js +2 -0
  7. package/dist/index.umd.js.map +1 -0
  8. package/package.json +21 -12
  9. package/bin/Animation/Easing.d.ts +0 -244
  10. package/bin/Animation/Easing.d.ts.map +0 -1
  11. package/bin/Animation/Easing.js +0 -407
  12. package/bin/Animation/Easing.js.map +0 -1
  13. package/bin/Animation/Interpolation.d.ts +0 -172
  14. package/bin/Animation/Interpolation.d.ts.map +0 -1
  15. package/bin/Animation/Interpolation.js +0 -327
  16. package/bin/Animation/Interpolation.js.map +0 -1
  17. package/bin/Animation/index.d.ts +0 -8
  18. package/bin/Animation/index.d.ts.map +0 -1
  19. package/bin/Animation/index.js +0 -8
  20. package/bin/Animation/index.js.map +0 -1
  21. package/bin/Circle.d.ts +0 -277
  22. package/bin/Circle.d.ts.map +0 -1
  23. package/bin/Circle.js +0 -496
  24. package/bin/Circle.js.map +0 -1
  25. package/bin/Collision/CollisionDetector.d.ts +0 -114
  26. package/bin/Collision/CollisionDetector.d.ts.map +0 -1
  27. package/bin/Collision/CollisionDetector.js +0 -353
  28. package/bin/Collision/CollisionDetector.js.map +0 -1
  29. package/bin/Collision/index.d.ts +0 -7
  30. package/bin/Collision/index.d.ts.map +0 -1
  31. package/bin/Collision/index.js +0 -7
  32. package/bin/Collision/index.js.map +0 -1
  33. package/bin/Color.d.ts +0 -277
  34. package/bin/Color.d.ts.map +0 -1
  35. package/bin/Color.js +0 -470
  36. package/bin/Color.js.map +0 -1
  37. package/bin/Fixed32.d.ts +0 -266
  38. package/bin/Fixed32.d.ts.map +0 -1
  39. package/bin/Fixed32.js +0 -381
  40. package/bin/Fixed32.js.map +0 -1
  41. package/bin/FixedMath.d.ts +0 -109
  42. package/bin/FixedMath.d.ts.map +0 -1
  43. package/bin/FixedMath.js +0 -264
  44. package/bin/FixedMath.js.map +0 -1
  45. package/bin/FixedVector2.d.ts +0 -293
  46. package/bin/FixedVector2.d.ts.map +0 -1
  47. package/bin/FixedVector2.js +0 -413
  48. package/bin/FixedVector2.js.map +0 -1
  49. package/bin/MathUtils.d.ts +0 -312
  50. package/bin/MathUtils.d.ts.map +0 -1
  51. package/bin/MathUtils.js +0 -500
  52. package/bin/MathUtils.js.map +0 -1
  53. package/bin/Matrix3.d.ts +0 -288
  54. package/bin/Matrix3.d.ts.map +0 -1
  55. package/bin/Matrix3.js +0 -542
  56. package/bin/Matrix3.js.map +0 -1
  57. package/bin/Rectangle.d.ts +0 -266
  58. package/bin/Rectangle.d.ts.map +0 -1
  59. package/bin/Rectangle.js +0 -437
  60. package/bin/Rectangle.js.map +0 -1
  61. package/bin/Vector2.d.ts +0 -333
  62. package/bin/Vector2.d.ts.map +0 -1
  63. package/bin/Vector2.js +0 -484
  64. package/bin/Vector2.js.map +0 -1
  65. package/bin/Vector3.d.ts +0 -257
  66. package/bin/Vector3.d.ts.map +0 -1
  67. package/bin/Vector3.js +0 -372
  68. package/bin/Vector3.js.map +0 -1
  69. package/bin/index.d.ts +0 -25
  70. package/bin/index.d.ts.map +0 -1
  71. package/bin/index.js +0 -32
  72. package/bin/index.js.map +0 -1
  73. package/bin/nodes/ColorNodes.d.ts +0 -70
  74. package/bin/nodes/ColorNodes.d.ts.map +0 -1
  75. package/bin/nodes/ColorNodes.js +0 -427
  76. package/bin/nodes/ColorNodes.js.map +0 -1
  77. package/bin/nodes/FixedNodes.d.ts +0 -98
  78. package/bin/nodes/FixedNodes.d.ts.map +0 -1
  79. package/bin/nodes/FixedNodes.js +0 -612
  80. package/bin/nodes/FixedNodes.js.map +0 -1
  81. package/bin/nodes/FixedVectorNodes.d.ts +0 -58
  82. package/bin/nodes/FixedVectorNodes.d.ts.map +0 -1
  83. package/bin/nodes/FixedVectorNodes.js +0 -330
  84. package/bin/nodes/FixedVectorNodes.js.map +0 -1
  85. package/bin/nodes/VectorNodes.d.ts +0 -62
  86. package/bin/nodes/VectorNodes.d.ts.map +0 -1
  87. package/bin/nodes/VectorNodes.js +0 -355
  88. package/bin/nodes/VectorNodes.js.map +0 -1
  89. package/bin/nodes/index.d.ts +0 -20
  90. package/bin/nodes/index.d.ts.map +0 -1
  91. package/bin/nodes/index.js +0 -27
  92. package/bin/nodes/index.js.map +0 -1
package/bin/Fixed32.d.ts DELETED
@@ -1,266 +0,0 @@
1
- /**
2
- * @zh Q16.16 定点数,用于确定性计算(帧同步)
3
- * @en Q16.16 fixed-point number for deterministic calculations (lockstep)
4
- *
5
- * @zh 使用 16 位整数部分 + 16 位小数部分,范围 ±32767.99998
6
- * @en Uses 16-bit integer + 16-bit fraction, range ±32767.99998
7
- *
8
- * @example
9
- * ```typescript
10
- * const a = Fixed32.from(3.14);
11
- * const b = Fixed32.from(2);
12
- * const c = a.mul(b); // 6.28
13
- * console.log(c.toNumber());
14
- * ```
15
- */
16
- export declare class Fixed32 {
17
- /**
18
- * @zh 内部原始值(32位整数)
19
- * @en Internal raw value (32-bit integer)
20
- */
21
- readonly raw: number;
22
- /**
23
- * @zh 小数位数
24
- * @en Fraction bits
25
- */
26
- static readonly FRACTION_BITS = 16;
27
- /**
28
- * @zh 缩放因子 (2^16 = 65536)
29
- * @en Scale factor (2^16 = 65536)
30
- */
31
- static readonly SCALE = 65536;
32
- /**
33
- * @zh 最大值 (约 32767.99998)
34
- * @en Maximum value (approximately 32767.99998)
35
- */
36
- static readonly MAX_VALUE = 2147483647;
37
- /**
38
- * @zh 最小值 (约 -32768)
39
- * @en Minimum value (approximately -32768)
40
- */
41
- static readonly MIN_VALUE = -2147483648;
42
- /**
43
- * @zh 精度 (1/65536 ≈ 0.0000153)
44
- * @en Precision (1/65536 ≈ 0.0000153)
45
- */
46
- static readonly EPSILON = 1;
47
- /** @zh 零 @en Zero */
48
- static readonly ZERO: Fixed32;
49
- /** @zh 一 @en One */
50
- static readonly ONE: Fixed32;
51
- /** @zh 负一 @en Negative one */
52
- static readonly NEG_ONE: Fixed32;
53
- /** @zh 二分之一 @en One half */
54
- static readonly HALF: Fixed32;
55
- /** @zh 圆周率 π @en Pi */
56
- static readonly PI: Fixed32;
57
- /** @zh 2π @en Two Pi */
58
- static readonly TWO_PI: Fixed32;
59
- /** @zh π/2 @en Pi divided by 2 */
60
- static readonly HALF_PI: Fixed32;
61
- /** @zh 弧度转角度系数 (180/π) @en Radians to degrees factor */
62
- static readonly RAD_TO_DEG: Fixed32;
63
- /** @zh 角度转弧度系数 (π/180) @en Degrees to radians factor */
64
- static readonly DEG_TO_RAD: Fixed32;
65
- /**
66
- * @zh 私有构造函数,使用静态方法创建实例
67
- * @en Private constructor, use static methods to create instances
68
- */
69
- private constructor();
70
- /**
71
- * @zh 从浮点数创建定点数
72
- * @en Create fixed-point from floating-point number
73
- * @param n - @zh 浮点数值 @en Floating-point value
74
- */
75
- static from(n: number): Fixed32;
76
- /**
77
- * @zh 从原始整数值创建定点数
78
- * @en Create fixed-point from raw integer value
79
- * @param raw - @zh 原始值 @en Raw value
80
- */
81
- static fromRaw(raw: number): Fixed32;
82
- /**
83
- * @zh 从整数创建定点数(无精度损失)
84
- * @en Create fixed-point from integer (no precision loss)
85
- * @param n - @zh 整数值 @en Integer value
86
- */
87
- static fromInt(n: number): Fixed32;
88
- /**
89
- * @zh 转换为浮点数
90
- * @en Convert to floating-point number
91
- */
92
- toNumber(): number;
93
- /**
94
- * @zh 获取原始整数值
95
- * @en Get raw integer value
96
- */
97
- toRaw(): number;
98
- /**
99
- * @zh 转换为整数(向下取整)
100
- * @en Convert to integer (floor)
101
- */
102
- toInt(): number;
103
- /**
104
- * @zh 转换为字符串
105
- * @en Convert to string
106
- */
107
- toString(): string;
108
- /**
109
- * @zh 加法
110
- * @en Addition
111
- */
112
- add(other: Fixed32): Fixed32;
113
- /**
114
- * @zh 减法
115
- * @en Subtraction
116
- */
117
- sub(other: Fixed32): Fixed32;
118
- /**
119
- * @zh 乘法(使用 64 位中间结果防止溢出)
120
- * @en Multiplication (uses 64-bit intermediate to prevent overflow)
121
- */
122
- mul(other: Fixed32): Fixed32;
123
- /**
124
- * @zh 除法
125
- * @en Division
126
- * @throws @zh 除数为零时抛出错误 @en Throws when dividing by zero
127
- */
128
- div(other: Fixed32): Fixed32;
129
- /**
130
- * @zh 取模运算
131
- * @en Modulo operation
132
- */
133
- mod(other: Fixed32): Fixed32;
134
- /**
135
- * @zh 取反
136
- * @en Negation
137
- */
138
- neg(): Fixed32;
139
- /**
140
- * @zh 绝对值
141
- * @en Absolute value
142
- */
143
- abs(): Fixed32;
144
- /**
145
- * @zh 等于
146
- * @en Equal to
147
- */
148
- eq(other: Fixed32): boolean;
149
- /**
150
- * @zh 不等于
151
- * @en Not equal to
152
- */
153
- ne(other: Fixed32): boolean;
154
- /**
155
- * @zh 小于
156
- * @en Less than
157
- */
158
- lt(other: Fixed32): boolean;
159
- /**
160
- * @zh 小于等于
161
- * @en Less than or equal to
162
- */
163
- le(other: Fixed32): boolean;
164
- /**
165
- * @zh 大于
166
- * @en Greater than
167
- */
168
- gt(other: Fixed32): boolean;
169
- /**
170
- * @zh 大于等于
171
- * @en Greater than or equal to
172
- */
173
- ge(other: Fixed32): boolean;
174
- /**
175
- * @zh 检查是否为零
176
- * @en Check if zero
177
- */
178
- isZero(): boolean;
179
- /**
180
- * @zh 检查是否为正数
181
- * @en Check if positive
182
- */
183
- isPositive(): boolean;
184
- /**
185
- * @zh 检查是否为负数
186
- * @en Check if negative
187
- */
188
- isNegative(): boolean;
189
- /**
190
- * @zh 平方根(牛顿迭代法,确定性)
191
- * @en Square root (Newton's method, deterministic)
192
- */
193
- static sqrt(x: Fixed32): Fixed32;
194
- /**
195
- * @zh 向下取整
196
- * @en Floor
197
- */
198
- static floor(x: Fixed32): Fixed32;
199
- /**
200
- * @zh 向上取整
201
- * @en Ceiling
202
- */
203
- static ceil(x: Fixed32): Fixed32;
204
- /**
205
- * @zh 四舍五入
206
- * @en Round
207
- */
208
- static round(x: Fixed32): Fixed32;
209
- /**
210
- * @zh 最小值
211
- * @en Minimum
212
- */
213
- static min(a: Fixed32, b: Fixed32): Fixed32;
214
- /**
215
- * @zh 最大值
216
- * @en Maximum
217
- */
218
- static max(a: Fixed32, b: Fixed32): Fixed32;
219
- /**
220
- * @zh 限制范围
221
- * @en Clamp to range
222
- */
223
- static clamp(x: Fixed32, min: Fixed32, max: Fixed32): Fixed32;
224
- /**
225
- * @zh 线性插值
226
- * @en Linear interpolation
227
- * @param a - @zh 起始值 @en Start value
228
- * @param b - @zh 结束值 @en End value
229
- * @param t - @zh 插值参数 (0-1) @en Interpolation parameter (0-1)
230
- */
231
- static lerp(a: Fixed32, b: Fixed32, t: Fixed32): Fixed32;
232
- /**
233
- * @zh 符号函数
234
- * @en Sign function
235
- * @returns @zh -1, 0, 或 1 @en -1, 0, or 1
236
- */
237
- static sign(x: Fixed32): Fixed32;
238
- /**
239
- * @zh 加法(静态)
240
- * @en Addition (static)
241
- */
242
- static add(a: Fixed32, b: Fixed32): Fixed32;
243
- /**
244
- * @zh 减法(静态)
245
- * @en Subtraction (static)
246
- */
247
- static sub(a: Fixed32, b: Fixed32): Fixed32;
248
- /**
249
- * @zh 乘法(静态)
250
- * @en Multiplication (static)
251
- */
252
- static mul(a: Fixed32, b: Fixed32): Fixed32;
253
- /**
254
- * @zh 除法(静态)
255
- * @en Division (static)
256
- */
257
- static div(a: Fixed32, b: Fixed32): Fixed32;
258
- }
259
- /**
260
- * @zh Fixed32 数据接口,用于序列化
261
- * @en Fixed32 data interface for serialization
262
- */
263
- export interface IFixed32 {
264
- raw: number;
265
- }
266
- //# sourceMappingURL=Fixed32.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Fixed32.d.ts","sourceRoot":"","sources":["../src/Fixed32.ts"],"names":[],"mappings":"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"}
package/bin/Fixed32.js DELETED
@@ -1,381 +0,0 @@
1
- /**
2
- * @zh Q16.16 定点数,用于确定性计算(帧同步)
3
- * @en Q16.16 fixed-point number for deterministic calculations (lockstep)
4
- *
5
- * @zh 使用 16 位整数部分 + 16 位小数部分,范围 ±32767.99998
6
- * @en Uses 16-bit integer + 16-bit fraction, range ±32767.99998
7
- *
8
- * @example
9
- * ```typescript
10
- * const a = Fixed32.from(3.14);
11
- * const b = Fixed32.from(2);
12
- * const c = a.mul(b); // 6.28
13
- * console.log(c.toNumber());
14
- * ```
15
- */
16
- export class Fixed32 {
17
- // ==================== 构造 ====================
18
- /**
19
- * @zh 私有构造函数,使用静态方法创建实例
20
- * @en Private constructor, use static methods to create instances
21
- */
22
- constructor(raw) {
23
- // 确保是 32 位有符号整数
24
- this.raw = raw | 0;
25
- }
26
- /**
27
- * @zh 从浮点数创建定点数
28
- * @en Create fixed-point from floating-point number
29
- * @param n - @zh 浮点数值 @en Floating-point value
30
- */
31
- static from(n) {
32
- return new Fixed32(Math.round(n * Fixed32.SCALE));
33
- }
34
- /**
35
- * @zh 从原始整数值创建定点数
36
- * @en Create fixed-point from raw integer value
37
- * @param raw - @zh 原始值 @en Raw value
38
- */
39
- static fromRaw(raw) {
40
- return new Fixed32(raw);
41
- }
42
- /**
43
- * @zh 从整数创建定点数(无精度损失)
44
- * @en Create fixed-point from integer (no precision loss)
45
- * @param n - @zh 整数值 @en Integer value
46
- */
47
- static fromInt(n) {
48
- return new Fixed32((n | 0) << Fixed32.FRACTION_BITS);
49
- }
50
- // ==================== 转换 ====================
51
- /**
52
- * @zh 转换为浮点数
53
- * @en Convert to floating-point number
54
- */
55
- toNumber() {
56
- return this.raw / Fixed32.SCALE;
57
- }
58
- /**
59
- * @zh 获取原始整数值
60
- * @en Get raw integer value
61
- */
62
- toRaw() {
63
- return this.raw;
64
- }
65
- /**
66
- * @zh 转换为整数(向下取整)
67
- * @en Convert to integer (floor)
68
- */
69
- toInt() {
70
- return this.raw >> Fixed32.FRACTION_BITS;
71
- }
72
- /**
73
- * @zh 转换为字符串
74
- * @en Convert to string
75
- */
76
- toString() {
77
- return `Fixed32(${this.toNumber().toFixed(5)})`;
78
- }
79
- // ==================== 基础运算 ====================
80
- /**
81
- * @zh 加法
82
- * @en Addition
83
- */
84
- add(other) {
85
- return new Fixed32(this.raw + other.raw);
86
- }
87
- /**
88
- * @zh 减法
89
- * @en Subtraction
90
- */
91
- sub(other) {
92
- return new Fixed32(this.raw - other.raw);
93
- }
94
- /**
95
- * @zh 乘法(使用 64 位中间结果防止溢出)
96
- * @en Multiplication (uses 64-bit intermediate to prevent overflow)
97
- */
98
- mul(other) {
99
- // 拆分为高低 16 位进行乘法,避免溢出
100
- const a = this.raw;
101
- const b = other.raw;
102
- // 使用 BigInt 确保精度(JS 数字在大数时会丢失精度)
103
- // 或者使用拆分法
104
- const aLow = a & 0xFFFF;
105
- const aHigh = a >> 16;
106
- const bLow = b & 0xFFFF;
107
- const bHigh = b >> 16;
108
- // (aHigh * 2^16 + aLow) * (bHigh * 2^16 + bLow) / 2^16
109
- // = aHigh * bHigh * 2^16 + aHigh * bLow + aLow * bHigh + aLow * bLow / 2^16
110
- const lowLow = (aLow * bLow) >>> 16;
111
- const lowHigh = aLow * bHigh;
112
- const highLow = aHigh * bLow;
113
- const highHigh = aHigh * bHigh;
114
- const result = highHigh * Fixed32.SCALE + lowHigh + highLow + lowLow;
115
- return new Fixed32(result | 0);
116
- }
117
- /**
118
- * @zh 除法
119
- * @en Division
120
- * @throws @zh 除数为零时抛出错误 @en Throws when dividing by zero
121
- */
122
- div(other) {
123
- if (other.raw === 0) {
124
- throw new Error('Fixed32: Division by zero');
125
- }
126
- // 先左移再除,保持精度
127
- const result = ((this.raw * Fixed32.SCALE) / other.raw) | 0;
128
- return new Fixed32(result);
129
- }
130
- /**
131
- * @zh 取模运算
132
- * @en Modulo operation
133
- */
134
- mod(other) {
135
- return new Fixed32(this.raw % other.raw);
136
- }
137
- /**
138
- * @zh 取反
139
- * @en Negation
140
- */
141
- neg() {
142
- return new Fixed32(-this.raw);
143
- }
144
- /**
145
- * @zh 绝对值
146
- * @en Absolute value
147
- */
148
- abs() {
149
- return this.raw >= 0 ? this : new Fixed32(-this.raw);
150
- }
151
- // ==================== 比较运算 ====================
152
- /**
153
- * @zh 等于
154
- * @en Equal to
155
- */
156
- eq(other) {
157
- return this.raw === other.raw;
158
- }
159
- /**
160
- * @zh 不等于
161
- * @en Not equal to
162
- */
163
- ne(other) {
164
- return this.raw !== other.raw;
165
- }
166
- /**
167
- * @zh 小于
168
- * @en Less than
169
- */
170
- lt(other) {
171
- return this.raw < other.raw;
172
- }
173
- /**
174
- * @zh 小于等于
175
- * @en Less than or equal to
176
- */
177
- le(other) {
178
- return this.raw <= other.raw;
179
- }
180
- /**
181
- * @zh 大于
182
- * @en Greater than
183
- */
184
- gt(other) {
185
- return this.raw > other.raw;
186
- }
187
- /**
188
- * @zh 大于等于
189
- * @en Greater than or equal to
190
- */
191
- ge(other) {
192
- return this.raw >= other.raw;
193
- }
194
- /**
195
- * @zh 检查是否为零
196
- * @en Check if zero
197
- */
198
- isZero() {
199
- return this.raw === 0;
200
- }
201
- /**
202
- * @zh 检查是否为正数
203
- * @en Check if positive
204
- */
205
- isPositive() {
206
- return this.raw > 0;
207
- }
208
- /**
209
- * @zh 检查是否为负数
210
- * @en Check if negative
211
- */
212
- isNegative() {
213
- return this.raw < 0;
214
- }
215
- // ==================== 数学函数 ====================
216
- /**
217
- * @zh 平方根(牛顿迭代法,确定性)
218
- * @en Square root (Newton's method, deterministic)
219
- */
220
- static sqrt(x) {
221
- if (x.raw <= 0)
222
- return Fixed32.ZERO;
223
- // 牛顿迭代法
224
- let guess = x.raw;
225
- let prev = 0;
226
- // 固定迭代次数确保确定性
227
- for (let i = 0; i < 16; i++) {
228
- prev = guess;
229
- guess = ((guess + ((x.raw * Fixed32.SCALE) / guess) | 0) >> 1) | 0;
230
- if (guess === prev)
231
- break;
232
- }
233
- return new Fixed32(guess);
234
- }
235
- /**
236
- * @zh 向下取整
237
- * @en Floor
238
- */
239
- static floor(x) {
240
- return new Fixed32(x.raw & ~(Fixed32.SCALE - 1));
241
- }
242
- /**
243
- * @zh 向上取整
244
- * @en Ceiling
245
- */
246
- static ceil(x) {
247
- const frac = x.raw & (Fixed32.SCALE - 1);
248
- if (frac === 0)
249
- return x;
250
- return new Fixed32((x.raw & ~(Fixed32.SCALE - 1)) + Fixed32.SCALE);
251
- }
252
- /**
253
- * @zh 四舍五入
254
- * @en Round
255
- */
256
- static round(x) {
257
- return new Fixed32((x.raw + (Fixed32.SCALE >> 1)) & ~(Fixed32.SCALE - 1));
258
- }
259
- /**
260
- * @zh 最小值
261
- * @en Minimum
262
- */
263
- static min(a, b) {
264
- return a.raw < b.raw ? a : b;
265
- }
266
- /**
267
- * @zh 最大值
268
- * @en Maximum
269
- */
270
- static max(a, b) {
271
- return a.raw > b.raw ? a : b;
272
- }
273
- /**
274
- * @zh 限制范围
275
- * @en Clamp to range
276
- */
277
- static clamp(x, min, max) {
278
- if (x.raw < min.raw)
279
- return min;
280
- if (x.raw > max.raw)
281
- return max;
282
- return x;
283
- }
284
- /**
285
- * @zh 线性插值
286
- * @en Linear interpolation
287
- * @param a - @zh 起始值 @en Start value
288
- * @param b - @zh 结束值 @en End value
289
- * @param t - @zh 插值参数 (0-1) @en Interpolation parameter (0-1)
290
- */
291
- static lerp(a, b, t) {
292
- // a + (b - a) * t
293
- return a.add(b.sub(a).mul(t));
294
- }
295
- /**
296
- * @zh 符号函数
297
- * @en Sign function
298
- * @returns @zh -1, 0, 或 1 @en -1, 0, or 1
299
- */
300
- static sign(x) {
301
- if (x.raw > 0)
302
- return Fixed32.ONE;
303
- if (x.raw < 0)
304
- return Fixed32.NEG_ONE;
305
- return Fixed32.ZERO;
306
- }
307
- // ==================== 静态运算(便捷方法) ====================
308
- /**
309
- * @zh 加法(静态)
310
- * @en Addition (static)
311
- */
312
- static add(a, b) {
313
- return a.add(b);
314
- }
315
- /**
316
- * @zh 减法(静态)
317
- * @en Subtraction (static)
318
- */
319
- static sub(a, b) {
320
- return a.sub(b);
321
- }
322
- /**
323
- * @zh 乘法(静态)
324
- * @en Multiplication (static)
325
- */
326
- static mul(a, b) {
327
- return a.mul(b);
328
- }
329
- /**
330
- * @zh 除法(静态)
331
- * @en Division (static)
332
- */
333
- static div(a, b) {
334
- return a.div(b);
335
- }
336
- }
337
- /**
338
- * @zh 小数位数
339
- * @en Fraction bits
340
- */
341
- Fixed32.FRACTION_BITS = 16;
342
- /**
343
- * @zh 缩放因子 (2^16 = 65536)
344
- * @en Scale factor (2^16 = 65536)
345
- */
346
- Fixed32.SCALE = 65536;
347
- /**
348
- * @zh 最大值 (约 32767.99998)
349
- * @en Maximum value (approximately 32767.99998)
350
- */
351
- Fixed32.MAX_VALUE = 0x7FFFFFFF;
352
- /**
353
- * @zh 最小值 (约 -32768)
354
- * @en Minimum value (approximately -32768)
355
- */
356
- Fixed32.MIN_VALUE = -0x80000000;
357
- /**
358
- * @zh 精度 (1/65536 ≈ 0.0000153)
359
- * @en Precision (1/65536 ≈ 0.0000153)
360
- */
361
- Fixed32.EPSILON = 1;
362
- // ==================== 常量 ====================
363
- /** @zh 零 @en Zero */
364
- Fixed32.ZERO = new Fixed32(0);
365
- /** @zh 一 @en One */
366
- Fixed32.ONE = new Fixed32(Fixed32.SCALE);
367
- /** @zh 负一 @en Negative one */
368
- Fixed32.NEG_ONE = new Fixed32(-Fixed32.SCALE);
369
- /** @zh 二分之一 @en One half */
370
- Fixed32.HALF = new Fixed32(Fixed32.SCALE >> 1);
371
- /** @zh 圆周率 π @en Pi */
372
- Fixed32.PI = new Fixed32(205887); // π * 65536
373
- /** @zh 2π @en Two Pi */
374
- Fixed32.TWO_PI = new Fixed32(411775); // 2π * 65536
375
- /** @zh π/2 @en Pi divided by 2 */
376
- Fixed32.HALF_PI = new Fixed32(102944); // π/2 * 65536
377
- /** @zh 弧度转角度系数 (180/π) @en Radians to degrees factor */
378
- Fixed32.RAD_TO_DEG = new Fixed32(3754936); // (180/π) * 65536
379
- /** @zh 角度转弧度系数 (π/180) @en Degrees to radians factor */
380
- Fixed32.DEG_TO_RAD = new Fixed32(1144); // (π/180) * 65536
381
- //# sourceMappingURL=Fixed32.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Fixed32.js","sourceRoot":"","sources":["../src/Fixed32.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,OAAO;IAkEhB,+CAA+C;IAE/C;;;OAGG;IACH,YAAoB,GAAW;QAC3B,gBAAgB;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,CAAS;QACjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,GAAW;QACtB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,CAAS;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,+CAA+C;IAE/C;;;OAGG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,QAAQ;QACJ,OAAO,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,CAAC;IAED,iDAAiD;IAEjD;;;OAGG;IACH,GAAG,CAAC,KAAc;QACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,KAAc;QACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,KAAc;QACd,sBAAsB;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;QAEpB,iCAAiC;QACjC,UAAU;QACV,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAEtB,uDAAuD;QACvD,4EAA4E;QAC5E,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;QAC7B,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;QAE/B,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QACrE,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,KAAc;QACd,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QACD,aAAa;QACb,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5D,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,KAAc;QACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,GAAG;QACC,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,GAAG;QACC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,iDAAiD;IAEjD;;;OAGG;IACH,EAAE,CAAC,KAAc;QACb,OAAO,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,EAAE,CAAC,KAAc;QACb,OAAO,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,EAAE,CAAC,KAAc;QACb,OAAO,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,EAAE,CAAC,KAAc;QACb,OAAO,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,EAAE,CAAC,KAAc;QACb,OAAO,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,EAAE,CAAC,KAAc;QACb,OAAO,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,iDAAiD;IAEjD;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,CAAU;QAClB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC;QAEpC,QAAQ;QACR,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,cAAc;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,IAAI,GAAG,KAAK,CAAC;YACb,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,KAAK,KAAK,IAAI;gBAAE,MAAM;QAC9B,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAU;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,CAAU;QAClB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAU;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,CAAU;QAC7B,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,CAAU;QAC7B,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,CAAU,EAAE,GAAY,EAAE,GAAY;QAC/C,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;YAAE,OAAO,GAAG,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;YAAE,OAAO,GAAG,CAAC;QAChC,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,CAAU,EAAE,CAAU,EAAE,CAAU;QAC1C,kBAAkB;QAClB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,CAAU;QAClB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC;QAClC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC;QACtC,OAAO,OAAO,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,uDAAuD;IAEvD;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,CAAU;QAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,CAAU;QAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,CAAU;QAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,CAAC,CAAU,EAAE,CAAU;QAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;;AAlaD;;;GAGG;AACa,qBAAa,GAAG,EAAE,CAAC;AAEnC;;;GAGG;AACa,aAAK,GAAG,KAAK,CAAC;AAE9B;;;GAGG;AACa,iBAAS,GAAG,UAAU,CAAC;AAEvC;;;GAGG;AACa,iBAAS,GAAG,CAAC,UAAU,CAAC;AAExC;;;GAGG;AACa,eAAO,GAAG,CAAC,CAAC;AAE5B,+CAA+C;AAE/C,qBAAqB;AACL,YAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,oBAAoB;AACJ,WAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEjD,8BAA8B;AACd,eAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEtD,4BAA4B;AACZ,YAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAEvD,uBAAuB;AACP,UAAE,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;AAEtD,wBAAwB;AACR,cAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;AAE3D,kCAAkC;AAClB,eAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;AAE7D,wDAAwD;AACxC,kBAAU,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;AAErE,wDAAwD;AACxC,kBAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB"}