cesium-to-three 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 (184) hide show
  1. package/README.md +226 -0
  2. package/dist/arrow.js +523 -0
  3. package/dist/arrow.js.map +1 -0
  4. package/dist/ground.js +34 -0
  5. package/dist/ground.js.map +1 -0
  6. package/dist/index.js +34 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/text-primitive-Ci0sbuh1.js +60066 -0
  9. package/dist/text-primitive-Ci0sbuh1.js.map +1 -0
  10. package/dist/types/cesium-three-ground.d.ts +2 -0
  11. package/dist/types/cesium-three-ground.d.ts.map +1 -0
  12. package/dist/types/lib/arrow/arrow-curves.d.ts +73 -0
  13. package/dist/types/lib/arrow/arrow-curves.d.ts.map +1 -0
  14. package/dist/types/lib/arrow/arrow-geometry.d.ts +140 -0
  15. package/dist/types/lib/arrow/arrow-geometry.d.ts.map +1 -0
  16. package/dist/types/lib/arrow/arrow-polygon.d.ts +87 -0
  17. package/dist/types/lib/arrow/arrow-polygon.d.ts.map +1 -0
  18. package/dist/types/lib/arrow/arrow-types.d.ts +152 -0
  19. package/dist/types/lib/arrow/arrow-types.d.ts.map +1 -0
  20. package/dist/types/lib/arrow/index.d.ts +8 -0
  21. package/dist/types/lib/arrow/index.d.ts.map +1 -0
  22. package/dist/types/lib/arrow/shapes/assault-direction-arrow.d.ts +20 -0
  23. package/dist/types/lib/arrow/shapes/assault-direction-arrow.d.ts.map +1 -0
  24. package/dist/types/lib/arrow/shapes/attack-arrow.d.ts +56 -0
  25. package/dist/types/lib/arrow/shapes/attack-arrow.d.ts.map +1 -0
  26. package/dist/types/lib/arrow/shapes/curved-arrow.d.ts +10 -0
  27. package/dist/types/lib/arrow/shapes/curved-arrow.d.ts.map +1 -0
  28. package/dist/types/lib/arrow/shapes/fine-arrow.d.ts +23 -0
  29. package/dist/types/lib/arrow/shapes/fine-arrow.d.ts.map +1 -0
  30. package/dist/types/lib/arrow/shapes/swallowtail-attack-arrow.d.ts +12 -0
  31. package/dist/types/lib/arrow/shapes/swallowtail-attack-arrow.d.ts.map +1 -0
  32. package/dist/types/lib/ground/cesium-ground-adapter.d.ts +9 -0
  33. package/dist/types/lib/ground/cesium-ground-adapter.d.ts.map +1 -0
  34. package/dist/types/lib/ground/circle/circle-construct-extruded.d.ts +62 -0
  35. package/dist/types/lib/ground/circle/circle-construct-extruded.d.ts.map +1 -0
  36. package/dist/types/lib/ground/circle/circle-extents.d.ts +23 -0
  37. package/dist/types/lib/ground/circle/circle-extents.d.ts.map +1 -0
  38. package/dist/types/lib/ground/circle/circle-options.d.ts +59 -0
  39. package/dist/types/lib/ground/circle/circle-options.d.ts.map +1 -0
  40. package/dist/types/lib/ground/circle/circle-positions.d.ts +56 -0
  41. package/dist/types/lib/ground/circle/circle-positions.d.ts.map +1 -0
  42. package/dist/types/lib/ground/circle/circle-shadow-volume.d.ts +24 -0
  43. package/dist/types/lib/ground/circle/circle-shadow-volume.d.ts.map +1 -0
  44. package/dist/types/lib/ground/circle/circle-top-bottom.d.ts +70 -0
  45. package/dist/types/lib/ground/circle/circle-top-bottom.d.ts.map +1 -0
  46. package/dist/types/lib/ground/circle/circle-top-indices.d.ts +28 -0
  47. package/dist/types/lib/ground/circle/circle-top-indices.d.ts.map +1 -0
  48. package/dist/types/lib/ground/circle/circle-wall-construction.d.ts +75 -0
  49. package/dist/types/lib/ground/circle/circle-wall-construction.d.ts.map +1 -0
  50. package/dist/types/lib/ground/classification.d.ts +124 -0
  51. package/dist/types/lib/ground/classification.d.ts.map +1 -0
  52. package/dist/types/lib/ground/constants.d.ts +26 -0
  53. package/dist/types/lib/ground/constants.d.ts.map +1 -0
  54. package/dist/types/lib/ground/depth.d.ts +63 -0
  55. package/dist/types/lib/ground/depth.d.ts.map +1 -0
  56. package/dist/types/lib/ground/geometry.d.ts +12 -0
  57. package/dist/types/lib/ground/geometry.d.ts.map +1 -0
  58. package/dist/types/lib/ground/index.d.ts +6 -0
  59. package/dist/types/lib/ground/index.d.ts.map +1 -0
  60. package/dist/types/lib/ground/line/line-arrowhead.d.ts +67 -0
  61. package/dist/types/lib/ground/line/line-arrowhead.d.ts.map +1 -0
  62. package/dist/types/lib/ground/line/line-densify.d.ts +35 -0
  63. package/dist/types/lib/ground/line/line-densify.d.ts.map +1 -0
  64. package/dist/types/lib/ground/line/line-geometry-normals.d.ts +49 -0
  65. package/dist/types/lib/ground/line/line-geometry-normals.d.ts.map +1 -0
  66. package/dist/types/lib/ground/line/line-options.d.ts +54 -0
  67. package/dist/types/lib/ground/line/line-options.d.ts.map +1 -0
  68. package/dist/types/lib/ground/line/line-preprocess.d.ts +12 -0
  69. package/dist/types/lib/ground/line/line-preprocess.d.ts.map +1 -0
  70. package/dist/types/lib/ground/line/line-segment-attributes.d.ts +24 -0
  71. package/dist/types/lib/ground/line/line-segment-attributes.d.ts.map +1 -0
  72. package/dist/types/lib/ground/line/line-shadow-volume.d.ts +25 -0
  73. package/dist/types/lib/ground/line/line-shadow-volume.d.ts.map +1 -0
  74. package/dist/types/lib/ground/line/line-types.d.ts +74 -0
  75. package/dist/types/lib/ground/line/line-types.d.ts.map +1 -0
  76. package/dist/types/lib/ground/materials.d.ts +69 -0
  77. package/dist/types/lib/ground/materials.d.ts.map +1 -0
  78. package/dist/types/lib/ground/math/cartographic.d.ts +27 -0
  79. package/dist/types/lib/ground/math/cartographic.d.ts.map +1 -0
  80. package/dist/types/lib/ground/math/constants.d.ts +20 -0
  81. package/dist/types/lib/ground/math/constants.d.ts.map +1 -0
  82. package/dist/types/lib/ground/math/ellipsoid-geodesic.d.ts +93 -0
  83. package/dist/types/lib/ground/math/ellipsoid-geodesic.d.ts.map +1 -0
  84. package/dist/types/lib/ground/math/ellipsoid-rhumb-line.d.ts +45 -0
  85. package/dist/types/lib/ground/math/ellipsoid-rhumb-line.d.ts.map +1 -0
  86. package/dist/types/lib/ground/math/ellipsoid.d.ts +94 -0
  87. package/dist/types/lib/ground/math/ellipsoid.d.ts.map +1 -0
  88. package/dist/types/lib/ground/math/enu-frame.d.ts +27 -0
  89. package/dist/types/lib/ground/math/enu-frame.d.ts.map +1 -0
  90. package/dist/types/lib/ground/math/matrix4-helpers.d.ts +20 -0
  91. package/dist/types/lib/ground/math/matrix4-helpers.d.ts.map +1 -0
  92. package/dist/types/lib/ground/math/rte-encoding.d.ts +51 -0
  93. package/dist/types/lib/ground/math/rte-encoding.d.ts.map +1 -0
  94. package/dist/types/lib/ground/math/vec3-helpers.d.ts +50 -0
  95. package/dist/types/lib/ground/math/vec3-helpers.d.ts.map +1 -0
  96. package/dist/types/lib/ground/math/wgs84-helpers.d.ts +22 -0
  97. package/dist/types/lib/ground/math/wgs84-helpers.d.ts.map +1 -0
  98. package/dist/types/lib/ground/polygon/ellipsoid-tangent-plane.d.ts +71 -0
  99. package/dist/types/lib/ground/polygon/ellipsoid-tangent-plane.d.ts.map +1 -0
  100. package/dist/types/lib/ground/polygon/polygon-cap-construction.d.ts +59 -0
  101. package/dist/types/lib/ground/polygon/polygon-cap-construction.d.ts.map +1 -0
  102. package/dist/types/lib/ground/polygon/polygon-construct-extruded.d.ts +44 -0
  103. package/dist/types/lib/ground/polygon/polygon-construct-extruded.d.ts.map +1 -0
  104. package/dist/types/lib/ground/polygon/polygon-extents.d.ts +24 -0
  105. package/dist/types/lib/ground/polygon/polygon-extents.d.ts.map +1 -0
  106. package/dist/types/lib/ground/polygon/polygon-helpers.d.ts +76 -0
  107. package/dist/types/lib/ground/polygon/polygon-helpers.d.ts.map +1 -0
  108. package/dist/types/lib/ground/polygon/polygon-hierarchy.d.ts +60 -0
  109. package/dist/types/lib/ground/polygon/polygon-hierarchy.d.ts.map +1 -0
  110. package/dist/types/lib/ground/polygon/polygon-offset.d.ts +15 -0
  111. package/dist/types/lib/ground/polygon/polygon-offset.d.ts.map +1 -0
  112. package/dist/types/lib/ground/polygon/polygon-options.d.ts +41 -0
  113. package/dist/types/lib/ground/polygon/polygon-options.d.ts.map +1 -0
  114. package/dist/types/lib/ground/polygon/polygon-rectangle.d.ts +30 -0
  115. package/dist/types/lib/ground/polygon/polygon-rectangle.d.ts.map +1 -0
  116. package/dist/types/lib/ground/polygon/polygon-rings.d.ts +64 -0
  117. package/dist/types/lib/ground/polygon/polygon-rings.d.ts.map +1 -0
  118. package/dist/types/lib/ground/polygon/polygon-shadow-volume.d.ts +39 -0
  119. package/dist/types/lib/ground/polygon/polygon-shadow-volume.d.ts.map +1 -0
  120. package/dist/types/lib/ground/polygon/polygon-style-points.d.ts +29 -0
  121. package/dist/types/lib/ground/polygon/polygon-style-points.d.ts.map +1 -0
  122. package/dist/types/lib/ground/polygon/polygon-subdivide-line.d.ts +93 -0
  123. package/dist/types/lib/ground/polygon/polygon-subdivide-line.d.ts.map +1 -0
  124. package/dist/types/lib/ground/polygon/polygon-subdivide-triangle.d.ts +53 -0
  125. package/dist/types/lib/ground/polygon/polygon-subdivide-triangle.d.ts.map +1 -0
  126. package/dist/types/lib/ground/polygon/polygon-wall-construction.d.ts +77 -0
  127. package/dist/types/lib/ground/polygon/polygon-wall-construction.d.ts.map +1 -0
  128. package/dist/types/lib/ground/polygon/triangulation.d.ts +40 -0
  129. package/dist/types/lib/ground/polygon/triangulation.d.ts.map +1 -0
  130. package/dist/types/lib/ground/primitives.d.ts +262 -0
  131. package/dist/types/lib/ground/primitives.d.ts.map +1 -0
  132. package/dist/types/lib/ground/rectangle/rectangle-attributes.d.ts +29 -0
  133. package/dist/types/lib/ground/rectangle/rectangle-attributes.d.ts.map +1 -0
  134. package/dist/types/lib/ground/rectangle/rectangle-construct-cap.d.ts +53 -0
  135. package/dist/types/lib/ground/rectangle/rectangle-construct-cap.d.ts.map +1 -0
  136. package/dist/types/lib/ground/rectangle/rectangle-construct-extruded.d.ts +35 -0
  137. package/dist/types/lib/ground/rectangle/rectangle-construct-extruded.d.ts.map +1 -0
  138. package/dist/types/lib/ground/rectangle/rectangle-debug.d.ts +22 -0
  139. package/dist/types/lib/ground/rectangle/rectangle-debug.d.ts.map +1 -0
  140. package/dist/types/lib/ground/rectangle/rectangle-extents.d.ts +33 -0
  141. package/dist/types/lib/ground/rectangle/rectangle-extents.d.ts.map +1 -0
  142. package/dist/types/lib/ground/rectangle/rectangle-grid.d.ts +76 -0
  143. package/dist/types/lib/ground/rectangle/rectangle-grid.d.ts.map +1 -0
  144. package/dist/types/lib/ground/rectangle/rectangle-helpers.d.ts +103 -0
  145. package/dist/types/lib/ground/rectangle/rectangle-helpers.d.ts.map +1 -0
  146. package/dist/types/lib/ground/rectangle/rectangle-options.d.ts +21 -0
  147. package/dist/types/lib/ground/rectangle/rectangle-options.d.ts.map +1 -0
  148. package/dist/types/lib/ground/rectangle/rectangle-radians.d.ts +51 -0
  149. package/dist/types/lib/ground/rectangle/rectangle-radians.d.ts.map +1 -0
  150. package/dist/types/lib/ground/rectangle/rectangle-shadow-volume.d.ts +28 -0
  151. package/dist/types/lib/ground/rectangle/rectangle-shadow-volume.d.ts.map +1 -0
  152. package/dist/types/lib/ground/terrain-heights.d.ts +65 -0
  153. package/dist/types/lib/ground/terrain-heights.d.ts.map +1 -0
  154. package/dist/types/lib/ground/terrain-log-depth.d.ts +32 -0
  155. package/dist/types/lib/ground/terrain-log-depth.d.ts.map +1 -0
  156. package/dist/types/lib/ground/text/index.d.ts +7 -0
  157. package/dist/types/lib/ground/text/index.d.ts.map +1 -0
  158. package/dist/types/lib/ground/text/text-canvas.d.ts +22 -0
  159. package/dist/types/lib/ground/text/text-canvas.d.ts.map +1 -0
  160. package/dist/types/lib/ground/text/text-color.d.ts +28 -0
  161. package/dist/types/lib/ground/text/text-color.d.ts.map +1 -0
  162. package/dist/types/lib/ground/text/text-construct-extruded.d.ts +27 -0
  163. package/dist/types/lib/ground/text/text-construct-extruded.d.ts.map +1 -0
  164. package/dist/types/lib/ground/text/text-defaults.d.ts +12 -0
  165. package/dist/types/lib/ground/text/text-defaults.d.ts.map +1 -0
  166. package/dist/types/lib/ground/text/text-extents.d.ts +19 -0
  167. package/dist/types/lib/ground/text/text-extents.d.ts.map +1 -0
  168. package/dist/types/lib/ground/text/text-layout.d.ts +18 -0
  169. package/dist/types/lib/ground/text/text-layout.d.ts.map +1 -0
  170. package/dist/types/lib/ground/text/text-options.d.ts +26 -0
  171. package/dist/types/lib/ground/text/text-options.d.ts.map +1 -0
  172. package/dist/types/lib/ground/text/text-placement.d.ts +34 -0
  173. package/dist/types/lib/ground/text/text-placement.d.ts.map +1 -0
  174. package/dist/types/lib/ground/text/text-primitive.d.ts +74 -0
  175. package/dist/types/lib/ground/text/text-primitive.d.ts.map +1 -0
  176. package/dist/types/lib/ground/text/text-shadow-volume.d.ts +21 -0
  177. package/dist/types/lib/ground/text/text-shadow-volume.d.ts.map +1 -0
  178. package/dist/types/lib/ground/text/text-types.d.ts +156 -0
  179. package/dist/types/lib/ground/text/text-types.d.ts.map +1 -0
  180. package/dist/types/lib/ground/types.d.ts +484 -0
  181. package/dist/types/lib/ground/types.d.ts.map +1 -0
  182. package/dist/types/lib/ground/validation.d.ts +8 -0
  183. package/dist/types/lib/ground/validation.d.ts.map +1 -0
  184. package/package.json +54 -0
@@ -0,0 +1,2 @@
1
+ export * from './lib/ground';
2
+ //# sourceMappingURL=cesium-three-ground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cesium-three-ground.d.ts","sourceRoot":"","sources":["../../src/cesium-three-ground.ts"],"names":[],"mappings":"AAQA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { LonLatPoint } from './arrow-types';
2
+ /**
3
+ * Centripetal Catmull-Rom 样条采样。
4
+ *
5
+ * 算法步骤:
6
+ * 1. 对原始控制点序列两端各 mirror 一个虚拟点,使两端段也能用 CR 公式。
7
+ * 镜像点 = `2 * P_endpoint - P_neighbor`,效果等价于"端点处切线与
8
+ * 首/末段平行",视觉上箭头不会在端点处突然偏离方向。
9
+ * 2. 对每相邻 4 个点 P0 P1 P2 P3 计算从 P1 到 P2 的 CR 段,共 N 段。
10
+ * 3. 每段内按"中心向参数化"(centripetal,α = 0.5)的 t 间隔均匀采样
11
+ * `segmentSamples + 1` 个点(含端点,排除下段重复)。
12
+ * 4. 在段间共享端点(不重复),最后追加最后一个原始控制点。
13
+ *
14
+ * 输出长度公式:
15
+ * `1 + (controlPoints.length - 1) * segmentSamples`
16
+ * 例:5 个控制点 × 12 段采样 = 1 + 4*12 = 49 个输出点。
17
+ *
18
+ * @param controlPoints 控制点序列,至少 2 个;少于 2 时原样返回。
19
+ * @param segmentSamples 每相邻控制点之间额外采样的点数(不含端点),≥ 1。
20
+ * @returns 平滑曲线点序列,严格通过所有原始控制点。
21
+ */
22
+ export declare function centripetalCatmullRomSamples(controlPoints: readonly LonLatPoint[], segmentSamples: number): LonLatPoint[];
23
+ /**
24
+ * 三次 Bézier 曲线段采样(用于 CurvedArrow 的脊线)。
25
+ *
26
+ * 公式 B(t) = (1-t)³·P0 + 3(1-t)²t·C1 + 3(1-t)t²·C2 + t³·P3
27
+ *
28
+ * 与 cesium-plot-js 的 getCubicValue 一致,这里只是单段采样;
29
+ * 整条 Bézier 链需要调用方在每段间用同样的控制点连接(C1 连续由
30
+ * 调用方保证控制点对称即可)。
31
+ *
32
+ * @param p0 起点。
33
+ * @param c1 第一个控制点。
34
+ * @param c2 第二个控制点。
35
+ * @param p3 终点。
36
+ * @param samples 段内采样数(不含两端),≥ 1。
37
+ * @returns 包含两端点的采样点序列,长度 samples + 1。
38
+ */
39
+ export declare function cubicBezierSegmentSamples(p0: LonLatPoint, c1: LonLatPoint, c2: LonLatPoint, p3: LonLatPoint, samples: number): LonLatPoint[];
40
+ /**
41
+ * 沿一条折线/曲线计算每点处的切线方向(单位向量)。
42
+ *
43
+ * 用于按 perpendicular offset 生成"等宽线条"的左右两条平行线。
44
+ * 中间点用中央差分(前后邻居距离归一),端点用前向/后向差分。
45
+ *
46
+ * @param points 至少 2 个点。
47
+ * @returns 与输入等长的单位切向量数组,每个元素 [tx, ty]。
48
+ */
49
+ export declare function computeTangents(points: readonly LonLatPoint[]): [number, number][];
50
+ /**
51
+ * 沿折线/曲线从末尾回退给定弧长,定位精确截断点。
52
+ *
53
+ * 用于 attack/swallowtail/curved 三类箭头里"把 spine 在 neck 处剪开"的需求:
54
+ * - body 部分用 spine[0..k] + 截断点
55
+ * - head 部分由调用方独立构造
56
+ *
57
+ * 算法:从最末样本开始往回累加段长,直到累加值刚好覆盖 distanceFromEnd。
58
+ * 截断点落在最后那个跨越阈值的线段内,用线性插值得到精确坐标。
59
+ *
60
+ * @param samples 至少 2 个点的密采折线/曲线。
61
+ * @param distanceFromEnd 截断点距 samples 末点的弧长。
62
+ * ≤ 0 时截断点即末点(localT = 1.0);
63
+ * ≥ totalLen 时返回 null(头部比脊线还长)。
64
+ * @returns 截断点 segmentIdx (起点索引)、 localT (∈[0,1])、 point (坐标)
65
+ * 的对象;距离不可达时返回 null。
66
+ */
67
+ export interface PolylineCutPoint {
68
+ segmentIdx: number;
69
+ localT: number;
70
+ point: LonLatPoint;
71
+ }
72
+ export declare function findPointAlongPolylineFromEnd(samples: readonly LonLatPoint[], distanceFromEnd: number): PolylineCutPoint | null;
73
+ //# sourceMappingURL=arrow-curves.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-curves.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrow/arrow-curves.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,CAC3C,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,cAAc,EAAE,MAAM,GACpB,WAAW,EAAE,CAiEf;AA2ED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GACb,WAAW,EAAE,CAgBf;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,SAAS,WAAW,EAAE,GAC5B,CAAE,MAAM,EAAE,MAAM,CAAE,EAAE,CAgCtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;CACnB;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,eAAe,EAAE,MAAM,GACrB,gBAAgB,GAAG,IAAI,CA2CzB"}
@@ -0,0 +1,140 @@
1
+ import type { LonLatPoint } from './arrow-types';
2
+ /**
3
+ * 在局部 WGS84 east/north 米制平面中运行箭头生成器。
4
+ *
5
+ * 箭头公式是欧氏几何:宽度、长度、角度必须共享同一单位。公开调用方传入
6
+ * WGS84 度制坐标,所以本辅助函数会先把控制点投影到局部米制坐标框架中
7
+ * 构造形状,再把输出环转换回 lon/lat 度。
8
+ *
9
+ * @param controlPoints 公开 WGS84 [lon, lat] 控制点,单位度。
10
+ * @param createLocalRing 消费局部 [east, north] 米制坐标的工厂函数。
11
+ * @returns 转换回 WGS84 度制后的工厂输出。
12
+ */
13
+ export declare function createArrowInLocalMeterPlane(controlPoints: readonly LonLatPoint[], createLocalRing: (localPoints: readonly LonLatPoint[]) => readonly LonLatPoint[]): LonLatPoint[];
14
+ /**
15
+ * 两点的欧氏距离(度坐标空间)。
16
+ *
17
+ * 注:经纬度被当成平面坐标,**不是**地球表面真实距离。本模块的箭头默认
18
+ * 跨度较小(< 数十公里),平面近似带来的形变可以忽略。如需长距离贴地
19
+ * 绘图,应改用大地线插值后再调用本函数。
20
+ *
21
+ * @param p1 第一个点 [lon°, lat°]。
22
+ * @param p2 第二个点 [lon°, lat°]。
23
+ * @returns 距离,度;两点重合时返回 0,不返回 NaN。
24
+ */
25
+ export declare function mathDistance(p1: LonLatPoint, p2: LonLatPoint): number;
26
+ /**
27
+ * 点序列的总折线长度(相邻点距离之和)。
28
+ *
29
+ * @param points 至少 1 个点。
30
+ * @returns 累积距离,度;单点序列返回 0。
31
+ */
32
+ export declare function wholeDistance(points: readonly LonLatPoint[]): number;
33
+ /**
34
+ * 基准长度 = 总折线长 ** 0.99。
35
+ *
36
+ * 与 cesium-plot-js 完全一致——指数 0.99 让长箭头的宽度增长稍慢于线性,
37
+ * 即"大的箭头不至于按比例同样粗"。指数 1.0 也能用,但视觉上长箭头会
38
+ * 显得"过粗"。
39
+ *
40
+ * @param points 控制点序列。
41
+ * @returns 基准长度(度的 0.99 次幂);空/单点返回 0。
42
+ */
43
+ export declare function getBaseLength(points: readonly LonLatPoint[]): number;
44
+ /**
45
+ * 两点的中点。
46
+ *
47
+ * @param p1 第一个点。
48
+ * @param p2 第二个点。
49
+ * @returns 新数组,两点坐标的算术平均。
50
+ */
51
+ export declare function mid(p1: LonLatPoint, p2: LonLatPoint): LonLatPoint;
52
+ /**
53
+ * 沿 startPnt → endPnt 反方向(即从 endPnt 看向 startPnt)的极角,弧度。
54
+ *
55
+ * 这是 cesium-plot-js 原 getAzimuth 的语义:`(cos α, sin α)` 是从 endPnt
56
+ * **指向** startPnt 的单位向量,而不是 start 到 end 的方向。
57
+ *
58
+ * 内部实现用 `Math.atan2(start.y - end.y, start.x - end.x)`,自然处理所有
59
+ * 四个象限以及轴对齐输入,返回范围 [-π, π]。
60
+ *
61
+ * 这与原项目用 asin + 四个 if 分支的实现等价但更稳健 —— 原实现在
62
+ * dx = 0 且 dy = 0 时 distance = 0 → asin(0/0) = NaN,
63
+ * 或 dx = 0 时四个分支没有覆盖到边界值,
64
+ * 都会让下游 getThirdPoint 返回 NaN,导致整个箭头消失或自交。
65
+ *
66
+ * @param startPnt 起点(在公式语义中代表"目标方向")。
67
+ * @param endPnt 终点(下游 getThirdPoint 会以此为锚点)。
68
+ * @returns 极角,弧度,范围 [-π, π];两点重合时返回 0(任意方向)。
69
+ */
70
+ export declare function azimuthBackward(startPnt: LonLatPoint, endPnt: LonLatPoint): number;
71
+ /**
72
+ * 三点共线判定:p1 → p2 → p3 是否顺时针。
73
+ *
74
+ * 用叉积符号判定:`(p2 - p1) × (p3 - p1) < 0` 时为顺时针(右手系)。
75
+ * 共线(叉积 = 0)时返回 false,与原 cesium-plot-js 行为一致。
76
+ *
77
+ * @param p1 第一个点。
78
+ * @param p2 第二个点。
79
+ * @param p3 第三个点。
80
+ * @returns true 表示顺时针,false 表示逆时针或共线。
81
+ */
82
+ export declare function isClockWise(p1: LonLatPoint, p2: LonLatPoint, p3: LonLatPoint): boolean;
83
+ /**
84
+ * 在 endPnt 处,沿 endPnt → startPnt 方向旋转 ±angle 弧度,前进 distance 距离。
85
+ *
86
+ * 这是箭头几何中最核心的工具——尾翼、颈部、翼尖等所有特殊位置都靠它从
87
+ * 一对参考点出发计算出来。
88
+ *
89
+ * 几何含义:
90
+ * 1. 取从 endPnt 看向 startPnt 的方向作为基准方向(azimuthBackward)。
91
+ * 2. clockwise = true 时顺时针(+angle)旋转,false 时逆时针(-angle)旋转。
92
+ * 3. 沿旋转后的方向从 endPnt 走 distance 度,返回到达的点。
93
+ *
94
+ * @param startPnt 起点(决定基准方向)。
95
+ * @param endPnt 终点(也是输出点的几何锚点)。
96
+ * @param angle 从基准方向偏转的角度,弧度,非负。
97
+ * @param distance 从 endPnt 出发的距离,度。
98
+ * @param clockwise 旋转方向:true = 顺时针,false = 逆时针。
99
+ * @returns 新数组,目标点 [lon°, lat°];输入含 NaN/无穷时返回 endPnt 副本。
100
+ */
101
+ export declare function getThirdPoint(startPnt: LonLatPoint, endPnt: LonLatPoint, angle: number, distance: number, clockwise: boolean): LonLatPoint;
102
+ /**
103
+ * 三点形成的内角(B 顶点处)。
104
+ *
105
+ * 用 azimuthBackward 而不是 atan2 的差,确保和原 cesium-plot-js 的
106
+ * `getAngleOfThreePoints` 在所有合法输入上数值一致。
107
+ *
108
+ * 返回的角度归一化到 [0, 2π) ——这一点对体部宽度计算的 sin(angle/2)
109
+ * 至关重要,如果返回负值会导致 sin 为负 → 宽度方向反转。
110
+ *
111
+ * @param a 第一个端点。
112
+ * @param b 中间顶点。
113
+ * @param c 第二个端点。
114
+ * @returns 角 ABC 的大小,弧度,范围 [0, 2π);任意点退化时返回 π(直线)。
115
+ */
116
+ export declare function getAngleOfThreePoints(a: LonLatPoint, b: LonLatPoint, c: LonLatPoint): number;
117
+ /**
118
+ * p2 处的"内向角平分线"方向向量(未归一化)。
119
+ *
120
+ * 几何含义:p1→p2 和 p3→p2 各自单位向量之和,指向 p2 内角的平分线方向。
121
+ * 共线时长度趋近于 0,调用方需检查长度判断退化。
122
+ *
123
+ * 主要用于曲线插值中确定 Bézier 控制点的偏移方向。
124
+ *
125
+ * @param p1 前一个点。
126
+ * @param p2 中间点(法向量从此处发出)。
127
+ * @param p3 后一个点。
128
+ * @returns [dx, dy] 法向量分量;p1 或 p3 与 p2 重合时返回 [0, 0]。
129
+ */
130
+ export declare function getNormalVector(p1: LonLatPoint, p2: LonLatPoint, p3: LonLatPoint): [number, number];
131
+ /**
132
+ * 把一个角度归一化到 [0, 2π)。
133
+ *
134
+ * 用于角度差运算后保证范围一致,避免后续 sin/cos 因周期性导致符号错误。
135
+ *
136
+ * @param angle 任意实数角度,弧度。
137
+ * @returns 归一化后角度,[0, 2π);输入 NaN 时返回 0。
138
+ */
139
+ export declare function normalizeAngle(angle: number): number;
140
+ //# sourceMappingURL=arrow-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-geometry.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrow/arrow-geometry.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkBjD;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC3C,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,eAAe,EAAE,CAAE,WAAW,EAAE,SAAS,WAAW,EAAE,KAAM,SAAS,WAAW,EAAE,GAChF,WAAW,EAAE,CA2Df;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAI,MAAM,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAI,MAAM,CAMtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAI,MAAM,CAGtE;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAI,WAAW,CAEnE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,WAAW,GACjB,MAAM,CASR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAC1B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,GACb,OAAO,CAmBT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,GAChB,WAAW,CAiBb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACpC,CAAC,EAAE,WAAW,EACd,CAAC,EAAE,WAAW,EACd,CAAC,EAAE,WAAW,GACZ,MAAM,CAgBR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC9B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,GACb,CAAE,MAAM,EAAE,MAAM,CAAE,CAYpB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAStD"}
@@ -0,0 +1,87 @@
1
+ import type { LonLatPoint } from './arrow-types';
2
+ /**
3
+ * 顶点上限——给 MAX_POLYGON_STYLE_VERTICES(128) 留出 8 个 buffer。
4
+ *
5
+ * 留 buffer 的原因:渲染管线可能在内部 stroke / 闭合时追加 1-2 个顶点,
6
+ * 严格压到 128 容易在边界 case 触发"polygon supports at most 128 points"
7
+ * 异常。
8
+ */
9
+ export declare const ARROW_OUTPUT_MAX_VERTICES = 120;
10
+ /**
11
+ * 去除连续重复顶点(同时检查首尾闭合重复)。
12
+ *
13
+ * 注:不去重"非连续"的重复——多边形中段如果出现两个同坐标顶点,通常意味着
14
+ * 形状自交,简单去重会改变拓扑;此情况留给 ensurePolygonValid(可选)处理。
15
+ *
16
+ * @param ring 原始环。
17
+ * @returns 新数组,连续重复点已合并。
18
+ */
19
+ export declare function dedupeConsecutivePoints(ring: readonly LonLatPoint[]): LonLatPoint[];
20
+ /**
21
+ * 用 Shoelace 公式计算多边形的有向面积(度的平方)。
22
+ *
23
+ * 公式:`A = 0.5 * Σ (x_i * y_{i+1} - x_{i+1} * y_i)`,索引模 n。
24
+ * `A > 0` 时顶点 CCW(逆时针),`A < 0` 时 CW(顺时针)。
25
+ *
26
+ * @param ring 至少 3 个点,首尾不重复。
27
+ * @returns 有向面积;ring.length < 3 时返回 0。
28
+ */
29
+ export declare function signedAreaShoelace(ring: readonly LonLatPoint[]): number;
30
+ /**
31
+ * 强制把环调整为 CCW(逆时针)绕向。
32
+ *
33
+ * CesiumGroundPolygonPrimitive 的着色器与 polygon-rings.ts 的 winding 处理
34
+ * 默认外环 CCW,若输入是 CW 会导致填充方向错(以洞当外、或翻面)。
35
+ *
36
+ * @param ring 已经去重的环。
37
+ * @returns 新数组,保证 CCW;若输入已经 CCW 则只是浅拷贝。
38
+ */
39
+ export declare function ensureCounterClockwise(ring: readonly LonLatPoint[]): LonLatPoint[];
40
+ /**
41
+ * 均匀降采样到指定上限,严格保留首尾点。
42
+ *
43
+ * 算法:从 [0, n-1] 区间按 (maxCount-1) 段均匀步进取整数索引。这样
44
+ * 首点 (i=0) 与末点 (i=maxCount-1 对应 ring.length-1) 永远入选,中间
45
+ * 视形状均匀分布。
46
+ *
47
+ * 注:严格的"保形降采样"应该用 Visvalingam–Whyatt 之类的算法,根据三角形
48
+ * 面积优先级删除冗余点。但本模块的箭头由 Catmull-Rom 平滑生成,任意位置
49
+ * 的曲率分布都比较均匀,简单步进足够保形 + 实现简单。
50
+ *
51
+ * @param ring 输入环。
52
+ * @param maxCount 目标点数上限,≥ 4。
53
+ * @returns 长度 ≤ maxCount 的新数组;输入已满足上限时浅拷贝返回。
54
+ */
55
+ export declare function clampVertexCount(ring: readonly LonLatPoint[], maxCount: number): LonLatPoint[];
56
+ /**
57
+ * 移除 hairpin 顶点(转角 > 阈值的近 180° U-turn)。
58
+ *
59
+ * 箭头脊线在急转弯处经 Catmull-Rom 平滑后会出现 sample 聚集 + perp 方向
60
+ * 急速旋转,Frenet 偏移产生的 leftSide / rightSide 在 cluster 内部出现
61
+ * 「短退一步 → 反向冲出」的 cusp(转角接近 180°)。多边形拓扑上虽然不
62
+ * 自交,但视觉上是一根「针尖」 — fragment shader 的 point-in-polygon 测试
63
+ * 在 cusp 附近边密集 + 浮点边界判断,容易把 cusp 周围一小片像素误判成外部
64
+ * (用户截图的三角凹口正是这种 cusp 产生的视觉物)。
65
+ *
66
+ * 算法:每轮扫描,凡 |turn| > π − threshold(默认 30°,即 turn > 150°)
67
+ * 的顶点直接删除。继续迭代直到没有更多 hairpin 或剩余顶点 < 4。
68
+ *
69
+ * @param ring 已去重的多边形环。
70
+ * @param thresholdRad hairpin 阈值(弧度),默认 30° = π/6。turn 接近 π
71
+ * (180°)说明前后两条边几乎反向。
72
+ * @returns 移除 hairpin 后的环。
73
+ */
74
+ export declare function removeHairpinVertices(ring: readonly LonLatPoint[], thresholdRad?: number): LonLatPoint[];
75
+ /**
76
+ * 一站式正规化:**去重 → 移除 hairpin → 强制 CCW → 降采样 ≤ maxCount**。
77
+ *
78
+ * 所有箭头生成器最后一步都应调用此函数,确保输出符合
79
+ * CesiumGroundPolygonPrimitive 的契约(3-128 顶点、闭合、CCW、无重复)。
80
+ *
81
+ * @param rawRing 拼接出来的原始环(可能含重复、CW、超长)。
82
+ * @param maxCount 顶点上限,默认 ARROW_OUTPUT_MAX_VERTICES = 120。
83
+ * @returns 干净的多边形环;若输入太退化(去重后 < 3 点)返回空数组。
84
+ * @throws 从不抛错;非法输入返回空数组,由调用方决定如何反馈。
85
+ */
86
+ export declare function finalizePolygon(rawRing: readonly LonLatPoint[], maxCount?: number): LonLatPoint[];
87
+ //# sourceMappingURL=arrow-polygon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-polygon.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrow/arrow-polygon.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAU7C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAE,IAAI,EAAE,SAAS,WAAW,EAAE,GAAI,WAAW,EAAE,CA2BrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAE,IAAI,EAAE,SAAS,WAAW,EAAE,GAAI,MAAM,CAYzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAE,IAAI,EAAE,SAAS,WAAW,EAAE,GAAI,WAAW,EAAE,CAapF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,QAAQ,EAAE,MAAM,GACd,WAAW,EAAE,CAef;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,YAAY,GAAE,MAAoB,GAChC,WAAW,EAAE,CAgCf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,QAAQ,GAAE,MAAkC,GAC1C,WAAW,EAAE,CAoBf"}
@@ -0,0 +1,152 @@
1
+ import type { LonLatPoint } from '../ground/types';
2
+ export type { LonLatPoint };
3
+ /**
4
+ * 细箭头(FineArrow)生成选项。
5
+ *
6
+ * 细箭头由两个端点定义,呈"窄尾 → 渐宽颈部 → 三角箭头"的填充多边形。
7
+ * 所有比例因子相对于 `(|p1 p2|) ** 0.99`(基准长度)度量,因此长度变化时
8
+ * 整体形状成比例缩放。
9
+ */
10
+ export interface FineArrowOptions {
11
+ /** 尾部宽度因子(基准长度的倍数)。默认 0.10 */
12
+ tailWidthFactor?: number;
13
+ /** 颈部宽度因子。默认 0.20 */
14
+ neckWidthFactor?: number;
15
+ /** 翼展宽度因子。默认 0.25 */
16
+ headWidthFactor?: number;
17
+ /** 翼展张开角(弧度)。默认 π/8.5 ≈ 0.370 rad ≈ 21.18° */
18
+ headAngleRadians?: number;
19
+ /** 颈部夹角(弧度)。默认 π/13 ≈ 0.242 rad ≈ 13.85° */
20
+ neckAngleRadians?: number;
21
+ }
22
+ /**
23
+ * 突击方向箭头(AssaultDirectionArrow)生成选项。
24
+ *
25
+ * 与 FineArrow 同形但更"窄长"——尾部更细、翼展更小,适合表示局部突击方向。
26
+ * 内部计算时还会把基准长度放大 1.5 倍以让箭头看起来更修长。
27
+ */
28
+ export interface AssaultDirectionArrowOptions {
29
+ /** 基准长度倍率(影响整体大小)。默认 1.5 */
30
+ lengthScale?: number;
31
+ /** 尾部宽度因子。默认 0.08 */
32
+ tailWidthFactor?: number;
33
+ /** 颈部宽度因子。默认 0.10 */
34
+ neckWidthFactor?: number;
35
+ /** 翼展宽度因子。默认 0.13 */
36
+ headWidthFactor?: number;
37
+ /** 翼展张开角(弧度)。默认 π/4 = 45° */
38
+ headAngleRadians?: number;
39
+ /** 颈部夹角(弧度)。默认 0.5575 rad ≈ 31.94°(原 π*0.17741) */
40
+ neckAngleRadians?: number;
41
+ }
42
+ /**
43
+ * 攻击箭头(AttackArrow)生成选项。
44
+ *
45
+ * 攻击箭头至少 3 个控制点:前 2 个定义尾部宽度,从第 3 个开始定义脊线。
46
+ * 体部沿脊线渐变(从尾宽到颈宽),末端是五点三角箭头。
47
+ *
48
+ * 鲁棒性参数(`minBodyHalfAngleRadians` / `bodyWidthMargin`)用于防止
49
+ * 锐角脊线导致体部宽度爆炸(原 cesium-plot-js 的 4+ 控制点 bug)。
50
+ */
51
+ export interface AttackArrowOptions {
52
+ /** 头部高度相对脊线基准长度的因子。默认 0.18 */
53
+ headHeightFactor?: number;
54
+ /** 翼展宽度相对头部高度的因子。默认 0.30 */
55
+ headWidthFactor?: number;
56
+ /** 颈部高度相对头部高度的因子。默认 0.85 */
57
+ neckHeightFactor?: number;
58
+ /** 颈部宽度相对头部高度的因子。默认 0.15 */
59
+ neckWidthFactor?: number;
60
+ /** 头部高度不超过尾宽的此倍数,防止头部过大。默认 0.80 */
61
+ headTailFactor?: number;
62
+ /**
63
+ * 体部宽度计算中,脊线半角的最小值(弧度)。
64
+ * w = (tailWidth/2 - dropoff) / sin(halfAngle)
65
+ * 当 halfAngle → 0 时 w 发散,这里下限保证 sin ≥ sin(π/12) ≈ 0.259,
66
+ * 即 w ≤ ~3.86 倍正常值,不会让体部翻出。
67
+ * 默认 π/12 ≈ 15°(即原始夹角 30° 以下被钳制)。
68
+ */
69
+ minBodyHalfAngleRadians?: number;
70
+ /**
71
+ * 体部宽度上限相对尾宽半值的倍数。
72
+ * 即使 minBodyHalfAngleRadians 触发了 clamp,最终 w 也不会超过
73
+ * `tailWidth/2 * bodyWidthMargin`,确保体部永远在尾部宽度之内。
74
+ * 默认 1.05(留 5% 余量给视觉过渡)。
75
+ */
76
+ bodyWidthMargin?: number;
77
+ /**
78
+ * Catmull-Rom 平滑每段控制点之间的采样数(不含两端点)。
79
+ * 较小的值(8-16)足以让体部边缘视觉平滑,较大的值会增加最终多边形
80
+ * 顶点数,有命中 MAX_POLYGON_STYLE_VERTICES = 128 上限的风险。
81
+ * 默认 12。
82
+ */
83
+ bodySmoothingSegments?: number;
84
+ }
85
+ /**
86
+ * 燕尾攻击箭头(SwallowtailAttackArrow)生成选项。
87
+ *
88
+ * 比 AttackArrow 多一个"燕尾"凹口——在尾部中点向脊线相反方向凸出一个点。
89
+ * 燕尾因子越大,尾部凹口越深。其它字段含义与 AttackArrowOptions 完全相同。
90
+ */
91
+ export interface SwallowtailAttackArrowOptions extends AttackArrowOptions {
92
+ /**
93
+ * 燕尾凸出深度因子(相对 tailWidthFactor × baseLength)。默认 1.0。
94
+ * 0 表示退化为普通 AttackArrow,>1 表示凸出更深。
95
+ */
96
+ swallowtailFactor?: number;
97
+ /**
98
+ * 燕尾凸出参考宽度因子(相对脊线基准长度)。默认 0.10。
99
+ * 与 swallowtailFactor 共同决定凸出距离。
100
+ */
101
+ tailWidthFactor?: number;
102
+ }
103
+ /**
104
+ * 曲线箭头(CurvedArrow)生成选项。
105
+ *
106
+ * 曲线箭头由 2+ 个控制点定义一条平滑曲线,沿曲线两侧偏移给定宽度后
107
+ * 闭合成填充多边形,末端附加三角箭头。当只有 2 个控制点时退化为
108
+ * 直线版本(FineArrow 的窄长变体)。
109
+ *
110
+ * 注:与 cesium-plot-js 的 CurvedArrow(line type)不同,本实现产出
111
+ * **闭合多边形**,以适配本项目仅有 polygon primitive 的渲染管线。
112
+ */
113
+ export interface CurvedArrowOptions {
114
+ /**
115
+ * 体部线宽因子(相对曲线总长度)。默认 0.05。
116
+ * 越大则线条越粗。
117
+ */
118
+ bodyWidthFactor?: number;
119
+ /**
120
+ * 头部翼展宽度因子(相对曲线总长度)。默认 0.16。
121
+ */
122
+ headWidthFactor?: number;
123
+ /**
124
+ * 头部长度因子(相对曲线总长度)。默认 0.12。
125
+ * 决定箭头从尖端向后延伸多远。
126
+ */
127
+ headLengthFactor?: number;
128
+ /**
129
+ * 颈部宽度因子(相对头部翼展)。默认 0.50。
130
+ * 必须 < 1,否则颈部比翼尖宽,箭头形状反转。
131
+ */
132
+ neckWidthRelativeToHead?: number;
133
+ /**
134
+ * Catmull-Rom 平滑每段控制点之间的采样数。默认 16。
135
+ */
136
+ curveSmoothingSegments?: number;
137
+ /**
138
+ * 体部从尾到颈的宽度收窄比(0 = 不收窄;0.5 = 颈部宽度是尾部的 50%)。
139
+ * 默认 0.0(等宽线条)。
140
+ */
141
+ bodyTaperRatio?: number;
142
+ }
143
+ /**
144
+ * 所有箭头生成器统一的输出契约:
145
+ * 一个**闭合的、CCW(逆时针)绕向、无连续重复顶点**的经纬度环。
146
+ *
147
+ * 可以直接作为 `CesiumGroundPolygonPrimitive` 构造选项的 `points` 字段使用。
148
+ * 长度上限受 `MAX_POLYGON_STYLE_VERTICES = 128` 约束,本模块所有生成器
149
+ * 都在内部 clamp 到 ≤120 以留出余量。
150
+ */
151
+ export type ArrowPolygon = LonLatPoint[];
152
+ //# sourceMappingURL=arrow-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-types.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrow/arrow-types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAChC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC5C,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IAClC,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4BAA4B;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,6BAA8B,SAAQ,kBAAkB;IACxE;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IAClC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { createFineArrow } from './shapes/fine-arrow';
2
+ export { createAssaultDirectionArrow } from './shapes/assault-direction-arrow';
3
+ export { createAttackArrow } from './shapes/attack-arrow';
4
+ export { createSwallowtailAttackArrow } from './shapes/swallowtail-attack-arrow';
5
+ export { createCurvedArrow } from './shapes/curved-arrow';
6
+ export type { ArrowPolygon, LonLatPoint, FineArrowOptions, AssaultDirectionArrowOptions, AttackArrowOptions, SwallowtailAttackArrowOptions, CurvedArrowOptions, } from './arrow-types';
7
+ export { ARROW_OUTPUT_MAX_VERTICES } from './arrow-polygon';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/arrow/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,YAAY,EACX,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,4BAA4B,EAC5B,kBAAkB,EAClB,6BAA6B,EAC7B,kBAAkB,GAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ArrowPolygon, AssaultDirectionArrowOptions, LonLatPoint } from '../arrow-types';
2
+ /**
3
+ * 生成突击方向箭头多边形(单笔 CCW 周界遍历)。
4
+ *
5
+ * 与 createFineArrow 的差异仅在默认比例与 lengthScale,几何步骤完全相同:
6
+ * 1. spineDir = (p2 - p1) / |p2 - p1|;perp_CCW = ( -spineDir.y, spineDir.x )
7
+ * 2. baseLen = |p1 p2|^0.99 × lengthScale,派生 tail/neck/head 三个 halfWidth
8
+ * 3. 颈 / 翼的"轴 + 法向"偏移由 cos(angle) × halfWidth 和 sin(angle) × halfWidth
9
+ * 给出
10
+ * 4. 按 CCW 顺序逐顶点排列 8 个点:
11
+ * p1 → tailRight → neckRight → headRight → p2 → headLeft → neckLeft → tailLeft
12
+ * 5. 交给 finalizePolygon 去重 + CCW 校正 + 顶点上限 clamp。
13
+ *
14
+ * @param p1 尾部端点。
15
+ * @param p2 头部端点。
16
+ * @param options 可选比例覆盖。
17
+ * @returns 8 顶点闭合多边形;p1 与 p2 重合时返回空数组。
18
+ */
19
+ export declare function createAssaultDirectionArrow(p1: LonLatPoint, p2: LonLatPoint, options?: AssaultDirectionArrowOptions): ArrowPolygon;
20
+ //# sourceMappingURL=assault-direction-arrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assault-direction-arrow.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrow/shapes/assault-direction-arrow.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACX,YAAY,EACZ,4BAA4B,EAC5B,WAAW,EACX,MAAM,gBAAgB,CAAC;AAWxB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAC1C,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,4BAAiC,GACxC,YAAY,CASd"}
@@ -0,0 +1,56 @@
1
+ import type { ArrowPolygon, AttackArrowOptions, LonLatPoint } from '../arrow-types';
2
+ /**
3
+ * 攻击箭头骨架。
4
+ *
5
+ * 暴露给 swallowtail-attack-arrow.ts 复用,后者只需要在尾部多加一个燕尾
6
+ * 凸点,体部 / 头部几何与本文件 100% 一致。
7
+ */
8
+ export interface AttackArrowSkeleton {
9
+ /** 脊线左侧带,leftSide[0] = tailLeft、leftSide[last] = neckLeft。 */
10
+ leftSide: LonLatPoint[];
11
+ /** 脊线右侧带,rightSide[0] = tailRight、rightSide[last] = neckRight。 */
12
+ rightSide: LonLatPoint[];
13
+ /** 左翼尖(在 neck 处沿法线外扩 headHalfWidth)。 */
14
+ headLeft: LonLatPoint;
15
+ /** 右翼尖。 */
16
+ headRight: LonLatPoint;
17
+ /** 箭尖(与用户控制点 controlPoints[n-1] 严格一致)。 */
18
+ tip: LonLatPoint;
19
+ /** 尾左角(与 leftSide[0] 严格一致)。 */
20
+ tailLeft: LonLatPoint;
21
+ /** 尾右角(与 rightSide[0] 严格一致)。 */
22
+ tailRight: LonLatPoint;
23
+ /** 尾中点(燕尾箭头里用作"燕尾凸出方向"的参考)。 */
24
+ midTail: LonLatPoint;
25
+ /** 脊线第二个控制点(燕尾箭头里用作"燕尾凸出方向"的参考)。 */
26
+ spineSecond: LonLatPoint;
27
+ /**
28
+ * 整条脊线(含 midTail + 全部 controlPoints[2..n-1])的基准长度
29
+ * = wholeDistance(spineControlPoints) ** 0.99。
30
+ * 燕尾箭头里"燕尾凸出深度"的尺度来自这个值,与原版一致。
31
+ */
32
+ spineBaseLen: number;
33
+ }
34
+ /**
35
+ * 构造攻击箭头(Frenet 带状)。
36
+ *
37
+ * @param controlPoints 控制点序列,至少 3 个。少于 3 时:
38
+ * - controlPoints.length === 2 → 退化为 createFineArrow(与原版兼容)
39
+ * - controlPoints.length < 2 → 返回空数组
40
+ * @param options 可选比例与平滑参数。
41
+ * @returns 闭合多边形;输入退化时可能返回空数组。
42
+ */
43
+ export declare function createAttackArrow(controlPoints: readonly LonLatPoint[], options?: AttackArrowOptions): ArrowPolygon;
44
+ /**
45
+ * 构造攻击箭头骨架(脊线 + 左右带 + 头部 3 点)。
46
+ *
47
+ * 把 spine、左右带、头部 3 点暴露给 swallowtail-attack-arrow.ts 复用,
48
+ * 详细几何步骤见文件顶部的"几何步骤"注释。
49
+ * 任何输入退化(脊线少于 2 点、长度为 0 等)时返回 null。
50
+ *
51
+ * @param controlPoints 控制点序列,至少 3 个(由调用方校验)。
52
+ * @param options AttackArrow 选项;未传字段使用本文件默认值。
53
+ * @returns 骨架对象;输入退化时返回 null。
54
+ */
55
+ export declare function buildAttackArrowSkeleton(controlPoints: readonly LonLatPoint[], options: AttackArrowOptions): AttackArrowSkeleton | null;
56
+ //# sourceMappingURL=attack-arrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attack-arrow.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrow/shapes/attack-arrow.ts"],"names":[],"mappings":"AAwEA,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,MAAM,gBAAgB,CAAC;AAkBxB;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC,8DAA8D;IAC9D,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,kEAAkE;IAClE,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,wCAAwC;IACxC,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW;IACX,SAAS,EAAE,WAAW,CAAC;IACvB,0CAA0C;IAC1C,GAAG,EAAE,WAAW,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,WAAW,CAAC;IACtB,gCAAgC;IAChC,SAAS,EAAE,WAAW,CAAC;IACvB,+BAA+B;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,WAAW,CAAC;IACzB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,OAAO,GAAE,kBAAuB,GAC9B,YAAY,CAKd;AAyCD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACvC,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,OAAO,EAAE,kBAAkB,GACzB,mBAAmB,GAAG,IAAI,CAgM5B"}
@@ -0,0 +1,10 @@
1
+ import type { ArrowPolygon, CurvedArrowOptions, LonLatPoint } from '../arrow-types';
2
+ /**
3
+ * 生成曲线箭头(沿曲线的填充多边形)。
4
+ *
5
+ * @param controlPoints 控制点序列,至少 2 个;最末点为箭头尖端。
6
+ * @param options 体型与平滑参数。
7
+ * @returns 闭合多边形;输入退化(< 2 点或所有点重合)时返回空数组。
8
+ */
9
+ export declare function createCurvedArrow(controlPoints: readonly LonLatPoint[], options?: CurvedArrowOptions): ArrowPolygon;
10
+ //# sourceMappingURL=curved-arrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curved-arrow.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrow/shapes/curved-arrow.ts"],"names":[],"mappings":"AAoDA,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,MAAM,gBAAgB,CAAC;AAgBxB;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,OAAO,GAAE,kBAAuB,GAC9B,YAAY,CAKd"}
@@ -0,0 +1,23 @@
1
+ import type { ArrowPolygon, FineArrowOptions, LonLatPoint } from '../arrow-types';
2
+ /**
3
+ * 生成细箭头多边形(单笔 CCW 周界遍历)。
4
+ *
5
+ * 几何步骤:
6
+ * 1. 计算 spineDir = (p2 - p1) / |p2 - p1|;
7
+ * perp_CCW = ( -spineDir.y, spineDir.x )(在 +y 朝北的右手系下指向"逻辑左")。
8
+ * 2. 基准长度 L = |p1 p2|^0.99,派生 tailHalfWidth / neckHalfWidth / headHalfWidth。
9
+ * 每个 *HalfWidth 就是该处脊线到对应顶点的**垂直距离**(原版用 tailWidth/
10
+ * neckWidth/headWidth 命名,实际上都是 half-width)。
11
+ * 3. 颈/翼的纵向位置(从 p2 向 p1 方向回退多少)= cos(angle) × halfWidth;
12
+ * 横向位置(垂直脊线偏离多少)= sin(angle) × halfWidth。
13
+ * 4. 按 CCW 顺序逐顶点排列 8 个点:
14
+ * p1 → tailRight → neckRight → headRight → p2 → headLeft → neckLeft → tailLeft
15
+ * 5. 交给 finalizePolygon 去重 + CCW 校正 + 顶点上限 clamp。
16
+ *
17
+ * @param p1 尾部端点 [lon°, lat°]。
18
+ * @param p2 头部端点(尖端)[lon°, lat°]。
19
+ * @param options 可选比例覆盖。
20
+ * @returns 8(去重后可能更少)顶点的闭合多边形;p1 与 p2 重合时返回空数组。
21
+ */
22
+ export declare function createFineArrow(p1: LonLatPoint, p2: LonLatPoint, options?: FineArrowOptions): ArrowPolygon;
23
+ //# sourceMappingURL=fine-arrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fine-arrow.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrow/shapes/fine-arrow.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAWlF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC9B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,gBAAqB,GAC5B,YAAY,CASd"}
@@ -0,0 +1,12 @@
1
+ import type { ArrowPolygon, LonLatPoint, SwallowtailAttackArrowOptions } from '../arrow-types';
2
+ /**
3
+ * 构造燕尾攻击箭头(Frenet 带状 + 尾部 V 形凹口)。
4
+ *
5
+ * @param controlPoints 控制点序列,至少 3 个。少于 3 时:
6
+ * - 2 个点 → 退化为 createFineArrow(与 attack-arrow 保持一致)
7
+ * - < 2 → 返回空数组
8
+ * @param options 比例与平滑参数(继承 AttackArrowOptions + 燕尾两项)。
9
+ * @returns 闭合多边形;输入退化时可能返回空数组。
10
+ */
11
+ export declare function createSwallowtailAttackArrow(controlPoints: readonly LonLatPoint[], options?: SwallowtailAttackArrowOptions): ArrowPolygon;
12
+ //# sourceMappingURL=swallowtail-attack-arrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swallowtail-attack-arrow.d.ts","sourceRoot":"","sources":["../../../../../src/lib/arrow/shapes/swallowtail-attack-arrow.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EACX,YAAY,EACZ,WAAW,EACX,6BAA6B,EAC7B,MAAM,gBAAgB,CAAC;AAWxB;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC3C,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,OAAO,GAAE,6BAAkC,GACzC,YAAY,CAKd"}