@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,11 @@
1
+ import type { Vec2 } from '../core/vec2';
2
+ import type { Interval } from '../curves/interval';
3
+ export type CurveXInfo = {
4
+ point: Vec2;
5
+ u1: number;
6
+ u2: number;
7
+ isOverlap: boolean;
8
+ range1?: Interval;
9
+ range2?: Interval;
10
+ };
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/intersections/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,IAAI,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAA;CACpB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ import { EN_GEO_TYPE } from '../constants/geom_type';
2
+ import type { Num3x3 } from '../types/type_guard';
3
+ export type IDB = {
4
+ type: EN_GEO_TYPE;
5
+ };
6
+ export type IDBVec2 = IDB & {
7
+ type: EN_GEO_TYPE.Vec2;
8
+ x: number;
9
+ y: number;
10
+ };
11
+ export type IDBMat3 = IDB & {
12
+ type: EN_GEO_TYPE.Mat3;
13
+ elements: Num3x3;
14
+ };
15
+ export type IDBBox2 = IDB & {
16
+ type: EN_GEO_TYPE.Box2;
17
+ minX: number;
18
+ minY: number;
19
+ maxX: number;
20
+ maxY: number;
21
+ };
22
+ export type IDBCoord2D = IDB & {
23
+ type: EN_GEO_TYPE.Coord2D;
24
+ origin: {
25
+ x: number;
26
+ y: number;
27
+ };
28
+ xAxis: {
29
+ x: number;
30
+ y: number;
31
+ };
32
+ yAxis: {
33
+ x: number;
34
+ y: number;
35
+ };
36
+ };
37
+ export type IDBLine2 = IDB & {
38
+ type: EN_GEO_TYPE.Line2;
39
+ start: {
40
+ x: number;
41
+ y: number;
42
+ };
43
+ end: {
44
+ x: number;
45
+ y: number;
46
+ };
47
+ };
48
+ export type IDBCircle2 = IDB & {
49
+ type: EN_GEO_TYPE.Circle2;
50
+ center: {
51
+ x: number;
52
+ y: number;
53
+ };
54
+ radius: number;
55
+ };
56
+ export type IDBArc2 = IDB & {
57
+ type: EN_GEO_TYPE.Arc2;
58
+ center: {
59
+ x: number;
60
+ y: number;
61
+ };
62
+ radius: number;
63
+ startAngle: number;
64
+ endAngle: number;
65
+ clockwise: boolean;
66
+ };
67
+ export type IDBEllipse2 = IDB & {
68
+ type: EN_GEO_TYPE.Ellipse2;
69
+ center: {
70
+ x: number;
71
+ y: number;
72
+ };
73
+ rx: number;
74
+ ry: number;
75
+ rotation: number;
76
+ };
77
+ export type IDBEllipseArc2 = IDB & {
78
+ type: EN_GEO_TYPE.EllipseArc2;
79
+ center: {
80
+ x: number;
81
+ y: number;
82
+ };
83
+ rx: number;
84
+ ry: number;
85
+ rotation: number;
86
+ startAngle: number;
87
+ endAngle: number;
88
+ clockwise: boolean;
89
+ };
90
+ export type IDBBSpline2 = IDB & {
91
+ type: EN_GEO_TYPE.BSpline2;
92
+ controlPoints: Array<{
93
+ x: number;
94
+ y: number;
95
+ }>;
96
+ degree: number;
97
+ expandedKnots: number[];
98
+ weights?: number[];
99
+ isPeriodic?: boolean;
100
+ };
101
+ //# sourceMappingURL=dump_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump_types.d.ts","sourceRoot":"","sources":["../../src/serialize/dump_types.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG;IACd,IAAI,EAAE,WAAW,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAA;IACtB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG;IAC3B,IAAI,EAAE,WAAW,CAAC,OAAO,CAAA;IACzB,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG;IACzB,IAAI,EAAE,WAAW,CAAC,KAAK,CAAA;IACvB,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG;IAC3B,IAAI,EAAE,WAAW,CAAC,OAAO,CAAA;IACzB,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAA;IACtB,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG;IAC5B,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAA;IAC1B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC,WAAW,CAAA;IAC7B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG;IAC5B,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAA;IAC1B,aAAa,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA"}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Linea Math - Serialize
3
+ * 序列化结构类型定义
4
+ */
5
+ export {};
@@ -0,0 +1,24 @@
1
+ import type { Ctor } from '../types/type_guard';
2
+ import type { IDB } from './dump_types';
3
+ /** 实例侧 dump 协议 */
4
+ export interface IDumpable<TDump extends IDB = IDB> {
5
+ dump(): TDump;
6
+ }
7
+ /** 静态侧 load 协议 */
8
+ export interface ILoadable<TDump extends IDB, T> {
9
+ readonly type: string;
10
+ load(data: TDump): T;
11
+ }
12
+ /** 几何类型管理器 */
13
+ export declare class GeomMgr {
14
+ private readonly map;
15
+ /** 注册可加载类型构造器 */
16
+ register<TDump extends IDB, T>(ctor: ILoadable<TDump, T>): this;
17
+ /** 统一加载入口 */
18
+ load<T>(data: IDB & Record<string, unknown>): T;
19
+ }
20
+ /** 全局注册中心 */
21
+ export declare const geomMgr: GeomMgr;
22
+ /** 自动注册装饰器 */
23
+ export declare function RegisterGeom<T extends Ctor & ILoadable<IDB, unknown>>(Ctor: T): void;
24
+ //# sourceMappingURL=geom_mgr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geom_mgr.d.ts","sourceRoot":"","sources":["../../src/serialize/geom_mgr.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAEvC,kBAAkB;AAClB,MAAM,WAAW,SAAS,CAAC,KAAK,SAAS,GAAG,GAAG,GAAG;IAC9C,IAAI,IAAI,KAAK,CAAA;CAChB;AAED,kBAAkB;AAClB,MAAM,WAAW,SAAS,CAAC,KAAK,SAAS,GAAG,EAAE,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAA;CACvB;AAED,cAAc;AACd,qBAAa,OAAO;IAChB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6C;IAEjE,iBAAiB;IACV,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAK/D,aAAa;IACN,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAKpB,CAAC;CAElC;AAED,aAAa;AACb,eAAO,MAAM,OAAO,SAAgB,CAAA;AAEpC,cAAc;AACd,wBAAgB,YAAY,CAAC,CAAC,SAAS,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,QAE7E"}
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Linea Math - Serialize
3
+ * 统一的 dump/load 注册中心
4
+ */
5
+ import { MathError } from '../utils/math_error';
6
+ /** 几何类型管理器 */
7
+ export class GeomMgr {
8
+ constructor() {
9
+ this.map = new Map();
10
+ }
11
+ /** 注册可加载类型构造器 */
12
+ register(ctor) {
13
+ this.map.set(ctor.type, ctor);
14
+ return this;
15
+ }
16
+ /** 统一加载入口 */
17
+ load(data) {
18
+ const ctor = this.map.get(data.type);
19
+ if (!ctor) {
20
+ MathError.throw(`GeomMgr.load: unknown type ${data.type}`);
21
+ }
22
+ return ctor.load(data);
23
+ }
24
+ }
25
+ /** 全局注册中心 */
26
+ export const geomMgr = new GeomMgr();
27
+ /** 自动注册装饰器 */
28
+ export function RegisterGeom(Ctor) {
29
+ geomMgr.register(Ctor);
30
+ }
@@ -0,0 +1,29 @@
1
+ import type { Num3x3 } from './type_guard';
2
+ /** 二维向量类型 */
3
+ export interface IVec2 {
4
+ x: number;
5
+ y: number;
6
+ }
7
+ /** 二维带权点(可用于齐次坐标或加权几何计算) */
8
+ export interface IWeightedPoint2 extends IVec2 {
9
+ w: number;
10
+ }
11
+ /** 二维坐标轴枚举 */
12
+ export declare enum Axis2D {
13
+ X = "x",
14
+ Y = "y"
15
+ }
16
+ /** 3x3 矩阵类型(对外行主序) */
17
+ export interface IMat3 {
18
+ elements: Num3x3;
19
+ }
20
+ /** 曲线最近点查询结果 */
21
+ export interface IClosestPointResult {
22
+ /** 最近点坐标 */
23
+ point: IVec2;
24
+ /** 最近点对应参数 */
25
+ param: number;
26
+ /** 查询点到曲线的距离 */
27
+ distance: number;
28
+ }
29
+ //# sourceMappingURL=type_define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_define.d.ts","sourceRoot":"","sources":["../../src/types/type_define.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,aAAa;AACb,MAAM,WAAW,KAAK;IAClB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAgB,SAAQ,KAAK;IAC1C,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,cAAc;AACd,oBAAY,MAAM;IACd,CAAC,MAAM;IACP,CAAC,MAAM;CACV;AAED,sBAAsB;AACtB,MAAM,WAAW,KAAK;IAClB,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAChC,YAAY;IACZ,KAAK,EAAE,KAAK,CAAA;IACZ,cAAc;IACd,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;CACnB"}
@@ -0,0 +1,10 @@
1
+ /*
2
+ * Linea Math - Types
3
+ * 数学库相关的通用类型定义
4
+ */
5
+ /** 二维坐标轴枚举 */
6
+ export var Axis2D;
7
+ (function (Axis2D) {
8
+ Axis2D["X"] = "x";
9
+ Axis2D["Y"] = "y";
10
+ })(Axis2D || (Axis2D = {}));
@@ -0,0 +1,46 @@
1
+ export type Ctor<T = unknown> = abstract new (...args: any[]) => T;
2
+ /** 2D 向量元组 */
3
+ export type Num2 = readonly [number, number];
4
+ /** 3D 向量元组 */
5
+ export type Num3 = readonly [number, number, number];
6
+ /** 4D 向量元组 */
7
+ export type Num4 = readonly [number, number, number, number];
8
+ /** 2x2 矩阵行主序数组 */
9
+ export type Num2x2 = readonly [
10
+ number,
11
+ number,
12
+ number,
13
+ number
14
+ ];
15
+ /** 3x3 矩阵行主序数组 */
16
+ export type Num3x3 = readonly [
17
+ number,
18
+ number,
19
+ number,
20
+ number,
21
+ number,
22
+ number,
23
+ number,
24
+ number,
25
+ number
26
+ ];
27
+ /** 4x4 矩阵行主序数组 */
28
+ export type Num4x4 = readonly [
29
+ number,
30
+ number,
31
+ number,
32
+ number,
33
+ number,
34
+ number,
35
+ number,
36
+ number,
37
+ number,
38
+ number,
39
+ number,
40
+ number,
41
+ number,
42
+ number,
43
+ number,
44
+ number
45
+ ];
46
+ //# sourceMappingURL=type_guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_guard.d.ts","sourceRoot":"","sources":["../../src/types/type_guard.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAElE,cAAc;AACd,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE5C,cAAc;AACd,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpD,cAAc;AACd,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAE5D,kBAAkB;AAClB,MAAM,MAAM,MAAM,GAAG,SAAS;IAC1B,MAAM;IAAE,MAAM;IACd,MAAM;IAAE,MAAM;CACjB,CAAA;AAED,kBAAkB;AAClB,MAAM,MAAM,MAAM,GAAG,SAAS;IAC1B,MAAM;IAAE,MAAM;IAAE,MAAM;IACtB,MAAM;IAAE,MAAM;IAAE,MAAM;IACtB,MAAM;IAAE,MAAM;IAAE,MAAM;CACzB,CAAA;AAED,kBAAkB;AAClB,MAAM,MAAM,MAAM,GAAG,SAAS;IAC1B,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAC9B,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAC9B,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;IAC9B,MAAM;IAAE,MAAM;IAAE,MAAM;IAAE,MAAM;CACjC,CAAA"}
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Linea Math - Types
3
+ * 类型安全相关的辅助定义
4
+ */
5
+ export {};
@@ -0,0 +1,16 @@
1
+ export declare class MathError extends Error {
2
+ constructor(message: string);
3
+ /**
4
+ * 直接抛出 MathError,用于显式失败场景
5
+ */
6
+ static throw(message: string): never;
7
+ /**
8
+ * 条件不满足时抛出 MathError,用于参数校验或逻辑保护
9
+ */
10
+ static assert(condition: unknown, message: string): asserts condition;
11
+ /**
12
+ * 仅警告,不抛异常;用于数值退化或可容忍的异常情形
13
+ */
14
+ static warn(message: string): void;
15
+ }
16
+ //# sourceMappingURL=math_error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math_error.d.ts","sourceRoot":"","sources":["../../src/utils/math_error.ts"],"names":[],"mappings":"AAUA,qBAAa,SAAU,SAAQ,KAAK;gBACpB,OAAO,EAAE,MAAM;IAK3B;;OAEG;WACW,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK;IAI3C;;OAEG;WACW,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS;IAM5E;;OAEG;WACW,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG5C"}
@@ -0,0 +1,35 @@
1
+ /*
2
+ * Linea Math - Utils
3
+ * MathError: 统一异常处理入口
4
+ *
5
+ * 用法示例:
6
+ * - MathError.throw('参数超出范围')
7
+ * - MathError.assert(radius > 0, '半径必须为正')
8
+ * - MathError.warn('数值迭代未收敛')
9
+ */
10
+ export class MathError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = 'MathError';
14
+ }
15
+ /**
16
+ * 直接抛出 MathError,用于显式失败场景
17
+ */
18
+ static throw(message) {
19
+ throw new MathError(message);
20
+ }
21
+ /**
22
+ * 条件不满足时抛出 MathError,用于参数校验或逻辑保护
23
+ */
24
+ static assert(condition, message) {
25
+ if (!condition) {
26
+ MathError.throw(message);
27
+ }
28
+ }
29
+ /**
30
+ * 仅警告,不抛异常;用于数值退化或可容忍的异常情形
31
+ */
32
+ static warn(message) {
33
+ console.warn(`[MathError] ${message}`);
34
+ }
35
+ }
@@ -0,0 +1,9 @@
1
+ export declare class MathUtils {
2
+ /** 将数值限制在 [min, max] 区间内 */
3
+ static clamp(x: number, min: number, max: number): number;
4
+ /** 线性插值 */
5
+ static lerp(a: number, b: number, t: number): number;
6
+ /** 近似相等判断(Precision.equal 包装) */
7
+ static almostEqual(a: number, b: number, eps?: number): boolean;
8
+ }
9
+ //# sourceMappingURL=math_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math_utils.d.ts","sourceRoot":"","sources":["../../src/utils/math_utils.ts"],"names":[],"mappings":"AAQA,qBAAa,SAAS;IAClB,4BAA4B;WACd,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAOvD,WAAW;WACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAIlD,iCAAiC;WACnB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,SAAgB;CAGtE"}
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Linea Math - Utils
3
+ * MathUtils: 通用标量工具
4
+ */
5
+ import { MathError } from './math_error';
6
+ import { Precision } from './precision';
7
+ export class MathUtils {
8
+ /** 将数值限制在 [min, max] 区间内 */
9
+ static clamp(x, min, max) {
10
+ MathError.assert(min <= max, 'MathUtils.clamp: min must be <= max');
11
+ if (x < min)
12
+ return min;
13
+ if (x > max)
14
+ return max;
15
+ return x;
16
+ }
17
+ /** 线性插值 */
18
+ static lerp(a, b, t) {
19
+ return a + (b - a) * t;
20
+ }
21
+ /** 近似相等判断(Precision.equal 包装) */
22
+ static almostEqual(a, b, eps = Precision.EPS) {
23
+ return Precision.equal(a, b, eps);
24
+ }
25
+ }
@@ -0,0 +1,29 @@
1
+ export declare class Precision {
2
+ /** 通用数值容差 */
3
+ static EPS: number;
4
+ /** 长度与近零判断容差 */
5
+ static LEN_EPS: number;
6
+ /** 角度容差(弧度) */
7
+ static ANG_EPS: number;
8
+ /** 曲线参数域容差(求值与区间校验) */
9
+ static CURVE_PARAM_EPS: number;
10
+ /** 曲线长度/距离相关容差 */
11
+ static CURVE_LENGTH_EPS: number;
12
+ /** 曲线长度容差的平方 */
13
+ static CURVE_LENGTH_EPS_SQ: number;
14
+ /** 曲线牛顿迭代收敛容差 */
15
+ static CURVE_NEWTON_EPS: number;
16
+ /** 曲线求解最大迭代次数,避免死循环 */
17
+ static CURVE_MAX_ITER: number;
18
+ /** 自适应积分最大递归深度 */
19
+ static CURVE_INTEGRAL_MAX_DEPTH: number;
20
+ /** 近似相等判断:绝对误差 + 相对误差 */
21
+ static equal(a: number, b: number, eps?: number): boolean;
22
+ /** 近零判断 */
23
+ static nearlyZero(x: number, eps?: number): boolean;
24
+ /** 平方量近零判断(避免频繁开方) */
25
+ static nearlyZeroSq(x: number, eps?: number): boolean;
26
+ /** 角度近似相等判断(弧度) */
27
+ static angleEqual(a: number, b: number, eps?: number): boolean;
28
+ }
29
+ //# sourceMappingURL=precision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"precision.d.ts","sourceRoot":"","sources":["../../src/utils/precision.ts"],"names":[],"mappings":"AAKA,qBAAa,SAAS;IAClB,aAAa;IACb,OAAc,GAAG,SAAO;IAExB,gBAAgB;IAChB,OAAc,OAAO,SAAQ;IAE7B,eAAe;IACf,OAAc,OAAO,SAAO;IAE5B,uBAAuB;IACvB,OAAc,eAAe,SAAO;IAEpC,kBAAkB;IAClB,OAAc,gBAAgB,SAAO;IAErC,gBAAgB;IAChB,OAAc,mBAAmB,SAA0D;IAE3F,iBAAiB;IACjB,OAAc,gBAAgB,SAAQ;IAEtC,uBAAuB;IACvB,OAAc,cAAc,SAAK;IAEjC,kBAAkB;IAClB,OAAc,wBAAwB,SAAK;IAE3C,yBAAyB;WACX,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,SAAgB;IAO7D,WAAW;WACG,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB;IAI3D,sBAAsB;WACR,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB;IAI7D,mBAAmB;WACL,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,SAAoB;CAGzE"}
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Linea Math - Utils
3
+ * Precision: 集中定义数值容差与比较工具
4
+ */
5
+ export class Precision {
6
+ /** 近似相等判断:绝对误差 + 相对误差 */
7
+ static equal(a, b, eps = Precision.EPS) {
8
+ const diff = Math.abs(a - b);
9
+ if (diff <= eps)
10
+ return true;
11
+ const max = Math.max(1, Math.abs(a), Math.abs(b));
12
+ return diff <= eps * max;
13
+ }
14
+ /** 近零判断 */
15
+ static nearlyZero(x, eps = Precision.LEN_EPS) {
16
+ return Math.abs(x) <= eps;
17
+ }
18
+ /** 平方量近零判断(避免频繁开方) */
19
+ static nearlyZeroSq(x, eps = Precision.LEN_EPS) {
20
+ return x <= eps * eps;
21
+ }
22
+ /** 角度近似相等判断(弧度) */
23
+ static angleEqual(a, b, eps = Precision.ANG_EPS) {
24
+ return Precision.equal(a, b, eps);
25
+ }
26
+ }
27
+ /** 通用数值容差 */
28
+ Precision.EPS = 1e-9;
29
+ /** 长度与近零判断容差 */
30
+ Precision.LEN_EPS = 1e-12;
31
+ /** 角度容差(弧度) */
32
+ Precision.ANG_EPS = 1e-6;
33
+ /** 曲线参数域容差(求值与区间校验) */
34
+ Precision.CURVE_PARAM_EPS = 1e-9;
35
+ /** 曲线长度/距离相关容差 */
36
+ Precision.CURVE_LENGTH_EPS = 1e-8;
37
+ /** 曲线长度容差的平方 */
38
+ Precision.CURVE_LENGTH_EPS_SQ = Precision.CURVE_LENGTH_EPS * Precision.CURVE_LENGTH_EPS;
39
+ /** 曲线牛顿迭代收敛容差 */
40
+ Precision.CURVE_NEWTON_EPS = 1e-10;
41
+ /** 曲线求解最大迭代次数,避免死循环 */
42
+ Precision.CURVE_MAX_ITER = 50;
43
+ /** 自适应积分最大递归深度 */
44
+ Precision.CURVE_INTEGRAL_MAX_DEPTH = 12;
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@ccpc/math",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "description": "2D geometry and curve math library",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "scripts": {
25
+ "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput",
26
+ "build": "tsc -p tsconfig.json",
27
+ "lint": "eslint . --ext .ts",
28
+ "lint:fix": "eslint . --ext .ts --fix",
29
+ "test": "vitest",
30
+ "test:run": "vitest run",
31
+ "test:coverage": "vitest run --coverage",
32
+ "prepublishOnly": "pnpm run build && pnpm run test:run"
33
+ },
34
+ "devDependencies": {
35
+ "@vitest/coverage-v8": "^4.0.18",
36
+ "vitest": "^4.0.18"
37
+ }
38
+ }