@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.
Files changed (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/dist/constants/geom_type.d.ts +13 -0
  4. package/dist/constants/geom_type.d.ts.map +1 -0
  5. package/dist/constants/geom_type.js +17 -0
  6. package/dist/constants/math_const.d.ts +9 -0
  7. package/dist/constants/math_const.d.ts.map +1 -0
  8. package/dist/constants/math_const.js +12 -0
  9. package/dist/core/box2.d.ts +71 -0
  10. package/dist/core/box2.d.ts.map +1 -0
  11. package/dist/core/box2.js +243 -0
  12. package/dist/core/coord2d.d.ts +62 -0
  13. package/dist/core/coord2d.d.ts.map +1 -0
  14. package/dist/core/coord2d.js +155 -0
  15. package/dist/core/geom_base.d.ts +19 -0
  16. package/dist/core/geom_base.d.ts.map +1 -0
  17. package/dist/core/geom_base.js +18 -0
  18. package/dist/core/mat3.d.ts +101 -0
  19. package/dist/core/mat3.d.ts.map +1 -0
  20. package/dist/core/mat3.js +290 -0
  21. package/dist/core/vec2.d.ts +138 -0
  22. package/dist/core/vec2.d.ts.map +1 -0
  23. package/dist/core/vec2.js +297 -0
  24. package/dist/curves/arc2.d.ts +49 -0
  25. package/dist/curves/arc2.d.ts.map +1 -0
  26. package/dist/curves/arc2.js +265 -0
  27. package/dist/curves/bspline2.d.ts +150 -0
  28. package/dist/curves/bspline2.d.ts.map +1 -0
  29. package/dist/curves/bspline2.js +793 -0
  30. package/dist/curves/circle2.d.ts +42 -0
  31. package/dist/curves/circle2.d.ts.map +1 -0
  32. package/dist/curves/circle2.js +135 -0
  33. package/dist/curves/circle_curve2.d.ts +38 -0
  34. package/dist/curves/circle_curve2.d.ts.map +1 -0
  35. package/dist/curves/circle_curve2.js +112 -0
  36. package/dist/curves/curve2.d.ts +214 -0
  37. package/dist/curves/curve2.d.ts.map +1 -0
  38. package/dist/curves/curve2.js +238 -0
  39. package/dist/curves/ellipse2.d.ts +42 -0
  40. package/dist/curves/ellipse2.d.ts.map +1 -0
  41. package/dist/curves/ellipse2.js +125 -0
  42. package/dist/curves/ellipse_arc2.d.ts +49 -0
  43. package/dist/curves/ellipse_arc2.d.ts.map +1 -0
  44. package/dist/curves/ellipse_arc2.js +184 -0
  45. package/dist/curves/ellipse_curve2.d.ts +56 -0
  46. package/dist/curves/ellipse_curve2.d.ts.map +1 -0
  47. package/dist/curves/ellipse_curve2.js +262 -0
  48. package/dist/curves/interval.d.ts +112 -0
  49. package/dist/curves/interval.d.ts.map +1 -0
  50. package/dist/curves/interval.js +200 -0
  51. package/dist/curves/line2.d.ts +64 -0
  52. package/dist/curves/line2.d.ts.map +1 -0
  53. package/dist/curves/line2.js +193 -0
  54. package/dist/curves/period_interval.d.ts +129 -0
  55. package/dist/curves/period_interval.d.ts.map +1 -0
  56. package/dist/curves/period_interval.js +240 -0
  57. package/dist/discretize/discretize_defaults.d.ts +12 -0
  58. package/dist/discretize/discretize_defaults.d.ts.map +1 -0
  59. package/dist/discretize/discretize_defaults.js +12 -0
  60. package/dist/discretize/discretize_engine.d.ts +33 -0
  61. package/dist/discretize/discretize_engine.d.ts.map +1 -0
  62. package/dist/discretize/discretize_engine.js +347 -0
  63. package/dist/discretize/discretize_errors.d.ts +15 -0
  64. package/dist/discretize/discretize_errors.d.ts.map +1 -0
  65. package/dist/discretize/discretize_errors.js +30 -0
  66. package/dist/discretize/discretize_options.d.ts +18 -0
  67. package/dist/discretize/discretize_options.d.ts.map +1 -0
  68. package/dist/discretize/discretize_options.js +19 -0
  69. package/dist/discretize/discretize_types.d.ts +36 -0
  70. package/dist/discretize/discretize_types.d.ts.map +1 -0
  71. package/dist/discretize/discretize_types.js +1 -0
  72. package/dist/discretize/internal/curve_guards.d.ts +35 -0
  73. package/dist/discretize/internal/curve_guards.d.ts.map +1 -0
  74. package/dist/discretize/internal/curve_guards.js +62 -0
  75. package/dist/discretize/internal/postprocess.d.ts +5 -0
  76. package/dist/discretize/internal/postprocess.d.ts.map +1 -0
  77. package/dist/discretize/internal/postprocess.js +109 -0
  78. package/dist/discretize/internal/sampling_utils.d.ts +8 -0
  79. package/dist/discretize/internal/sampling_utils.d.ts.map +1 -0
  80. package/dist/discretize/internal/sampling_utils.js +36 -0
  81. package/dist/discretize/register_builtin_strategies.d.ts +3 -0
  82. package/dist/discretize/register_builtin_strategies.d.ts.map +1 -0
  83. package/dist/discretize/register_builtin_strategies.js +10 -0
  84. package/dist/discretize/strategies/bspline_strategy.d.ts +4 -0
  85. package/dist/discretize/strategies/bspline_strategy.d.ts.map +1 -0
  86. package/dist/discretize/strategies/bspline_strategy.js +115 -0
  87. package/dist/discretize/strategies/circle_strategy.d.ts +7 -0
  88. package/dist/discretize/strategies/circle_strategy.d.ts.map +1 -0
  89. package/dist/discretize/strategies/circle_strategy.js +55 -0
  90. package/dist/discretize/strategies/ellipse_strategy.d.ts +7 -0
  91. package/dist/discretize/strategies/ellipse_strategy.d.ts.map +1 -0
  92. package/dist/discretize/strategies/ellipse_strategy.js +86 -0
  93. package/dist/discretize/strategies/line_strategy.d.ts +4 -0
  94. package/dist/discretize/strategies/line_strategy.d.ts.map +1 -0
  95. package/dist/discretize/strategies/line_strategy.js +40 -0
  96. package/dist/discretize/strategy_registry.d.ts +9 -0
  97. package/dist/discretize/strategy_registry.d.ts.map +1 -0
  98. package/dist/discretize/strategy_registry.js +34 -0
  99. package/dist/index.d.ts +30 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +24 -0
  102. package/dist/intersections/analytic_x_algorithm.d.ts +10 -0
  103. package/dist/intersections/analytic_x_algorithm.d.ts.map +1 -0
  104. package/dist/intersections/analytic_x_algorithm.js +83 -0
  105. package/dist/intersections/curve_x_engine.d.ts +9 -0
  106. package/dist/intersections/curve_x_engine.d.ts.map +1 -0
  107. package/dist/intersections/curve_x_engine.js +27 -0
  108. package/dist/intersections/index.d.ts +5 -0
  109. package/dist/intersections/index.d.ts.map +1 -0
  110. package/dist/intersections/index.js +11 -0
  111. package/dist/intersections/internal/certification.d.ts +34 -0
  112. package/dist/intersections/internal/certification.d.ts.map +1 -0
  113. package/dist/intersections/internal/certification.js +238 -0
  114. package/dist/intersections/internal/interval_clipping.d.ts +29 -0
  115. package/dist/intersections/internal/interval_clipping.d.ts.map +1 -0
  116. package/dist/intersections/internal/interval_clipping.js +123 -0
  117. package/dist/intersections/internal/kind.d.ts +4 -0
  118. package/dist/intersections/internal/kind.d.ts.map +1 -0
  119. package/dist/intersections/internal/kind.js +16 -0
  120. package/dist/intersections/internal/pair.d.ts +9 -0
  121. package/dist/intersections/internal/pair.d.ts.map +1 -0
  122. package/dist/intersections/internal/pair.js +14 -0
  123. package/dist/intersections/internal/result.d.ts +20 -0
  124. package/dist/intersections/internal/result.d.ts.map +1 -0
  125. package/dist/intersections/internal/result.js +125 -0
  126. package/dist/intersections/internal/sampling.d.ts +15 -0
  127. package/dist/intersections/internal/sampling.d.ts.map +1 -0
  128. package/dist/intersections/internal/sampling.js +131 -0
  129. package/dist/intersections/internal/segment.d.ts +32 -0
  130. package/dist/intersections/internal/segment.d.ts.map +1 -0
  131. package/dist/intersections/internal/segment.js +137 -0
  132. package/dist/intersections/internal/tolerance.d.ts +10 -0
  133. package/dist/intersections/internal/tolerance.d.ts.map +1 -0
  134. package/dist/intersections/internal/tolerance.js +20 -0
  135. package/dist/intersections/intersector.d.ts +6 -0
  136. package/dist/intersections/intersector.d.ts.map +1 -0
  137. package/dist/intersections/intersector.js +1 -0
  138. package/dist/intersections/numeric_x_algorithm.d.ts +10 -0
  139. package/dist/intersections/numeric_x_algorithm.d.ts.map +1 -0
  140. package/dist/intersections/numeric_x_algorithm.js +73 -0
  141. package/dist/intersections/solvers/bspline_self_solver.d.ts +7 -0
  142. package/dist/intersections/solvers/bspline_self_solver.d.ts.map +1 -0
  143. package/dist/intersections/solvers/bspline_self_solver.js +308 -0
  144. package/dist/intersections/solvers/line_line_pair_solver.d.ts +7 -0
  145. package/dist/intersections/solvers/line_line_pair_solver.d.ts.map +1 -0
  146. package/dist/intersections/solvers/line_line_pair_solver.js +35 -0
  147. package/dist/intersections/solvers/pair_solvers.d.ts +94 -0
  148. package/dist/intersections/solvers/pair_solvers.d.ts.map +1 -0
  149. package/dist/intersections/solvers/pair_solvers.js +1078 -0
  150. package/dist/intersections/solvers/polyline_pair_intersector.d.ts +51 -0
  151. package/dist/intersections/solvers/polyline_pair_intersector.d.ts.map +1 -0
  152. package/dist/intersections/solvers/polyline_pair_intersector.js +731 -0
  153. package/dist/intersections/types.d.ts +11 -0
  154. package/dist/intersections/types.d.ts.map +1 -0
  155. package/dist/intersections/types.js +1 -0
  156. package/dist/serialize/dump_types.d.ts +101 -0
  157. package/dist/serialize/dump_types.d.ts.map +1 -0
  158. package/dist/serialize/dump_types.js +5 -0
  159. package/dist/serialize/geom_mgr.d.ts +24 -0
  160. package/dist/serialize/geom_mgr.d.ts.map +1 -0
  161. package/dist/serialize/geom_mgr.js +30 -0
  162. package/dist/types/type_define.d.ts +29 -0
  163. package/dist/types/type_define.d.ts.map +1 -0
  164. package/dist/types/type_define.js +10 -0
  165. package/dist/types/type_guard.d.ts +46 -0
  166. package/dist/types/type_guard.d.ts.map +1 -0
  167. package/dist/types/type_guard.js +5 -0
  168. package/dist/utils/math_error.d.ts +16 -0
  169. package/dist/utils/math_error.d.ts.map +1 -0
  170. package/dist/utils/math_error.js +35 -0
  171. package/dist/utils/math_utils.d.ts +9 -0
  172. package/dist/utils/math_utils.d.ts.map +1 -0
  173. package/dist/utils/math_utils.js +25 -0
  174. package/dist/utils/precision.d.ts +29 -0
  175. package/dist/utils/precision.d.ts.map +1 -0
  176. package/dist/utils/precision.js +44 -0
  177. package/package.json +38 -0
@@ -0,0 +1,150 @@
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 { IDBBSpline2 } from '../serialize/dump_types';
6
+ import { type IClosestPointResult } from '../types/type_define';
7
+ import { Curve2 } from './curve2';
8
+ import { Interval } from './interval';
9
+ /**
10
+ * B 样条构造选项。
11
+ * - `expandedKnots` 与 `knots + multiplicities` 二选一或同时提供(同时提供需一致)。
12
+ * - `weights` 省略时按全 1 处理。
13
+ * - 第一版仅支持 `isPeriodic !== true`。
14
+ */
15
+ export type IBSpline2Options = {
16
+ expandedKnots?: readonly number[];
17
+ knots?: readonly number[];
18
+ multiplicities?: readonly number[];
19
+ weights?: readonly number[];
20
+ isPeriodic?: boolean;
21
+ };
22
+ export declare class BSpline2 extends Curve2 {
23
+ static readonly type = EN_GEO_TYPE.BSpline2;
24
+ /**
25
+ * 控制点序列(内部存储)。
26
+ * 约定:始终为深拷贝后的可变数组,不直接暴露引用给外部。
27
+ */
28
+ private _controlPoints;
29
+ /**
30
+ * 样条次数(degree)。
31
+ * 约束:构造后保持 >= 1,且与控制点数量/节点向量长度匹配。
32
+ */
33
+ private _degree;
34
+ /**
35
+ * 权重序列(与控制点一一对应)。
36
+ * 约定:长度始终等于控制点数量;未传入时按全 1 处理。
37
+ */
38
+ private _weights;
39
+ /**
40
+ * 展开后的节点向量(expanded knot vector)。
41
+ * 约定:非递减;长度始终满足 n + p + 2(n 为控制点末索引,p 为次数)。
42
+ */
43
+ private _knots;
44
+ /**
45
+ * 构造 B 样条曲线。
46
+ * @param controlPoints 控制点数组。
47
+ * @param degree 样条次数(`>=1`)。
48
+ * @param options 节点、权重与周期配置。
49
+ */
50
+ constructor(controlPoints: readonly Vec2[], degree: number, options?: IBSpline2Options);
51
+ /** 控制点数组(返回深拷贝) */
52
+ get controlPoints(): Vec2[];
53
+ /** 样条次数 */
54
+ get degree(): number;
55
+ /** 展开节点向量(返回副本) */
56
+ get expandedKnots(): number[];
57
+ /** 权重数组(返回副本) */
58
+ get weights(): number[];
59
+ /**
60
+ * 获取参数域内部的连续性断点参数。
61
+ * 当 knot 重数 >= degree 时,可视为连续性下降断点。
62
+ */
63
+ getContinuityBreakParams(eps?: number): number[];
64
+ pointAt(u: number): Vec2;
65
+ tangentAt(u: number): Vec2;
66
+ derivatives(u: number, n: number): Vec2[];
67
+ curvatureAt(u: number): number;
68
+ length(range?: Interval): number;
69
+ lengthAtParam(u: number): number;
70
+ paramAtLength(s: number, tol?: number): number;
71
+ split(u: number): BSpline2[];
72
+ trim(range: Interval): BSpline2[];
73
+ reverse(): this;
74
+ transform(m: Mat3): this;
75
+ transformed(m: Mat3): this;
76
+ closestPoint(p: Vec2, tol?: number): IClosestPointResult;
77
+ boundingBox(accurate?: boolean): Box2;
78
+ isValid(eps?: number): boolean;
79
+ isBSpline(): this is BSpline2;
80
+ /**
81
+ * 结构等价判断(字段级)。
82
+ * @param other 对比样条。
83
+ * @param eps 数值容差。
84
+ * @returns 阶次、控制点、权重与节点向量逐项近似相等时返回 `true`。
85
+ */
86
+ equals(other: BSpline2, eps?: number): boolean;
87
+ clone(): this;
88
+ dump(): IDBBSpline2;
89
+ static load(data: IDBBSpline2): BSpline2;
90
+ /**
91
+ * 解析并校验权重。
92
+ * @param weights 输入权重;未传时返回全 1。
93
+ */
94
+ private resolveWeights;
95
+ /**
96
+ * 解析并统一节点输入。
97
+ * @param options 构造选项。
98
+ * @returns 统一后的 expanded knots。
99
+ */
100
+ private resolveKnots;
101
+ /**
102
+ * 校验 expanded knots 基本合法性。
103
+ * @param knots 展开节点向量。
104
+ * @param controlPointCount 控制点数量。
105
+ * @param degree 样条次数。
106
+ */
107
+ private validateExpandedKnots;
108
+ /**
109
+ * 校验控制点坐标有限性。
110
+ * @param points 控制点数组。
111
+ */
112
+ private assertFiniteControlPoints;
113
+ /**
114
+ * 转换为齐次控制点。
115
+ * @returns 齐次点数组 `{x,y,w}`。
116
+ */
117
+ private homogeneousControlPoints;
118
+ /**
119
+ * 自适应积分计算弧长。
120
+ * @param u0 起始参数。
121
+ * @param u1 结束参数。
122
+ * @param depth 当前递归深度。
123
+ */
124
+ private integrateLength;
125
+ private gaussLegendre5;
126
+ private buildBBoxSpanBounds;
127
+ private getUniqueKnotsInRange;
128
+ private solveComponentExtremaInSpan;
129
+ private findRootBrackets;
130
+ private refineRootBracketedNewton;
131
+ private mergeBrackets;
132
+ private bboxRootSampleCount;
133
+ private expandBoxBySpanSamples;
134
+ private componentDerivative;
135
+ private clampParamForBBox;
136
+ /**
137
+ * 参数吸附到端点,避免边界浮点抖动。
138
+ * @param u 输入参数。
139
+ * @returns 吸附后的参数。
140
+ */
141
+ private snapParam;
142
+ private static fromHomogeneous;
143
+ private static expandKnots;
144
+ private static findSpan;
145
+ private static knotMultiplicity;
146
+ private static insertKnotOnce;
147
+ private static basisFunctionDerivatives;
148
+ private static binomial;
149
+ }
150
+ //# sourceMappingURL=bspline2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bspline2.d.ts","sourceRoot":"","sources":["../../src/curves/bspline2.ts"],"names":[],"mappings":"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"}