@esengine/ecs-framework-math 1.0.1

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 (45) hide show
  1. package/bin/Animation/Easing.d.ts +244 -0
  2. package/bin/Animation/Easing.d.ts.map +1 -0
  3. package/bin/Animation/Easing.js +407 -0
  4. package/bin/Animation/Easing.js.map +1 -0
  5. package/bin/Animation/Interpolation.d.ts +172 -0
  6. package/bin/Animation/Interpolation.d.ts.map +1 -0
  7. package/bin/Animation/Interpolation.js +327 -0
  8. package/bin/Animation/Interpolation.js.map +1 -0
  9. package/bin/Animation/index.d.ts +8 -0
  10. package/bin/Animation/index.d.ts.map +1 -0
  11. package/bin/Animation/index.js +8 -0
  12. package/bin/Animation/index.js.map +1 -0
  13. package/bin/Circle.d.ts +277 -0
  14. package/bin/Circle.d.ts.map +1 -0
  15. package/bin/Circle.js +496 -0
  16. package/bin/Circle.js.map +1 -0
  17. package/bin/Collision/CollisionDetector.d.ts +114 -0
  18. package/bin/Collision/CollisionDetector.d.ts.map +1 -0
  19. package/bin/Collision/CollisionDetector.js +353 -0
  20. package/bin/Collision/CollisionDetector.js.map +1 -0
  21. package/bin/Collision/index.d.ts +7 -0
  22. package/bin/Collision/index.d.ts.map +1 -0
  23. package/bin/Collision/index.js +7 -0
  24. package/bin/Collision/index.js.map +1 -0
  25. package/bin/MathUtils.d.ts +312 -0
  26. package/bin/MathUtils.d.ts.map +1 -0
  27. package/bin/MathUtils.js +500 -0
  28. package/bin/MathUtils.js.map +1 -0
  29. package/bin/Matrix3.d.ts +269 -0
  30. package/bin/Matrix3.d.ts.map +1 -0
  31. package/bin/Matrix3.js +514 -0
  32. package/bin/Matrix3.js.map +1 -0
  33. package/bin/Rectangle.d.ts +266 -0
  34. package/bin/Rectangle.d.ts.map +1 -0
  35. package/bin/Rectangle.js +437 -0
  36. package/bin/Rectangle.js.map +1 -0
  37. package/bin/Vector2.d.ts +317 -0
  38. package/bin/Vector2.d.ts.map +1 -0
  39. package/bin/Vector2.js +474 -0
  40. package/bin/Vector2.js.map +1 -0
  41. package/bin/index.d.ts +17 -0
  42. package/bin/index.d.ts.map +1 -0
  43. package/bin/index.js +21 -0
  44. package/bin/index.js.map +1 -0
  45. package/package.json +66 -0
@@ -0,0 +1,353 @@
1
+ import { Vector2 } from '../Vector2';
2
+ /**
3
+ * 碰撞检测器
4
+ *
5
+ * 提供各种几何体之间的碰撞检测功能
6
+ */
7
+ export class CollisionDetector {
8
+ // 点与几何体碰撞检测
9
+ /**
10
+ * 点与圆形碰撞检测
11
+ * @param point 点
12
+ * @param circle 圆形
13
+ * @returns 碰撞信息
14
+ */
15
+ static pointCircle(point, circle) {
16
+ const distance = Vector2.distance(point, circle.center);
17
+ const collided = distance <= circle.radius;
18
+ if (!collided) {
19
+ return { collided: false };
20
+ }
21
+ const normal = distance > 0
22
+ ? Vector2.subtract(point, circle.center).normalize()
23
+ : new Vector2(1, 0); // 默认法线
24
+ return {
25
+ collided: true,
26
+ normal,
27
+ penetration: circle.radius - distance,
28
+ contactPoint: point.clone()
29
+ };
30
+ }
31
+ /**
32
+ * 点与矩形碰撞检测
33
+ * @param point 点
34
+ * @param rect 矩形
35
+ * @returns 碰撞信息
36
+ */
37
+ static pointRect(point, rect) {
38
+ const collided = rect.containsPoint(point);
39
+ if (!collided) {
40
+ return { collided: false };
41
+ }
42
+ // 计算到各边的距离
43
+ const distLeft = point.x - rect.left;
44
+ const distRight = rect.right - point.x;
45
+ const distTop = point.y - rect.top;
46
+ const distBottom = rect.bottom - point.y;
47
+ // 找到最小距离确定法线方向
48
+ const minDist = Math.min(distLeft, distRight, distTop, distBottom);
49
+ let normal;
50
+ let penetration = minDist;
51
+ if (minDist === distLeft) {
52
+ normal = new Vector2(-1, 0);
53
+ }
54
+ else if (minDist === distRight) {
55
+ normal = new Vector2(1, 0);
56
+ }
57
+ else if (minDist === distTop) {
58
+ normal = new Vector2(0, -1);
59
+ }
60
+ else {
61
+ normal = new Vector2(0, 1);
62
+ }
63
+ return {
64
+ collided: true,
65
+ normal,
66
+ penetration,
67
+ contactPoint: point.clone()
68
+ };
69
+ }
70
+ // 圆形碰撞检测
71
+ /**
72
+ * 圆形与圆形碰撞检测
73
+ * @param circle1 第一个圆形
74
+ * @param circle2 第二个圆形
75
+ * @returns 碰撞信息
76
+ */
77
+ static circleCircle(circle1, circle2) {
78
+ const distance = Vector2.distance(circle1.center, circle2.center);
79
+ const radiusSum = circle1.radius + circle2.radius;
80
+ const collided = distance <= radiusSum;
81
+ if (!collided) {
82
+ return { collided: false };
83
+ }
84
+ const normal = distance > 0
85
+ ? Vector2.subtract(circle2.center, circle1.center).normalize()
86
+ : new Vector2(1, 0); // 默认法线
87
+ const penetration = radiusSum - distance;
88
+ const contactPoint = circle1.center.clone().add(normal.clone().multiply(circle1.radius - penetration * 0.5));
89
+ return {
90
+ collided: true,
91
+ normal,
92
+ penetration,
93
+ contactPoint
94
+ };
95
+ }
96
+ /**
97
+ * 圆形与矩形碰撞检测
98
+ * @param circle 圆形
99
+ * @param rect 矩形
100
+ * @returns 碰撞信息
101
+ */
102
+ static circleRect(circle, rect) {
103
+ // 找到矩形上离圆心最近的点
104
+ const closestPoint = rect.closestPointTo(circle.center);
105
+ // 检查是否碰撞
106
+ const distance = Vector2.distance(circle.center, closestPoint);
107
+ const collided = distance <= circle.radius;
108
+ if (!collided) {
109
+ return { collided: false };
110
+ }
111
+ // 计算法线和穿透深度
112
+ const normal = distance > 0
113
+ ? Vector2.subtract(closestPoint, circle.center).normalize()
114
+ : new Vector2(0, -1); // 默认法线(圆心在矩形内部时)
115
+ const penetration = circle.radius - distance;
116
+ return {
117
+ collided: true,
118
+ normal,
119
+ penetration,
120
+ contactPoint: closestPoint
121
+ };
122
+ }
123
+ // 矩形碰撞检测
124
+ /**
125
+ * 矩形与矩形碰撞检测(AABB)
126
+ * @param rect1 第一个矩形
127
+ * @param rect2 第二个矩形
128
+ * @returns 碰撞信息
129
+ */
130
+ static rectRect(rect1, rect2) {
131
+ const collided = rect1.intersects(rect2);
132
+ if (!collided) {
133
+ return { collided: false };
134
+ }
135
+ // 计算重叠区域
136
+ const overlapLeft = Math.max(rect1.left, rect2.left);
137
+ const overlapRight = Math.min(rect1.right, rect2.right);
138
+ const overlapTop = Math.max(rect1.top, rect2.top);
139
+ const overlapBottom = Math.min(rect1.bottom, rect2.bottom);
140
+ const overlapWidth = overlapRight - overlapLeft;
141
+ const overlapHeight = overlapBottom - overlapTop;
142
+ // 确定分离方向(最小重叠轴)
143
+ let normal;
144
+ let penetration;
145
+ if (overlapWidth < overlapHeight) {
146
+ // 水平分离
147
+ penetration = overlapWidth;
148
+ if (rect1.centerX < rect2.centerX) {
149
+ normal = new Vector2(-1, 0);
150
+ }
151
+ else {
152
+ normal = new Vector2(1, 0);
153
+ }
154
+ }
155
+ else {
156
+ // 垂直分离
157
+ penetration = overlapHeight;
158
+ if (rect1.centerY < rect2.centerY) {
159
+ normal = new Vector2(0, -1);
160
+ }
161
+ else {
162
+ normal = new Vector2(0, 1);
163
+ }
164
+ }
165
+ const contactPoint = new Vector2((overlapLeft + overlapRight) * 0.5, (overlapTop + overlapBottom) * 0.5);
166
+ return {
167
+ collided: true,
168
+ normal,
169
+ penetration,
170
+ contactPoint
171
+ };
172
+ }
173
+ // 射线投射
174
+ /**
175
+ * 射线与圆形相交检测
176
+ * @param rayOrigin 射线起点
177
+ * @param rayDirection 射线方向(单位向量)
178
+ * @param circle 圆形
179
+ * @param maxDistance 最大检测距离,默认无限
180
+ * @returns 碰撞信息,包含距离信息
181
+ */
182
+ static rayCircle(rayOrigin, rayDirection, circle, maxDistance = Infinity) {
183
+ const oc = Vector2.subtract(rayOrigin, circle.center);
184
+ const a = rayDirection.lengthSquared;
185
+ const b = 2 * Vector2.dot(oc, rayDirection);
186
+ const c = oc.lengthSquared - circle.radius * circle.radius;
187
+ const discriminant = b * b - 4 * a * c;
188
+ if (discriminant < 0) {
189
+ return { collided: false };
190
+ }
191
+ const sqrt = Math.sqrt(discriminant);
192
+ const t1 = (-b - sqrt) / (2 * a);
193
+ const t2 = (-b + sqrt) / (2 * a);
194
+ // 选择最近的正距离
195
+ let t = t1 >= 0 ? t1 : t2;
196
+ if (t < 0 || t > maxDistance) {
197
+ return { collided: false };
198
+ }
199
+ const contactPoint = rayOrigin.clone().add(rayDirection.clone().multiply(t));
200
+ const normal = Vector2.subtract(contactPoint, circle.center).normalize();
201
+ return {
202
+ collided: true,
203
+ normal,
204
+ contactPoint,
205
+ distance: t,
206
+ penetration: 0 // 射线检测不计算穿透
207
+ };
208
+ }
209
+ /**
210
+ * 射线与矩形相交检测
211
+ * @param rayOrigin 射线起点
212
+ * @param rayDirection 射线方向(单位向量)
213
+ * @param rect 矩形
214
+ * @param maxDistance 最大检测距离,默认无限
215
+ * @returns 碰撞信息,包含距离信息
216
+ */
217
+ static rayRect(rayOrigin, rayDirection, rect, maxDistance = Infinity) {
218
+ // 避免除零
219
+ const invDirX = rayDirection.x !== 0 ? 1 / rayDirection.x : 1e10;
220
+ const invDirY = rayDirection.y !== 0 ? 1 / rayDirection.y : 1e10;
221
+ // 计算与各边的交点参数
222
+ const t1 = (rect.left - rayOrigin.x) * invDirX;
223
+ const t2 = (rect.right - rayOrigin.x) * invDirX;
224
+ const t3 = (rect.top - rayOrigin.y) * invDirY;
225
+ const t4 = (rect.bottom - rayOrigin.y) * invDirY;
226
+ const tmin = Math.max(Math.min(t1, t2), Math.min(t3, t4));
227
+ const tmax = Math.min(Math.max(t1, t2), Math.max(t3, t4));
228
+ // 没有交点或交点在射线反方向
229
+ if (tmax < 0 || tmin > tmax || tmin > maxDistance) {
230
+ return { collided: false };
231
+ }
232
+ const t = tmin >= 0 ? tmin : tmax;
233
+ const contactPoint = rayOrigin.clone().add(rayDirection.clone().multiply(t));
234
+ // 确定法线方向
235
+ let normal;
236
+ const epsilon = 1e-6;
237
+ if (Math.abs(contactPoint.x - rect.left) < epsilon) {
238
+ normal = new Vector2(-1, 0);
239
+ }
240
+ else if (Math.abs(contactPoint.x - rect.right) < epsilon) {
241
+ normal = new Vector2(1, 0);
242
+ }
243
+ else if (Math.abs(contactPoint.y - rect.top) < epsilon) {
244
+ normal = new Vector2(0, -1);
245
+ }
246
+ else {
247
+ normal = new Vector2(0, 1);
248
+ }
249
+ return {
250
+ collided: true,
251
+ normal,
252
+ contactPoint,
253
+ distance: t,
254
+ penetration: 0 // 射线检测不计算穿透
255
+ };
256
+ }
257
+ // 线段相交检测
258
+ /**
259
+ * 线段与线段相交检测
260
+ * @param p1 第一条线段起点
261
+ * @param p2 第一条线段终点
262
+ * @param p3 第二条线段起点
263
+ * @param p4 第二条线段终点
264
+ * @returns 碰撞信息
265
+ */
266
+ static lineSegmentLineSegment(p1, p2, p3, p4) {
267
+ const d1 = Vector2.subtract(p2, p1);
268
+ const d2 = Vector2.subtract(p4, p3);
269
+ const d3 = Vector2.subtract(p3, p1);
270
+ const cross = Vector2.cross(d1, d2);
271
+ if (Math.abs(cross) < Number.EPSILON) {
272
+ // 平行或共线
273
+ return { collided: false };
274
+ }
275
+ const t1 = Vector2.cross(d3, d2) / cross;
276
+ const t2 = Vector2.cross(d3, d1) / cross;
277
+ if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {
278
+ const contactPoint = p1.clone().add(d1.clone().multiply(t1));
279
+ // 计算法线(垂直于第一条线段)
280
+ const normal = d1.perpendicular().normalize();
281
+ return {
282
+ collided: true,
283
+ normal,
284
+ contactPoint,
285
+ penetration: 0 // 线段相交不计算穿透
286
+ };
287
+ }
288
+ return { collided: false };
289
+ }
290
+ /**
291
+ * 线段与圆形相交检测
292
+ * @param lineStart 线段起点
293
+ * @param lineEnd 线段终点
294
+ * @param circle 圆形
295
+ * @returns 碰撞信息
296
+ */
297
+ static lineSegmentCircle(lineStart, lineEnd, circle) {
298
+ const d = Vector2.subtract(lineEnd, lineStart);
299
+ const f = Vector2.subtract(lineStart, circle.center);
300
+ const a = Vector2.dot(d, d);
301
+ const b = 2 * Vector2.dot(f, d);
302
+ const c = Vector2.dot(f, f) - circle.radius * circle.radius;
303
+ const discriminant = b * b - 4 * a * c;
304
+ if (discriminant < 0) {
305
+ return { collided: false };
306
+ }
307
+ const sqrt = Math.sqrt(discriminant);
308
+ const t1 = (-b - sqrt) / (2 * a);
309
+ const t2 = (-b + sqrt) / (2 * a);
310
+ // 检查交点是否在线段上
311
+ const validT = [];
312
+ if (t1 >= 0 && t1 <= 1)
313
+ validT.push(t1);
314
+ if (t2 >= 0 && t2 <= 1)
315
+ validT.push(t2);
316
+ if (validT.length === 0) {
317
+ return { collided: false };
318
+ }
319
+ // 使用最近的交点
320
+ const t = validT[0];
321
+ const contactPoint = lineStart.clone().add(d.clone().multiply(t));
322
+ const normal = Vector2.subtract(contactPoint, circle.center).normalize();
323
+ return {
324
+ collided: true,
325
+ normal,
326
+ contactPoint,
327
+ penetration: 0 // 线段相交不计算穿透
328
+ };
329
+ }
330
+ // 快速排斥测试
331
+ /**
332
+ * AABB包围盒快速排斥测试
333
+ * @param bounds1 第一个包围盒
334
+ * @param bounds2 第二个包围盒
335
+ * @returns 是否可能相交
336
+ */
337
+ static aabbTest(bounds1, bounds2) {
338
+ return bounds1.intersects(bounds2);
339
+ }
340
+ /**
341
+ * 圆形包围盒快速排斥测试
342
+ * @param center1 第一个圆心
343
+ * @param radius1 第一个半径
344
+ * @param center2 第二个圆心
345
+ * @param radius2 第二个半径
346
+ * @returns 是否可能相交
347
+ */
348
+ static circleTest(center1, radius1, center2, radius2) {
349
+ const distance = Vector2.distance(center1, center2);
350
+ return distance <= radius1 + radius2;
351
+ }
352
+ }
353
+ //# sourceMappingURL=CollisionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollisionDetector.js","sourceRoot":"","sources":["../../src/Collision/CollisionDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 碰撞检测模块
3
+ *
4
+ * 提供各种几何体间的碰撞检测功能
5
+ */
6
+ export { CollisionDetector, type CollisionInfo } from './CollisionDetector';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Collision/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 碰撞检测模块
3
+ *
4
+ * 提供各种几何体间的碰撞检测功能
5
+ */
6
+ export { CollisionDetector } from './CollisionDetector';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Collision/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,MAAM,qBAAqB,CAAC"}