@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.
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +10420 -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/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"}
|