@esengine/ecs-framework-math 2.10.1 → 2.11.0

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 +10420 -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 +20 -11
  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/Circle.js DELETED
@@ -1,496 +0,0 @@
1
- import { Vector2 } from './Vector2';
2
- import { Rectangle } from './Rectangle';
3
- /**
4
- * 2D圆形类
5
- *
6
- * 表示一个圆形,提供圆形相关的几何运算功能:
7
- * - 圆形创建和属性获取
8
- * - 包含检测(点、圆形)
9
- * - 相交检测和计算
10
- * - 变换和操作
11
- */
12
- export class Circle {
13
- /**
14
- * 创建圆形
15
- * @param x 圆心X坐标,默认为0
16
- * @param y 圆心Y坐标,默认为0
17
- * @param radius 半径,默认为0
18
- */
19
- constructor(x = 0, y = 0, radius = 0) {
20
- this.x = x;
21
- this.y = y;
22
- this.radius = radius;
23
- }
24
- // 属性获取
25
- /** 获取圆心坐标 */
26
- get center() {
27
- return new Vector2(this.x, this.y);
28
- }
29
- /** 设置圆心坐标 */
30
- set center(value) {
31
- this.x = value.x;
32
- this.y = value.y;
33
- }
34
- /** 获取直径 */
35
- get diameter() {
36
- return this.radius * 2;
37
- }
38
- /** 设置直径 */
39
- set diameter(value) {
40
- this.radius = value * 0.5;
41
- }
42
- /** 获取面积 */
43
- get area() {
44
- return Math.PI * this.radius * this.radius;
45
- }
46
- /** 获取周长 */
47
- get circumference() {
48
- return 2 * Math.PI * this.radius;
49
- }
50
- /** 获取包围矩形 */
51
- get bounds() {
52
- return new Rectangle(this.x - this.radius, this.y - this.radius, this.diameter, this.diameter);
53
- }
54
- /** 检查是否为空圆形 */
55
- get isEmpty() {
56
- return this.radius <= 0;
57
- }
58
- // 基础操作
59
- /**
60
- * 设置圆形属性
61
- * @param x 圆心X坐标
62
- * @param y 圆心Y坐标
63
- * @param radius 半径
64
- * @returns 当前圆形实例(链式调用)
65
- */
66
- set(x, y, radius) {
67
- this.x = x;
68
- this.y = y;
69
- this.radius = radius;
70
- return this;
71
- }
72
- /**
73
- * 复制另一个圆形的值
74
- * @param other 源圆形
75
- * @returns 当前圆形实例(链式调用)
76
- */
77
- copy(other) {
78
- this.x = other.x;
79
- this.y = other.y;
80
- this.radius = other.radius;
81
- return this;
82
- }
83
- /**
84
- * 克隆当前圆形
85
- * @returns 新的圆形实例
86
- */
87
- clone() {
88
- return new Circle(this.x, this.y, this.radius);
89
- }
90
- /**
91
- * 设置圆心位置
92
- * @param x 新的X坐标
93
- * @param y 新的Y坐标
94
- * @returns 当前圆形实例(链式调用)
95
- */
96
- setPosition(x, y) {
97
- this.x = x;
98
- this.y = y;
99
- return this;
100
- }
101
- /**
102
- * 设置圆心位置(使用向量)
103
- * @param center 新的圆心位置
104
- * @returns 当前圆形实例(链式调用)
105
- */
106
- setCenter(center) {
107
- this.x = center.x;
108
- this.y = center.y;
109
- return this;
110
- }
111
- /**
112
- * 设置半径
113
- * @param radius 新的半径
114
- * @returns 当前圆形实例(链式调用)
115
- */
116
- setRadius(radius) {
117
- this.radius = radius;
118
- return this;
119
- }
120
- // 变换操作
121
- /**
122
- * 平移圆形
123
- * @param dx X方向偏移
124
- * @param dy Y方向偏移
125
- * @returns 当前圆形实例(链式调用)
126
- */
127
- translate(dx, dy) {
128
- this.x += dx;
129
- this.y += dy;
130
- return this;
131
- }
132
- /**
133
- * 平移圆形(使用向量)
134
- * @param offset 偏移向量
135
- * @returns 当前圆形实例(链式调用)
136
- */
137
- translateBy(offset) {
138
- this.x += offset.x;
139
- this.y += offset.y;
140
- return this;
141
- }
142
- /**
143
- * 缩放圆形
144
- * @param scale 缩放因子
145
- * @returns 当前圆形实例(链式调用)
146
- */
147
- scale(scale) {
148
- this.radius *= scale;
149
- return this;
150
- }
151
- /**
152
- * 扩展圆形
153
- * @param amount 扩展量(正值扩大半径,负值缩小半径)
154
- * @returns 当前圆形实例(链式调用)
155
- */
156
- inflate(amount) {
157
- this.radius += amount;
158
- return this;
159
- }
160
- // 包含检测
161
- /**
162
- * 检查是否包含指定点
163
- * @param point 点
164
- * @returns 是否包含
165
- */
166
- containsPoint(point) {
167
- const dx = point.x - this.x;
168
- const dy = point.y - this.y;
169
- return dx * dx + dy * dy <= this.radius * this.radius;
170
- }
171
- /**
172
- * 检查是否包含指定坐标
173
- * @param x X坐标
174
- * @param y Y坐标
175
- * @returns 是否包含
176
- */
177
- contains(x, y) {
178
- const dx = x - this.x;
179
- const dy = y - this.y;
180
- return dx * dx + dy * dy <= this.radius * this.radius;
181
- }
182
- /**
183
- * 检查是否完全包含另一个圆形
184
- * @param other 另一个圆形
185
- * @returns 是否完全包含
186
- */
187
- containsCircle(other) {
188
- const distance = this.distanceToCircle(other);
189
- return distance + other.radius <= this.radius;
190
- }
191
- /**
192
- * 检查点是否在圆的边界上
193
- * @param point 点
194
- * @param epsilon 容差,默认为Number.EPSILON
195
- * @returns 是否在边界上
196
- */
197
- pointOnBoundary(point, epsilon = Number.EPSILON) {
198
- const distance = this.distanceToPoint(point);
199
- return Math.abs(distance - this.radius) < epsilon;
200
- }
201
- // 相交检测
202
- /**
203
- * 检查是否与另一个圆形相交
204
- * @param other 另一个圆形
205
- * @returns 是否相交
206
- */
207
- intersects(other) {
208
- const dx = this.x - other.x;
209
- const dy = this.y - other.y;
210
- const distanceSquared = dx * dx + dy * dy;
211
- const radiusSum = this.radius + other.radius;
212
- return distanceSquared <= radiusSum * radiusSum;
213
- }
214
- /**
215
- * 检查是否与矩形相交
216
- * @param rect 矩形
217
- * @returns 是否相交
218
- */
219
- intersectsRect(rect) {
220
- // 找到矩形上离圆心最近的点
221
- const closestX = Math.max(rect.x, Math.min(this.x, rect.right));
222
- const closestY = Math.max(rect.y, Math.min(this.y, rect.bottom));
223
- // 计算圆心到最近点的距离
224
- const dx = this.x - closestX;
225
- const dy = this.y - closestY;
226
- return dx * dx + dy * dy <= this.radius * this.radius;
227
- }
228
- /**
229
- * 计算与另一个圆形的相交面积
230
- * @param other 另一个圆形
231
- * @returns 相交面积
232
- */
233
- intersectionArea(other) {
234
- const d = this.distanceToCircle(other);
235
- // 不相交
236
- if (d >= this.radius + other.radius) {
237
- return 0;
238
- }
239
- // 一个圆完全包含另一个圆
240
- if (d <= Math.abs(this.radius - other.radius)) {
241
- const smallerRadius = Math.min(this.radius, other.radius);
242
- return Math.PI * smallerRadius * smallerRadius;
243
- }
244
- // 部分相交
245
- const r1 = this.radius;
246
- const r2 = other.radius;
247
- const part1 = r1 * r1 * Math.acos((d * d + r1 * r1 - r2 * r2) / (2 * d * r1));
248
- const part2 = r2 * r2 * Math.acos((d * d + r2 * r2 - r1 * r1) / (2 * d * r2));
249
- const part3 = 0.5 * Math.sqrt((-d + r1 + r2) * (d + r1 - r2) * (d - r1 + r2) * (d + r1 + r2));
250
- return part1 + part2 - part3;
251
- }
252
- // 距离计算
253
- /**
254
- * 计算圆心到点的距离
255
- * @param point 点
256
- * @returns 距离
257
- */
258
- distanceToPoint(point) {
259
- const dx = point.x - this.x;
260
- const dy = point.y - this.y;
261
- return Math.sqrt(dx * dx + dy * dy);
262
- }
263
- /**
264
- * 计算圆形边界到点的最短距离
265
- * @param point 点
266
- * @returns 最短距离(点在圆内时为负值)
267
- */
268
- distanceToPointFromBoundary(point) {
269
- return this.distanceToPoint(point) - this.radius;
270
- }
271
- /**
272
- * 计算两个圆心之间的距离
273
- * @param other 另一个圆形
274
- * @returns 圆心距离
275
- */
276
- distanceToCircle(other) {
277
- const dx = this.x - other.x;
278
- const dy = this.y - other.y;
279
- return Math.sqrt(dx * dx + dy * dy);
280
- }
281
- /**
282
- * 计算两个圆形边界之间的最短距离
283
- * @param other 另一个圆形
284
- * @returns 最短距离(相交时为负值)
285
- */
286
- distanceToCircleFromBoundary(other) {
287
- return this.distanceToCircle(other) - this.radius - other.radius;
288
- }
289
- /**
290
- * 计算圆形到矩形的最短距离
291
- * @param rect 矩形
292
- * @returns 最短距离
293
- */
294
- distanceToRect(rect) {
295
- return Math.max(0, rect.distanceToPoint(this.center) - this.radius);
296
- }
297
- /**
298
- * 获取圆形上距离指定点最近的点
299
- * @param point 指定点
300
- * @returns 最近点
301
- */
302
- closestPointTo(point) {
303
- const direction = Vector2.subtract(point, this.center);
304
- if (direction.isZero) {
305
- // 点在圆心,返回圆上任意点
306
- return new Vector2(this.x + this.radius, this.y);
307
- }
308
- return this.center.clone().add(direction.normalized().multiply(this.radius));
309
- }
310
- /**
311
- * 获取圆形上距离指定点最远的点
312
- * @param point 指定点
313
- * @returns 最远点
314
- */
315
- farthestPointFrom(point) {
316
- const direction = Vector2.subtract(point, this.center);
317
- if (direction.isZero) {
318
- // 点在圆心,返回圆上任意点
319
- return new Vector2(this.x - this.radius, this.y);
320
- }
321
- return this.center.clone().subtract(direction.normalized().multiply(this.radius));
322
- }
323
- // 几何运算
324
- /**
325
- * 获取指定角度上的圆周点
326
- * @param angle 角度(弧度)
327
- * @returns 圆周点
328
- */
329
- getPointAtAngle(angle) {
330
- return new Vector2(this.x + this.radius * Math.cos(angle), this.y + this.radius * Math.sin(angle));
331
- }
332
- /**
333
- * 获取点相对于圆心的角度
334
- * @param point 点
335
- * @returns 角度(弧度)
336
- */
337
- getAngleToPoint(point) {
338
- return Math.atan2(point.y - this.y, point.x - this.x);
339
- }
340
- /**
341
- * 获取圆形与直线的交点
342
- * @param lineStart 直线起点
343
- * @param lineEnd 直线终点
344
- * @returns 交点数组(0-2个点)
345
- */
346
- getLineIntersections(lineStart, lineEnd) {
347
- const dx = lineEnd.x - lineStart.x;
348
- const dy = lineEnd.y - lineStart.y;
349
- const fx = lineStart.x - this.x;
350
- const fy = lineStart.y - this.y;
351
- const a = dx * dx + dy * dy;
352
- const b = 2 * (fx * dx + fy * dy);
353
- const c = fx * fx + fy * fy - this.radius * this.radius;
354
- const discriminant = b * b - 4 * a * c;
355
- if (discriminant < 0) {
356
- return []; // 无交点
357
- }
358
- if (discriminant === 0) {
359
- // 一个交点(切线)
360
- const t = -b / (2 * a);
361
- return [new Vector2(lineStart.x + t * dx, lineStart.y + t * dy)];
362
- }
363
- // 两个交点
364
- const sqrt = Math.sqrt(discriminant);
365
- const t1 = (-b - sqrt) / (2 * a);
366
- const t2 = (-b + sqrt) / (2 * a);
367
- return [
368
- new Vector2(lineStart.x + t1 * dx, lineStart.y + t1 * dy),
369
- new Vector2(lineStart.x + t2 * dx, lineStart.y + t2 * dy)
370
- ];
371
- }
372
- // 比较操作
373
- /**
374
- * 检查两个圆形是否相等
375
- * @param other 另一个圆形
376
- * @param epsilon 容差,默认为Number.EPSILON
377
- * @returns 是否相等
378
- */
379
- equals(other, epsilon = Number.EPSILON) {
380
- return Math.abs(this.x - other.x) < epsilon &&
381
- Math.abs(this.y - other.y) < epsilon &&
382
- Math.abs(this.radius - other.radius) < epsilon;
383
- }
384
- /**
385
- * 检查两个圆形是否完全相等
386
- * @param other 另一个圆形
387
- * @returns 是否完全相等
388
- */
389
- exactEquals(other) {
390
- return this.x === other.x && this.y === other.y && this.radius === other.radius;
391
- }
392
- // 静态方法
393
- /**
394
- * 从直径创建圆形
395
- * @param x 圆心X坐标
396
- * @param y 圆心Y坐标
397
- * @param diameter 直径
398
- * @returns 新的圆形实例
399
- */
400
- static fromDiameter(x, y, diameter) {
401
- return new Circle(x, y, diameter * 0.5);
402
- }
403
- /**
404
- * 从三个点创建外接圆
405
- * @param p1 第一个点
406
- * @param p2 第二个点
407
- * @param p3 第三个点
408
- * @returns 外接圆,如果三点共线返回null
409
- */
410
- static fromThreePoints(p1, p2, p3) {
411
- const ax = p1.x;
412
- const ay = p1.y;
413
- const bx = p2.x;
414
- const by = p2.y;
415
- const cx = p3.x;
416
- const cy = p3.y;
417
- const d = 2 * (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by));
418
- if (Math.abs(d) < Number.EPSILON) {
419
- return null; // 三点共线
420
- }
421
- const ux = ((ax * ax + ay * ay) * (by - cy) + (bx * bx + by * by) * (cy - ay) + (cx * cx + cy * cy) * (ay - by)) / d;
422
- const uy = ((ax * ax + ay * ay) * (cx - bx) + (bx * bx + by * by) * (ax - cx) + (cx * cx + cy * cy) * (bx - ax)) / d;
423
- const radius = Math.sqrt((ax - ux) * (ax - ux) + (ay - uy) * (ay - uy));
424
- return new Circle(ux, uy, radius);
425
- }
426
- /**
427
- * 从点数组创建最小包围圆
428
- * @param points 点数组
429
- * @returns 最小包围圆
430
- */
431
- static fromPointArray(points) {
432
- if (points.length === 0) {
433
- return Circle.EMPTY.clone();
434
- }
435
- if (points.length === 1) {
436
- return new Circle(points[0].x, points[0].y, 0);
437
- }
438
- // 使用Welzl算法的简化版本
439
- // 这里使用更简单的方法:找到包围所有点的圆
440
- let minX = points[0].x, minY = points[0].y;
441
- let maxX = points[0].x, maxY = points[0].y;
442
- for (const point of points) {
443
- minX = Math.min(minX, point.x);
444
- minY = Math.min(minY, point.y);
445
- maxX = Math.max(maxX, point.x);
446
- maxY = Math.max(maxY, point.y);
447
- }
448
- const centerX = (minX + maxX) * 0.5;
449
- const centerY = (minY + maxY) * 0.5;
450
- const center = new Vector2(centerX, centerY);
451
- let maxDistance = 0;
452
- for (const point of points) {
453
- const distance = Vector2.distance(center, point);
454
- maxDistance = Math.max(maxDistance, distance);
455
- }
456
- return new Circle(centerX, centerY, maxDistance);
457
- }
458
- /**
459
- * 线性插值两个圆形
460
- * @param a 起始圆形
461
- * @param b 目标圆形
462
- * @param t 插值参数(0到1)
463
- * @returns 新的插值结果圆形
464
- */
465
- static lerp(a, b, t) {
466
- return new Circle(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.radius + (b.radius - a.radius) * t);
467
- }
468
- // 字符串转换
469
- /**
470
- * 转换为字符串
471
- * @returns 字符串表示
472
- */
473
- toString() {
474
- return `Circle(${this.x.toFixed(2)}, ${this.y.toFixed(2)}, r=${this.radius.toFixed(2)})`;
475
- }
476
- /**
477
- * 转换为数组
478
- * @returns [x, y, radius] 数组
479
- */
480
- toArray() {
481
- return [this.x, this.y, this.radius];
482
- }
483
- /**
484
- * 转换为普通对象
485
- * @returns {x, y, radius} 对象
486
- */
487
- toObject() {
488
- return { x: this.x, y: this.y, radius: this.radius };
489
- }
490
- }
491
- // 静态常量
492
- /** 空圆形 */
493
- Circle.EMPTY = new Circle(0, 0, 0);
494
- /** 单位圆 */
495
- Circle.UNIT = new Circle(0, 0, 1);
496
- //# sourceMappingURL=Circle.js.map
package/bin/Circle.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Circle.js","sourceRoot":"","sources":["../src/Circle.ts"],"names":[],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- import { Vector2 } from '../Vector2';
2
- import { Rectangle } from '../Rectangle';
3
- import { Circle } from '../Circle';
4
- /**
5
- * 碰撞信息接口
6
- */
7
- export interface CollisionInfo {
8
- /** 是否发生碰撞 */
9
- collided: boolean;
10
- /** 碰撞法线(指向第二个对象) */
11
- normal?: Vector2;
12
- /** 穿透深度 */
13
- penetration?: number;
14
- /** 碰撞点 */
15
- contactPoint?: Vector2;
16
- }
17
- /**
18
- * 碰撞检测器
19
- *
20
- * 提供各种几何体之间的碰撞检测功能
21
- */
22
- export declare class CollisionDetector {
23
- /**
24
- * 点与圆形碰撞检测
25
- * @param point 点
26
- * @param circle 圆形
27
- * @returns 碰撞信息
28
- */
29
- static pointCircle(point: Vector2, circle: Circle): CollisionInfo;
30
- /**
31
- * 点与矩形碰撞检测
32
- * @param point 点
33
- * @param rect 矩形
34
- * @returns 碰撞信息
35
- */
36
- static pointRect(point: Vector2, rect: Rectangle): CollisionInfo;
37
- /**
38
- * 圆形与圆形碰撞检测
39
- * @param circle1 第一个圆形
40
- * @param circle2 第二个圆形
41
- * @returns 碰撞信息
42
- */
43
- static circleCircle(circle1: Circle, circle2: Circle): CollisionInfo;
44
- /**
45
- * 圆形与矩形碰撞检测
46
- * @param circle 圆形
47
- * @param rect 矩形
48
- * @returns 碰撞信息
49
- */
50
- static circleRect(circle: Circle, rect: Rectangle): CollisionInfo;
51
- /**
52
- * 矩形与矩形碰撞检测(AABB)
53
- * @param rect1 第一个矩形
54
- * @param rect2 第二个矩形
55
- * @returns 碰撞信息
56
- */
57
- static rectRect(rect1: Rectangle, rect2: Rectangle): CollisionInfo;
58
- /**
59
- * 射线与圆形相交检测
60
- * @param rayOrigin 射线起点
61
- * @param rayDirection 射线方向(单位向量)
62
- * @param circle 圆形
63
- * @param maxDistance 最大检测距离,默认无限
64
- * @returns 碰撞信息,包含距离信息
65
- */
66
- static rayCircle(rayOrigin: Vector2, rayDirection: Vector2, circle: Circle, maxDistance?: number): CollisionInfo & {
67
- distance?: number;
68
- };
69
- /**
70
- * 射线与矩形相交检测
71
- * @param rayOrigin 射线起点
72
- * @param rayDirection 射线方向(单位向量)
73
- * @param rect 矩形
74
- * @param maxDistance 最大检测距离,默认无限
75
- * @returns 碰撞信息,包含距离信息
76
- */
77
- static rayRect(rayOrigin: Vector2, rayDirection: Vector2, rect: Rectangle, maxDistance?: number): CollisionInfo & {
78
- distance?: number;
79
- };
80
- /**
81
- * 线段与线段相交检测
82
- * @param p1 第一条线段起点
83
- * @param p2 第一条线段终点
84
- * @param p3 第二条线段起点
85
- * @param p4 第二条线段终点
86
- * @returns 碰撞信息
87
- */
88
- static lineSegmentLineSegment(p1: Vector2, p2: Vector2, p3: Vector2, p4: Vector2): CollisionInfo;
89
- /**
90
- * 线段与圆形相交检测
91
- * @param lineStart 线段起点
92
- * @param lineEnd 线段终点
93
- * @param circle 圆形
94
- * @returns 碰撞信息
95
- */
96
- static lineSegmentCircle(lineStart: Vector2, lineEnd: Vector2, circle: Circle): CollisionInfo;
97
- /**
98
- * AABB包围盒快速排斥测试
99
- * @param bounds1 第一个包围盒
100
- * @param bounds2 第二个包围盒
101
- * @returns 是否可能相交
102
- */
103
- static aabbTest(bounds1: Rectangle, bounds2: Rectangle): boolean;
104
- /**
105
- * 圆形包围盒快速排斥测试
106
- * @param center1 第一个圆心
107
- * @param radius1 第一个半径
108
- * @param center2 第二个圆心
109
- * @param radius2 第二个半径
110
- * @returns 是否可能相交
111
- */
112
- static circleTest(center1: Vector2, radius1: number, center2: Vector2, radius2: number): boolean;
113
- }
114
- //# sourceMappingURL=CollisionDetector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollisionDetector.d.ts","sourceRoot":"","sources":["../../src/Collision/CollisionDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU;IACV,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAI1B;;;;;KAKC;IACD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa;IAoBjE;;;;;KAKC;IACD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,aAAa;IAsChE;;;;;KAKC;IACD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IA0BpE;;;;;KAKC;IACD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,aAAa;IA6BjE;;;;;KAKC;IACD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,aAAa;IAqDlE;;;;;;;KAOC;IACD,MAAM,CAAC,SAAS,CACZ,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,MAAiB,GAC/B,aAAa,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAoCxC;;;;;;;KAOC;IACD,MAAM,CAAC,OAAO,CACV,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,SAAS,EACf,WAAW,GAAE,MAAiB,GAC/B,aAAa,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAgDxC;;;;;;;KAOC;IACD,MAAM,CAAC,sBAAsB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa;IAgChG;;;;;;KAMC;IACD,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa;IA0C7F;;;;;KAKC;IACD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO;IAIhE;;;;;;;KAOC;IACD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;CAInG"}