@ccpc/math 0.1.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/LICENSE +21 -0
- package/README.md +21 -0
- package/dist/constants/geom_type.d.ts +13 -0
- package/dist/constants/geom_type.d.ts.map +1 -0
- package/dist/constants/geom_type.js +17 -0
- package/dist/constants/math_const.d.ts +9 -0
- package/dist/constants/math_const.d.ts.map +1 -0
- package/dist/constants/math_const.js +12 -0
- package/dist/core/box2.d.ts +71 -0
- package/dist/core/box2.d.ts.map +1 -0
- package/dist/core/box2.js +243 -0
- package/dist/core/coord2d.d.ts +62 -0
- package/dist/core/coord2d.d.ts.map +1 -0
- package/dist/core/coord2d.js +155 -0
- package/dist/core/geom_base.d.ts +19 -0
- package/dist/core/geom_base.d.ts.map +1 -0
- package/dist/core/geom_base.js +18 -0
- package/dist/core/mat3.d.ts +101 -0
- package/dist/core/mat3.d.ts.map +1 -0
- package/dist/core/mat3.js +290 -0
- package/dist/core/vec2.d.ts +138 -0
- package/dist/core/vec2.d.ts.map +1 -0
- package/dist/core/vec2.js +297 -0
- package/dist/curves/arc2.d.ts +49 -0
- package/dist/curves/arc2.d.ts.map +1 -0
- package/dist/curves/arc2.js +265 -0
- package/dist/curves/bspline2.d.ts +150 -0
- package/dist/curves/bspline2.d.ts.map +1 -0
- package/dist/curves/bspline2.js +793 -0
- package/dist/curves/circle2.d.ts +42 -0
- package/dist/curves/circle2.d.ts.map +1 -0
- package/dist/curves/circle2.js +135 -0
- package/dist/curves/circle_curve2.d.ts +38 -0
- package/dist/curves/circle_curve2.d.ts.map +1 -0
- package/dist/curves/circle_curve2.js +112 -0
- package/dist/curves/curve2.d.ts +214 -0
- package/dist/curves/curve2.d.ts.map +1 -0
- package/dist/curves/curve2.js +238 -0
- package/dist/curves/ellipse2.d.ts +42 -0
- package/dist/curves/ellipse2.d.ts.map +1 -0
- package/dist/curves/ellipse2.js +125 -0
- package/dist/curves/ellipse_arc2.d.ts +49 -0
- package/dist/curves/ellipse_arc2.d.ts.map +1 -0
- package/dist/curves/ellipse_arc2.js +184 -0
- package/dist/curves/ellipse_curve2.d.ts +56 -0
- package/dist/curves/ellipse_curve2.d.ts.map +1 -0
- package/dist/curves/ellipse_curve2.js +262 -0
- package/dist/curves/interval.d.ts +112 -0
- package/dist/curves/interval.d.ts.map +1 -0
- package/dist/curves/interval.js +200 -0
- package/dist/curves/line2.d.ts +64 -0
- package/dist/curves/line2.d.ts.map +1 -0
- package/dist/curves/line2.js +193 -0
- package/dist/curves/period_interval.d.ts +129 -0
- package/dist/curves/period_interval.d.ts.map +1 -0
- package/dist/curves/period_interval.js +240 -0
- package/dist/discretize/discretize_defaults.d.ts +12 -0
- package/dist/discretize/discretize_defaults.d.ts.map +1 -0
- package/dist/discretize/discretize_defaults.js +12 -0
- package/dist/discretize/discretize_engine.d.ts +33 -0
- package/dist/discretize/discretize_engine.d.ts.map +1 -0
- package/dist/discretize/discretize_engine.js +347 -0
- package/dist/discretize/discretize_errors.d.ts +15 -0
- package/dist/discretize/discretize_errors.d.ts.map +1 -0
- package/dist/discretize/discretize_errors.js +30 -0
- package/dist/discretize/discretize_options.d.ts +18 -0
- package/dist/discretize/discretize_options.d.ts.map +1 -0
- package/dist/discretize/discretize_options.js +19 -0
- package/dist/discretize/discretize_types.d.ts +36 -0
- package/dist/discretize/discretize_types.d.ts.map +1 -0
- package/dist/discretize/discretize_types.js +1 -0
- package/dist/discretize/internal/curve_guards.d.ts +35 -0
- package/dist/discretize/internal/curve_guards.d.ts.map +1 -0
- package/dist/discretize/internal/curve_guards.js +62 -0
- package/dist/discretize/internal/postprocess.d.ts +5 -0
- package/dist/discretize/internal/postprocess.d.ts.map +1 -0
- package/dist/discretize/internal/postprocess.js +109 -0
- package/dist/discretize/internal/sampling_utils.d.ts +8 -0
- package/dist/discretize/internal/sampling_utils.d.ts.map +1 -0
- package/dist/discretize/internal/sampling_utils.js +36 -0
- package/dist/discretize/register_builtin_strategies.d.ts +3 -0
- package/dist/discretize/register_builtin_strategies.d.ts.map +1 -0
- package/dist/discretize/register_builtin_strategies.js +10 -0
- package/dist/discretize/strategies/bspline_strategy.d.ts +4 -0
- package/dist/discretize/strategies/bspline_strategy.d.ts.map +1 -0
- package/dist/discretize/strategies/bspline_strategy.js +115 -0
- package/dist/discretize/strategies/circle_strategy.d.ts +7 -0
- package/dist/discretize/strategies/circle_strategy.d.ts.map +1 -0
- package/dist/discretize/strategies/circle_strategy.js +55 -0
- package/dist/discretize/strategies/ellipse_strategy.d.ts +7 -0
- package/dist/discretize/strategies/ellipse_strategy.d.ts.map +1 -0
- package/dist/discretize/strategies/ellipse_strategy.js +86 -0
- package/dist/discretize/strategies/line_strategy.d.ts +4 -0
- package/dist/discretize/strategies/line_strategy.d.ts.map +1 -0
- package/dist/discretize/strategies/line_strategy.js +40 -0
- package/dist/discretize/strategy_registry.d.ts +9 -0
- package/dist/discretize/strategy_registry.d.ts.map +1 -0
- package/dist/discretize/strategy_registry.js +34 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/intersections/analytic_x_algorithm.d.ts +10 -0
- package/dist/intersections/analytic_x_algorithm.d.ts.map +1 -0
- package/dist/intersections/analytic_x_algorithm.js +83 -0
- package/dist/intersections/curve_x_engine.d.ts +9 -0
- package/dist/intersections/curve_x_engine.d.ts.map +1 -0
- package/dist/intersections/curve_x_engine.js +27 -0
- package/dist/intersections/index.d.ts +5 -0
- package/dist/intersections/index.d.ts.map +1 -0
- package/dist/intersections/index.js +11 -0
- package/dist/intersections/internal/certification.d.ts +34 -0
- package/dist/intersections/internal/certification.d.ts.map +1 -0
- package/dist/intersections/internal/certification.js +238 -0
- package/dist/intersections/internal/interval_clipping.d.ts +29 -0
- package/dist/intersections/internal/interval_clipping.d.ts.map +1 -0
- package/dist/intersections/internal/interval_clipping.js +123 -0
- package/dist/intersections/internal/kind.d.ts +4 -0
- package/dist/intersections/internal/kind.d.ts.map +1 -0
- package/dist/intersections/internal/kind.js +16 -0
- package/dist/intersections/internal/pair.d.ts +9 -0
- package/dist/intersections/internal/pair.d.ts.map +1 -0
- package/dist/intersections/internal/pair.js +14 -0
- package/dist/intersections/internal/result.d.ts +20 -0
- package/dist/intersections/internal/result.d.ts.map +1 -0
- package/dist/intersections/internal/result.js +125 -0
- package/dist/intersections/internal/sampling.d.ts +15 -0
- package/dist/intersections/internal/sampling.d.ts.map +1 -0
- package/dist/intersections/internal/sampling.js +131 -0
- package/dist/intersections/internal/segment.d.ts +32 -0
- package/dist/intersections/internal/segment.d.ts.map +1 -0
- package/dist/intersections/internal/segment.js +137 -0
- package/dist/intersections/internal/tolerance.d.ts +10 -0
- package/dist/intersections/internal/tolerance.d.ts.map +1 -0
- package/dist/intersections/internal/tolerance.js +20 -0
- package/dist/intersections/intersector.d.ts +6 -0
- package/dist/intersections/intersector.d.ts.map +1 -0
- package/dist/intersections/intersector.js +1 -0
- package/dist/intersections/numeric_x_algorithm.d.ts +10 -0
- package/dist/intersections/numeric_x_algorithm.d.ts.map +1 -0
- package/dist/intersections/numeric_x_algorithm.js +73 -0
- package/dist/intersections/solvers/bspline_self_solver.d.ts +7 -0
- package/dist/intersections/solvers/bspline_self_solver.d.ts.map +1 -0
- package/dist/intersections/solvers/bspline_self_solver.js +308 -0
- package/dist/intersections/solvers/line_line_pair_solver.d.ts +7 -0
- package/dist/intersections/solvers/line_line_pair_solver.d.ts.map +1 -0
- package/dist/intersections/solvers/line_line_pair_solver.js +35 -0
- package/dist/intersections/solvers/pair_solvers.d.ts +94 -0
- package/dist/intersections/solvers/pair_solvers.d.ts.map +1 -0
- package/dist/intersections/solvers/pair_solvers.js +1078 -0
- package/dist/intersections/solvers/polyline_pair_intersector.d.ts +51 -0
- package/dist/intersections/solvers/polyline_pair_intersector.d.ts.map +1 -0
- package/dist/intersections/solvers/polyline_pair_intersector.js +731 -0
- package/dist/intersections/types.d.ts +11 -0
- package/dist/intersections/types.d.ts.map +1 -0
- package/dist/intersections/types.js +1 -0
- package/dist/serialize/dump_types.d.ts +101 -0
- package/dist/serialize/dump_types.d.ts.map +1 -0
- package/dist/serialize/dump_types.js +5 -0
- package/dist/serialize/geom_mgr.d.ts +24 -0
- package/dist/serialize/geom_mgr.d.ts.map +1 -0
- package/dist/serialize/geom_mgr.js +30 -0
- package/dist/types/type_define.d.ts +29 -0
- package/dist/types/type_define.d.ts.map +1 -0
- package/dist/types/type_define.js +10 -0
- package/dist/types/type_guard.d.ts +46 -0
- package/dist/types/type_guard.d.ts.map +1 -0
- package/dist/types/type_guard.js +5 -0
- package/dist/utils/math_error.d.ts +16 -0
- package/dist/utils/math_error.d.ts.map +1 -0
- package/dist/utils/math_error.js +35 -0
- package/dist/utils/math_utils.d.ts +9 -0
- package/dist/utils/math_utils.d.ts.map +1 -0
- package/dist/utils/math_utils.js +25 -0
- package/dist/utils/precision.d.ts +29 -0
- package/dist/utils/precision.d.ts.map +1 -0
- package/dist/utils/precision.js +44 -0
- package/package.json +38 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EN_GEO_TYPE } from '../constants/geom_type';
|
|
2
|
+
import { Box2 } from '../core/box2';
|
|
3
|
+
import { Mat3 } from '../core/mat3';
|
|
4
|
+
import { Vec2 } from '../core/vec2';
|
|
5
|
+
import type { IDBCircle2 } from '../serialize/dump_types';
|
|
6
|
+
import type { IClosestPointResult } from '../types/type_define';
|
|
7
|
+
import { Arc2 } from './arc2';
|
|
8
|
+
import { CircleCurve2 } from './circle_curve2';
|
|
9
|
+
import { Interval } from './interval';
|
|
10
|
+
export declare class Circle2 extends CircleCurve2 {
|
|
11
|
+
static readonly type = EN_GEO_TYPE.Circle2;
|
|
12
|
+
/**
|
|
13
|
+
* 构造整圆。
|
|
14
|
+
* @param center 圆心。
|
|
15
|
+
* @param radius 半径。
|
|
16
|
+
*/
|
|
17
|
+
constructor(center: Vec2, radius: number);
|
|
18
|
+
length(range?: Interval): number;
|
|
19
|
+
lengthAtParam(u: number): number;
|
|
20
|
+
paramAtLength(s: number, tol?: number): number;
|
|
21
|
+
split(u: number): Arc2[];
|
|
22
|
+
trim(range: Interval): Arc2[];
|
|
23
|
+
reverse(): this;
|
|
24
|
+
transform(m: Mat3): this;
|
|
25
|
+
transformed(m: Mat3): this;
|
|
26
|
+
closestPoint(p: Vec2): IClosestPointResult;
|
|
27
|
+
boundingBox(): Box2;
|
|
28
|
+
isValid(eps?: number): boolean;
|
|
29
|
+
isClosed(): boolean;
|
|
30
|
+
isCircle(): this is Circle2;
|
|
31
|
+
/**
|
|
32
|
+
* 结构等价判断(字段级)。
|
|
33
|
+
* @param other 对比圆。
|
|
34
|
+
* @param eps 数值容差。
|
|
35
|
+
* @returns 圆心和半径近似相等时返回 `true`。
|
|
36
|
+
*/
|
|
37
|
+
equals(other: Circle2, eps?: number): boolean;
|
|
38
|
+
clone(): this;
|
|
39
|
+
dump(): IDBCircle2;
|
|
40
|
+
static load(data: IDBCircle2): Circle2;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=circle2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle2.d.ts","sourceRoot":"","sources":["../../src/curves/circle2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG/D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC,qBAKa,OAAQ,SAAQ,YAAY;IACrC,gBAAuB,IAAI,uBAAsB;IAEjD;;;;OAIG;gBACS,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;IAKxB,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ;IAMvB,aAAa,CAAC,CAAC,EAAE,MAAM;IAMvB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAA6B;IASzD,KAAK,CAAC,CAAC,EAAE,MAAM;IAYf,IAAI,CAAC,KAAK,EAAE,QAAQ;IAMpB,OAAO;IAKP,SAAS,CAAC,CAAC,EAAE,IAAI;IAajB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI;IAI1B,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,mBAAmB;IAgB1C,WAAW;IASX,OAAO,CAAC,GAAG,SAA6B;IAIxC,QAAQ,IAAI,OAAO;IAInB,QAAQ,IAAI,IAAI,IAAI,OAAO;IAI3C;;;;;OAKG;IACI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAgB;IAIjC,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,UAAU;WAQpB,IAAI,CAAC,IAAI,EAAE,UAAU;CAGtC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var Circle2_1;
|
|
8
|
+
import { EN_GEO_TYPE } from '../constants/geom_type';
|
|
9
|
+
import { MathConst } from '../constants/math_const';
|
|
10
|
+
import { Box2 } from '../core/box2';
|
|
11
|
+
import { Vec2 } from '../core/vec2';
|
|
12
|
+
import { RegisterGeom } from '../serialize/geom_mgr';
|
|
13
|
+
import { MathError } from '../utils/math_error';
|
|
14
|
+
import { Precision } from '../utils/precision';
|
|
15
|
+
import { Arc2 } from './arc2';
|
|
16
|
+
import { CircleCurve2 } from './circle_curve2';
|
|
17
|
+
import { PeriodInterval } from './period_interval';
|
|
18
|
+
let Circle2 = Circle2_1 = class Circle2 extends CircleCurve2 {
|
|
19
|
+
/**
|
|
20
|
+
* 构造整圆。
|
|
21
|
+
* @param center 圆心。
|
|
22
|
+
* @param radius 半径。
|
|
23
|
+
*/
|
|
24
|
+
constructor(center, radius) {
|
|
25
|
+
super(center, radius);
|
|
26
|
+
this.setRange(new PeriodInterval(0, MathConst.PI2, MathConst.PI2));
|
|
27
|
+
}
|
|
28
|
+
length(range) {
|
|
29
|
+
if (!range)
|
|
30
|
+
return MathConst.PI2 * this._radius;
|
|
31
|
+
this._range.assertContainsRange(range, Precision.CURVE_PARAM_EPS);
|
|
32
|
+
return range.length() * this._radius;
|
|
33
|
+
}
|
|
34
|
+
lengthAtParam(u) {
|
|
35
|
+
const uu = this.normalizeParamForEval(u);
|
|
36
|
+
const start = this._range.start;
|
|
37
|
+
return (uu - start) * this._radius;
|
|
38
|
+
}
|
|
39
|
+
paramAtLength(s, tol = Precision.CURVE_LENGTH_EPS) {
|
|
40
|
+
const total = this.length();
|
|
41
|
+
MathError.assert(Number.isFinite(tol) && tol > 0, 'Circle2.paramAtLength: tol must be > 0');
|
|
42
|
+
MathError.assert(s >= -tol && s <= total + tol, `Circle2.paramAtLength: s out of range [0, ${total}]`);
|
|
43
|
+
const clamped = Math.min(total, Math.max(0, s));
|
|
44
|
+
return this._range.start + clamped / this._radius;
|
|
45
|
+
}
|
|
46
|
+
split(u) {
|
|
47
|
+
const range = this._range;
|
|
48
|
+
const uu = range.normalizeInPeriod(u, range.start);
|
|
49
|
+
if (Math.abs(uu - range.start) <= Precision.CURVE_PARAM_EPS || Math.abs(uu - range.end) <= Precision.CURVE_PARAM_EPS) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const first = new Arc2(this._center, this._radius, range.start, uu, false);
|
|
53
|
+
const second = new Arc2(this._center, this._radius, uu, range.start + range.period, false);
|
|
54
|
+
return [first, second].filter((arc) => arc.length() > Precision.CURVE_LENGTH_EPS);
|
|
55
|
+
}
|
|
56
|
+
trim(range) {
|
|
57
|
+
this._range.assertContainsRange(range, Precision.CURVE_PARAM_EPS);
|
|
58
|
+
if (range.length() <= Precision.CURVE_PARAM_EPS)
|
|
59
|
+
return [];
|
|
60
|
+
return [new Arc2(this._center, this._radius, range.start, range.end, false)];
|
|
61
|
+
}
|
|
62
|
+
reverse() {
|
|
63
|
+
// 整圆反转后几何与参数域等价,保持不变即可。
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
transform(m) {
|
|
67
|
+
MathError.assert(m.isSimilarity2D(Precision.CURVE_PARAM_EPS), 'Circle2.transform: matrix must be a 2D similarity transform');
|
|
68
|
+
const nextCenter = m.transformedPoint(this._center);
|
|
69
|
+
const scale = m.getSimilarityScale2D(Precision.CURVE_PARAM_EPS);
|
|
70
|
+
const nextRadius = this._radius * scale;
|
|
71
|
+
MathError.assert(nextRadius > Precision.CURVE_LENGTH_EPS, 'Circle2.transform: degenerate radius after transform');
|
|
72
|
+
this._center = nextCenter;
|
|
73
|
+
this._radius = nextRadius;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
transformed(m) {
|
|
77
|
+
return this.clone().transform(m);
|
|
78
|
+
}
|
|
79
|
+
closestPoint(p) {
|
|
80
|
+
const v = p.subtracted(this._center);
|
|
81
|
+
let u = this._range.start;
|
|
82
|
+
if (v.len() > Precision.CURVE_NEWTON_EPS) {
|
|
83
|
+
u = this._range.normalizeInPeriod(Math.atan2(v.y, v.x), this._range.start);
|
|
84
|
+
}
|
|
85
|
+
const point = this.pointAt(u);
|
|
86
|
+
return {
|
|
87
|
+
point,
|
|
88
|
+
param: u,
|
|
89
|
+
distance: point.distanceTo(p),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
boundingBox() {
|
|
93
|
+
return new Box2(this._center.x - this._radius, this._center.y - this._radius, this._center.x + this._radius, this._center.y + this._radius);
|
|
94
|
+
}
|
|
95
|
+
isValid(eps = Precision.CURVE_LENGTH_EPS) {
|
|
96
|
+
return this.isCircleStructValid(eps);
|
|
97
|
+
}
|
|
98
|
+
isClosed() {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
isCircle() {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 结构等价判断(字段级)。
|
|
106
|
+
* @param other 对比圆。
|
|
107
|
+
* @param eps 数值容差。
|
|
108
|
+
* @returns 圆心和半径近似相等时返回 `true`。
|
|
109
|
+
*/
|
|
110
|
+
equals(other, eps = Precision.EPS) {
|
|
111
|
+
return this._center.equals(other._center, eps) && Precision.equal(this._radius, other._radius, eps);
|
|
112
|
+
}
|
|
113
|
+
clone() {
|
|
114
|
+
return new Circle2_1(this._center, this._radius);
|
|
115
|
+
}
|
|
116
|
+
dump() {
|
|
117
|
+
return {
|
|
118
|
+
type: Circle2_1.type,
|
|
119
|
+
center: { x: this._center.x, y: this._center.y },
|
|
120
|
+
radius: this._radius,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
static load(data) {
|
|
124
|
+
return new Circle2_1(new Vec2(data.center.x, data.center.y), data.radius);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
Circle2.type = EN_GEO_TYPE.Circle2;
|
|
128
|
+
Circle2 = Circle2_1 = __decorate([
|
|
129
|
+
RegisterGeom
|
|
130
|
+
/**
|
|
131
|
+
* 二维整圆曲线。
|
|
132
|
+
* 参数域固定为 `PeriodInterval(0, 2π, 2π)`。
|
|
133
|
+
*/
|
|
134
|
+
], Circle2);
|
|
135
|
+
export { Circle2 };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Vec2 } from '../core/vec2';
|
|
2
|
+
import { Curve2 } from './curve2';
|
|
3
|
+
/**
|
|
4
|
+
* 圆族曲线基类(整圆与圆弧)。
|
|
5
|
+
* 参数含义为角度参数。
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class CircleCurve2 extends Curve2 {
|
|
8
|
+
protected _center: Vec2;
|
|
9
|
+
protected _radius: number;
|
|
10
|
+
constructor(center: Vec2, radius: number);
|
|
11
|
+
/** 圆心(返回副本) */
|
|
12
|
+
get center(): Vec2;
|
|
13
|
+
/** 半径 */
|
|
14
|
+
get radius(): number;
|
|
15
|
+
pointAt(u: number): Vec2;
|
|
16
|
+
tangentAt(u: number): Vec2;
|
|
17
|
+
derivatives(u: number, n: number): Vec2[];
|
|
18
|
+
curvatureAt(u: number): number;
|
|
19
|
+
/** 圆族结构有效性检查 */
|
|
20
|
+
protected isCircleStructValid(eps?: number): boolean;
|
|
21
|
+
/** 由角度参数计算圆上点 */
|
|
22
|
+
protected pointAtAngle(theta: number): Vec2;
|
|
23
|
+
/**
|
|
24
|
+
* 按角参数计算导数(不含 0 阶点坐标)。
|
|
25
|
+
* @param theta 角参数。
|
|
26
|
+
* @param order 导数阶次(>=1)。
|
|
27
|
+
* @param sign d(theta)/d(u) 的符号,逆向参数化取 -1。
|
|
28
|
+
*/
|
|
29
|
+
protected derivativeAtAngle(theta: number, order: number, sign: 1 | -1): Vec2;
|
|
30
|
+
/** 计算点相对圆心的极角 */
|
|
31
|
+
protected angleOfPoint(p: Vec2): number;
|
|
32
|
+
/**
|
|
33
|
+
* 参数校验并归一化,保证端点求值稳定。
|
|
34
|
+
* 对周期区间会归一化到当前区间窗口内。
|
|
35
|
+
*/
|
|
36
|
+
protected normalizeParamForEval(u: number): number;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=circle_curve2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle_curve2.d.ts","sourceRoot":"","sources":["../../src/curves/circle_curve2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAGnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAGjC;;;GAGG;AACH,8BAAsB,YAAa,SAAQ,MAAM;IAC7C,SAAS,CAAC,OAAO,EAAE,IAAI,CAAA;IACvB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAA;gBAEb,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;IAQxC,eAAe;IACf,IAAW,MAAM,SAEhB;IAED,SAAS;IACT,IAAW,MAAM,WAEhB;IAEe,OAAO,CAAC,CAAC,EAAE,MAAM;IAKjB,SAAS,CAAC,CAAC,EAAE,MAAM;IAKnB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAWhC,WAAW,CAAC,CAAC,EAAE,MAAM;IAKrC,gBAAgB;IAChB,SAAS,CAAC,mBAAmB,CAAC,GAAG,SAA6B;IAO9D,iBAAiB;IACjB,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM;IAOpC;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IA4BtE,iBAAiB;IACjB,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI;IAI9B;;;OAGG;IACH,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,MAAM;CAa5C"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Vec2 } from '../core/vec2';
|
|
2
|
+
import { MathError } from '../utils/math_error';
|
|
3
|
+
import { Precision } from '../utils/precision';
|
|
4
|
+
import { Curve2 } from './curve2';
|
|
5
|
+
import { PeriodInterval } from './period_interval';
|
|
6
|
+
/**
|
|
7
|
+
* 圆族曲线基类(整圆与圆弧)。
|
|
8
|
+
* 参数含义为角度参数。
|
|
9
|
+
*/
|
|
10
|
+
export class CircleCurve2 extends Curve2 {
|
|
11
|
+
constructor(center, radius) {
|
|
12
|
+
super();
|
|
13
|
+
MathError.assert(Number.isFinite(center.x) && Number.isFinite(center.y), 'CircleCurve2: center must be finite');
|
|
14
|
+
MathError.assert(Number.isFinite(radius) && radius > 0, 'CircleCurve2: radius must be > 0');
|
|
15
|
+
this._center = center.clone();
|
|
16
|
+
this._radius = radius;
|
|
17
|
+
}
|
|
18
|
+
/** 圆心(返回副本) */
|
|
19
|
+
get center() {
|
|
20
|
+
return this._center.clone();
|
|
21
|
+
}
|
|
22
|
+
/** 半径 */
|
|
23
|
+
get radius() {
|
|
24
|
+
return this._radius;
|
|
25
|
+
}
|
|
26
|
+
pointAt(u) {
|
|
27
|
+
const uu = this.normalizeParamForEval(u);
|
|
28
|
+
return this.pointAtAngle(uu);
|
|
29
|
+
}
|
|
30
|
+
tangentAt(u) {
|
|
31
|
+
const uu = this.normalizeParamForEval(u);
|
|
32
|
+
return this.derivativeAtAngle(uu, 1, 1);
|
|
33
|
+
}
|
|
34
|
+
derivatives(u, n) {
|
|
35
|
+
MathError.assert(Number.isInteger(n) && n >= 0, 'CircleCurve2.derivatives: n must be a non-negative integer');
|
|
36
|
+
const uu = this.normalizeParamForEval(u);
|
|
37
|
+
const ret = [this.pointAtAngle(uu)];
|
|
38
|
+
for (let i = 1; i <= n; i++) {
|
|
39
|
+
ret.push(this.derivativeAtAngle(uu, i, 1));
|
|
40
|
+
}
|
|
41
|
+
return ret;
|
|
42
|
+
}
|
|
43
|
+
curvatureAt(u) {
|
|
44
|
+
this.normalizeParamForEval(u);
|
|
45
|
+
return 1 / this._radius;
|
|
46
|
+
}
|
|
47
|
+
/** 圆族结构有效性检查 */
|
|
48
|
+
isCircleStructValid(eps = Precision.CURVE_LENGTH_EPS) {
|
|
49
|
+
return Number.isFinite(this._center.x) &&
|
|
50
|
+
Number.isFinite(this._center.y) &&
|
|
51
|
+
Number.isFinite(this._radius) &&
|
|
52
|
+
this._radius > eps;
|
|
53
|
+
}
|
|
54
|
+
/** 由角度参数计算圆上点 */
|
|
55
|
+
pointAtAngle(theta) {
|
|
56
|
+
return new Vec2(this._center.x + this._radius * Math.cos(theta), this._center.y + this._radius * Math.sin(theta));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 按角参数计算导数(不含 0 阶点坐标)。
|
|
60
|
+
* @param theta 角参数。
|
|
61
|
+
* @param order 导数阶次(>=1)。
|
|
62
|
+
* @param sign d(theta)/d(u) 的符号,逆向参数化取 -1。
|
|
63
|
+
*/
|
|
64
|
+
derivativeAtAngle(theta, order, sign) {
|
|
65
|
+
const phase = order % 4;
|
|
66
|
+
let x = 0;
|
|
67
|
+
let y = 0;
|
|
68
|
+
switch (phase) {
|
|
69
|
+
case 0:
|
|
70
|
+
x = Math.cos(theta);
|
|
71
|
+
y = Math.sin(theta);
|
|
72
|
+
break;
|
|
73
|
+
case 1:
|
|
74
|
+
x = -Math.sin(theta);
|
|
75
|
+
y = Math.cos(theta);
|
|
76
|
+
break;
|
|
77
|
+
case 2:
|
|
78
|
+
x = -Math.cos(theta);
|
|
79
|
+
y = -Math.sin(theta);
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
x = Math.sin(theta);
|
|
83
|
+
y = -Math.cos(theta);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
// d^k/d u^k = d^k/d theta^k * (d theta / d u)^k
|
|
87
|
+
// 当 sign = -1 时,奇数阶导翻转符号,偶数阶不变。
|
|
88
|
+
const signPow = sign === 1 ? 1 : (order % 2 === 0 ? 1 : -1);
|
|
89
|
+
return new Vec2(x, y).scale(this._radius * signPow);
|
|
90
|
+
}
|
|
91
|
+
/** 计算点相对圆心的极角 */
|
|
92
|
+
angleOfPoint(p) {
|
|
93
|
+
return Math.atan2(p.y - this._center.y, p.x - this._center.x);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 参数校验并归一化,保证端点求值稳定。
|
|
97
|
+
* 对周期区间会归一化到当前区间窗口内。
|
|
98
|
+
*/
|
|
99
|
+
normalizeParamForEval(u) {
|
|
100
|
+
this._range.assertContains(u, Precision.CURVE_PARAM_EPS);
|
|
101
|
+
const start = this._range.start;
|
|
102
|
+
const end = this._range.end;
|
|
103
|
+
if (Math.abs(u - start) <= Precision.CURVE_PARAM_EPS)
|
|
104
|
+
return start;
|
|
105
|
+
if (Math.abs(u - end) <= Precision.CURVE_PARAM_EPS)
|
|
106
|
+
return end;
|
|
107
|
+
if (this._range instanceof PeriodInterval) {
|
|
108
|
+
return this._range.normalizeInPeriod(u, start);
|
|
109
|
+
}
|
|
110
|
+
return u;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { Box2 } from '../core/box2';
|
|
2
|
+
import { GeomBase } from '../core/geom_base';
|
|
3
|
+
import { Mat3 } from '../core/mat3';
|
|
4
|
+
import { Vec2 } from '../core/vec2';
|
|
5
|
+
import type { IClosestPointResult } from '../types/type_define';
|
|
6
|
+
import { DiscretizeOptions } from '../discretize/discretize_options';
|
|
7
|
+
import type { Arc2 } from './arc2';
|
|
8
|
+
import type { BSpline2 } from './bspline2';
|
|
9
|
+
import type { Circle2 } from './circle2';
|
|
10
|
+
import type { Ellipse2 } from './ellipse2';
|
|
11
|
+
import type { EllipseArc2 } from './ellipse_arc2';
|
|
12
|
+
import { Interval } from './interval';
|
|
13
|
+
import type { Line2 } from './line2';
|
|
14
|
+
export declare abstract class Curve2 extends GeomBase {
|
|
15
|
+
/**
|
|
16
|
+
* 参数域
|
|
17
|
+
* - 默认使用无界区间,具体曲线应在子类中覆盖
|
|
18
|
+
* - 子类可直接赋值 this._range,或调用 setRange()
|
|
19
|
+
*/
|
|
20
|
+
protected _range: Interval;
|
|
21
|
+
/**
|
|
22
|
+
* 获取参数域。
|
|
23
|
+
* @returns 参数域副本,调用方修改不会影响内部状态。
|
|
24
|
+
*/
|
|
25
|
+
getRange(): Interval;
|
|
26
|
+
/**
|
|
27
|
+
* 判断参数是否落在当前曲线参数域内。
|
|
28
|
+
* @param u 待判断参数。
|
|
29
|
+
* @param eps 区间边界比较容差。
|
|
30
|
+
* @returns 落在参数域内返回 `true`。
|
|
31
|
+
*/
|
|
32
|
+
containsParam(u: number, eps?: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 原生参数取点。
|
|
35
|
+
* @param u 曲线参数。
|
|
36
|
+
* @returns 参数对应的二维点。
|
|
37
|
+
*/
|
|
38
|
+
abstract pointAt(u: number): Vec2;
|
|
39
|
+
/**
|
|
40
|
+
* 原生参数切向(一阶导)。
|
|
41
|
+
* @param u 曲线参数。
|
|
42
|
+
* @returns 参数处切向量。
|
|
43
|
+
*/
|
|
44
|
+
abstract tangentAt(u: number): Vec2;
|
|
45
|
+
/**
|
|
46
|
+
* 计算导数序列 `[d0, d1, ...]`。
|
|
47
|
+
* @param u 曲线参数。
|
|
48
|
+
* @param n 最大导数阶数。
|
|
49
|
+
* @returns 从 0 阶到 n 阶的导数数组。
|
|
50
|
+
*/
|
|
51
|
+
abstract derivatives(u: number, n: number): Vec2[];
|
|
52
|
+
/**
|
|
53
|
+
* 计算参数处曲率。
|
|
54
|
+
* @param u 曲线参数。
|
|
55
|
+
* @returns 曲率标量。
|
|
56
|
+
*/
|
|
57
|
+
abstract curvatureAt(u: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* 计算曲线长度。
|
|
60
|
+
* @param range 可选子参数域;不传表示整段曲线。
|
|
61
|
+
* @returns 指定参数范围内的弧长。
|
|
62
|
+
*/
|
|
63
|
+
abstract length(range?: Interval): number;
|
|
64
|
+
/**
|
|
65
|
+
* 计算从参数域起点到 `u` 的弧长。
|
|
66
|
+
* @param u 目标参数。
|
|
67
|
+
* @returns 起点到 `u` 的累计弧长。
|
|
68
|
+
*/
|
|
69
|
+
abstract lengthAtParam(u: number): number;
|
|
70
|
+
/**
|
|
71
|
+
* 给定弧长反求参数。
|
|
72
|
+
* @param s 目标弧长。
|
|
73
|
+
* @param tol 迭代容差(若实现采用迭代法)。
|
|
74
|
+
* @returns 对应参数值。
|
|
75
|
+
*/
|
|
76
|
+
abstract paramAtLength(s: number, tol?: number): number;
|
|
77
|
+
/**
|
|
78
|
+
* 以参数切分曲线。
|
|
79
|
+
* @param u 切分参数。
|
|
80
|
+
* @returns 切分结果曲线数组。
|
|
81
|
+
*/
|
|
82
|
+
abstract split(u: number): Curve2[];
|
|
83
|
+
/**
|
|
84
|
+
* 参数裁剪。
|
|
85
|
+
* @param range 目标保留参数区间。
|
|
86
|
+
* @returns 裁剪后的曲线数组。
|
|
87
|
+
*/
|
|
88
|
+
abstract trim(range: Interval): Curve2[];
|
|
89
|
+
/**
|
|
90
|
+
* 反转曲线方向(就地)。
|
|
91
|
+
* @returns 当前实例。
|
|
92
|
+
*/
|
|
93
|
+
abstract reverse(): this;
|
|
94
|
+
/**
|
|
95
|
+
* 应用仿射变换(就地)。
|
|
96
|
+
* @param m 3x3 变换矩阵。
|
|
97
|
+
* @returns 当前实例。
|
|
98
|
+
*/
|
|
99
|
+
abstract transform(m: Mat3): this;
|
|
100
|
+
/**
|
|
101
|
+
* 应用仿射变换(返回新对象)。
|
|
102
|
+
* @param m 3x3 变换矩阵。
|
|
103
|
+
* @returns 变换后的新曲线对象。
|
|
104
|
+
*/
|
|
105
|
+
abstract transformed(m: Mat3): this;
|
|
106
|
+
/**
|
|
107
|
+
* 最近点查询。
|
|
108
|
+
* @param p 查询点。
|
|
109
|
+
* @param tol 计算容差。
|
|
110
|
+
* @returns 最近点、对应参数和距离。
|
|
111
|
+
*/
|
|
112
|
+
abstract closestPoint(p: Vec2, tol?: number): IClosestPointResult;
|
|
113
|
+
/**
|
|
114
|
+
* 计算包围盒。
|
|
115
|
+
* @param accurate 是否使用高精度计算。
|
|
116
|
+
* - `accurate !== true`:优先快速保守盒(用于高频场景)
|
|
117
|
+
* - `accurate === true`:尽量返回更紧的包围盒(允许更慢)
|
|
118
|
+
* @returns 曲线包围盒。
|
|
119
|
+
*/
|
|
120
|
+
abstract boundingBox(accurate?: boolean): Box2;
|
|
121
|
+
/**
|
|
122
|
+
* 有效性检查。
|
|
123
|
+
* @param eps 数值判定容差。
|
|
124
|
+
* @returns 曲线定义有效返回 `true`。
|
|
125
|
+
*/
|
|
126
|
+
abstract isValid(eps?: number): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* 是否为退化曲线。
|
|
129
|
+
* 默认规则:参数域过小或曲线长度过小。
|
|
130
|
+
*/
|
|
131
|
+
isDegenerate(): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* 是否为闭合曲线。
|
|
134
|
+
* 默认返回 `false`,由闭合曲线子类覆盖。
|
|
135
|
+
*/
|
|
136
|
+
isClosed(): boolean;
|
|
137
|
+
/** 是否为线段曲线。 */
|
|
138
|
+
isLine(): this is Line2;
|
|
139
|
+
/** 是否为整圆曲线。 */
|
|
140
|
+
isCircle(): this is Circle2;
|
|
141
|
+
/** 是否为圆弧曲线。 */
|
|
142
|
+
isArc(): this is Arc2;
|
|
143
|
+
/** 是否为整椭圆曲线。 */
|
|
144
|
+
isEllipse(): this is Ellipse2;
|
|
145
|
+
/** 是否为椭圆弧曲线。 */
|
|
146
|
+
isEllipseArc(): this is EllipseArc2;
|
|
147
|
+
/** 是否为 B 样条曲线。 */
|
|
148
|
+
isBSpline(): this is BSpline2;
|
|
149
|
+
/**
|
|
150
|
+
* 克隆曲线。
|
|
151
|
+
* @returns 当前曲线的深拷贝对象。
|
|
152
|
+
*/
|
|
153
|
+
abstract clone(): this;
|
|
154
|
+
/**
|
|
155
|
+
* 获取第 `n` 阶导数(默认由 `derivatives` 派生)。
|
|
156
|
+
* @param u 曲线参数。
|
|
157
|
+
* @param n 导数阶数,要求为非负整数。
|
|
158
|
+
* @returns 第 `n` 阶导数向量。
|
|
159
|
+
*/
|
|
160
|
+
derivativeAt(u: number, n: number): Vec2;
|
|
161
|
+
/**
|
|
162
|
+
* 最近参数(默认由 `closestPoint` 派生)。
|
|
163
|
+
* @param p 查询点。
|
|
164
|
+
* @param tol 计算容差。
|
|
165
|
+
* @returns 最近点对应参数。
|
|
166
|
+
*/
|
|
167
|
+
closestParam(p: Vec2, tol?: number): number;
|
|
168
|
+
/**
|
|
169
|
+
* 点到曲线距离(默认由 `closestPoint` 派生)。
|
|
170
|
+
* @param p 查询点。
|
|
171
|
+
* @param tol 计算容差。
|
|
172
|
+
* @returns 点到曲线的最短距离。
|
|
173
|
+
*/
|
|
174
|
+
distanceToPoint(p: Vec2, tol?: number): number;
|
|
175
|
+
/**
|
|
176
|
+
* 曲线离散化便捷入口(薄封装)。
|
|
177
|
+
* @param options 离散参数。
|
|
178
|
+
* @returns 折线采样结果。
|
|
179
|
+
*/
|
|
180
|
+
discretize(options?: DiscretizeOptions): Vec2[];
|
|
181
|
+
/**
|
|
182
|
+
* 设置参数域(供子类构造期使用)。
|
|
183
|
+
* @param range 参数区间。
|
|
184
|
+
* @returns 当前实例。
|
|
185
|
+
*/
|
|
186
|
+
protected setRange(range: Interval): this;
|
|
187
|
+
/**
|
|
188
|
+
* Newton + 二分混合求解参数(常用于弧长反参)。
|
|
189
|
+
* @param target 目标值(如目标弧长)。
|
|
190
|
+
* @param start 参数下界。
|
|
191
|
+
* @param end 参数上界。
|
|
192
|
+
* @param tol 收敛容差。
|
|
193
|
+
* @param evalValue 参数到目标量的映射函数(要求在 [start, end] 上单调)。
|
|
194
|
+
* @param evalSlope 参数处导数量(如速度),用于 Newton 步。
|
|
195
|
+
* @param failMessage 未收敛时抛错信息。
|
|
196
|
+
* @param initialGuess 可选初值;不传时取区间中点。
|
|
197
|
+
* @returns 收敛后的参数。
|
|
198
|
+
*/
|
|
199
|
+
protected solveParamByHybridNewton(target: number, start: number, end: number, tol: number, evalValue: (u: number) => number, evalSlope: (u: number) => number, failMessage: string, initialGuess?: number): number;
|
|
200
|
+
/**
|
|
201
|
+
* “采样粗定位 + Newton 细化”最近点求解通用流程。
|
|
202
|
+
* @param p 查询点。
|
|
203
|
+
* @param tol 收敛容差。
|
|
204
|
+
* @param sampleCount 初始采样数(含两端点)。
|
|
205
|
+
* @param evalPoint 参数求点函数。
|
|
206
|
+
* @param evalD1 一阶导函数。
|
|
207
|
+
* @param evalD2 二阶导函数。
|
|
208
|
+
* @param failMessage 未收敛时抛错信息。
|
|
209
|
+
* @param compareParam 参数平局比较器(返回 <0 表示 a 更优)。
|
|
210
|
+
* @returns 最近点结果。
|
|
211
|
+
*/
|
|
212
|
+
protected solveClosestPointBySampleNewton(p: Vec2, tol: number, sampleCount: number, evalPoint: (u: number) => Vec2, evalD1: (u: number) => Vec2, evalD2: (u: number) => Vec2, failMessage: string, compareParam?: (a: number, b: number) => number): IClosestPointResult;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=curve2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curve2.d.ts","sourceRoot":"","sources":["../../src/curves/curve2.ts"],"names":[],"mappings":"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"}
|