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,93 @@
1
+ import type { Cartographic } from './cartographic';
2
+ /** Vincenty 椭球(贴地线只用 WGS84,公开 ellipsoid 也只暴露这两项)。 */
3
+ export interface GeodesicEllipsoid {
4
+ maximumRadius: number;
5
+ minimumRadius: number;
6
+ }
7
+ /** 插值预算常量(一次 `vincentyInverseFormula` + `setConstants` 后定型)。 */
8
+ interface GeodesicConstants {
9
+ a: number;
10
+ b: number;
11
+ f: number;
12
+ cosineHeading: number;
13
+ sineHeading: number;
14
+ tanU: number;
15
+ cosineU: number;
16
+ sineU: number;
17
+ sigma: number;
18
+ sineAlpha: number;
19
+ sineSquaredAlpha: number;
20
+ cosineSquaredAlpha: number;
21
+ cosineAlpha: number;
22
+ u2Over4: number;
23
+ u4Over16: number;
24
+ u6Over64: number;
25
+ u8Over256: number;
26
+ a0: number;
27
+ a1: number;
28
+ a2: number;
29
+ a3: number;
30
+ distanceRatio: number;
31
+ }
32
+ /**
33
+ * 大地线(geodesic):椭球面两点间的最短曲面路径。Vincenty 逆解 + 反求插值。
34
+ *
35
+ * 行为与 Cesium `EllipsoidGeodesic` 字节级一致。所有计算在 JS Float64
36
+ * 上完成,不依赖 GPU。贴地线 `line-densify.ts` 每段构造一个实例,按
37
+ * 等弧长插值取中间点。
38
+ */
39
+ export declare class EllipsoidGeodesic {
40
+ /** 椭球(默认 WGS84)。 */
41
+ readonly _ellipsoid: GeodesicEllipsoid;
42
+ /** 起点 cartographic(height 永远 0)。 */
43
+ readonly _start: Cartographic;
44
+ /** 终点 cartographic(height 永远 0)。 */
45
+ readonly _end: Cartographic;
46
+ /** 起点航向(弧度,由 Vincenty 写入)。 */
47
+ _startHeading: number;
48
+ /** 终点航向(弧度,由 Vincenty 写入)。 */
49
+ _endHeading: number;
50
+ /** 椭球面距离(米,由 Vincenty 写入)。 */
51
+ _distance: number;
52
+ /** Vincenty u² = cos²α·(a²-b²)/b²。 */
53
+ _uSquared: number;
54
+ /** 插值常量缓存(setConstants 写入)。 */
55
+ _constants: GeodesicConstants;
56
+ /**
57
+ * @param start 可选起点。
58
+ * @param end 可选终点。
59
+ * @param ellipsoid 可选椭球,默认 WGS84。
60
+ */
61
+ constructor(start?: Cartographic, end?: Cartographic, ellipsoid?: GeodesicEllipsoid);
62
+ /** 起点航向(构造后只读)。 */
63
+ get startHeading(): number;
64
+ /** 终点航向(构造后只读)。 */
65
+ get endHeading(): number;
66
+ /** 椭球面距离(米)。 */
67
+ get surfaceDistance(): number;
68
+ /**
69
+ * 重设起止点。
70
+ *
71
+ * @param start 起点。
72
+ * @param end 终点。
73
+ */
74
+ setEndPoints(start: Cartographic, end: Cartographic): void;
75
+ /**
76
+ * 按 fraction(0..1)取大地线上点。等价 `interpolateUsingSurfaceDistance(_distance * fraction)`。
77
+ *
78
+ * @param fraction 0..1 之间的弧长比例。
79
+ * @param result 接收结果的 Cartographic。
80
+ * @returns 填好的 result。
81
+ */
82
+ interpolateUsingFraction(fraction: number, result: Cartographic): Cartographic;
83
+ /**
84
+ * 按弧长取大地线上点(Vincenty 正解)。
85
+ *
86
+ * @param distance 距起点的弧长(米)。
87
+ * @param result 接收结果的 Cartographic(lon/lat 弧度,height=0)。
88
+ * @returns 填好的 result。
89
+ */
90
+ interpolateUsingSurfaceDistance(distance: number, result: Cartographic): Cartographic;
91
+ }
92
+ export {};
93
+ //# sourceMappingURL=ellipsoid-geodesic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsoid-geodesic.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/ellipsoid-geodesic.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,gEAAgE;AAChE,UAAU,iBAAiB;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACtB;AAsRD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC7B,oBAAoB;IACpB,SAAgB,UAAU,EAAE,iBAAiB,CAAC;IAE9C,oCAAoC;IACpC,SAAgB,MAAM,EAAE,YAAY,CAAC;IAErC,oCAAoC;IACpC,SAAgB,IAAI,EAAE,YAAY,CAAC;IAEnC,8BAA8B;IACvB,aAAa,SAAO;IAE3B,8BAA8B;IACvB,WAAW,SAAO;IAEzB,8BAA8B;IACvB,SAAS,SAAO;IAEvB,sCAAsC;IAC/B,SAAS,SAAO;IAEvB,+BAA+B;IACxB,UAAU,EAAE,iBAAiB,CAAC;IAErC;;;;OAIG;gBAEF,KAAK,CAAC,EAAE,YAAY,EACpB,GAAG,CAAC,EAAE,YAAY,EAClB,SAAS,GAAE,iBAAiC;IAY7C,mBAAmB;IACnB,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,mBAAmB;IACnB,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,gBAAgB;IAChB,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED;;;;;OAKG;IACI,YAAY,CAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAI,IAAI;IAInE;;;;;;OAMG;IACI,wBAAwB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAClB,YAAY;IAIf;;;;;;OAMG;IACI,+BAA+B,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAClB,YAAY;CAiFf"}
@@ -0,0 +1,45 @@
1
+ import type { Cartographic } from './cartographic';
2
+ import type { GeodesicEllipsoid } from './ellipsoid-geodesic';
3
+ /**
4
+ * 椭球恒向线(rhumb line):保持恒定方位角的曲面路径。
5
+ *
6
+ * 与 `EllipsoidGeodesic` 接口对称。贴地线 `line-densify.ts` 在 `arcType==='rhumb'`
7
+ * 时构造一个实例并按弧长插值;`line-preprocess.ts` 跨本初子午线 / IDL 拆段
8
+ * 时用 `findIntersectionWithLongitude` 在恒向线上求交点。
9
+ */
10
+ export declare class EllipsoidRhumbLine {
11
+ readonly _ellipsoid: GeodesicEllipsoid;
12
+ readonly _start: Cartographic;
13
+ readonly _end: Cartographic;
14
+ _heading: number;
15
+ _distance: number;
16
+ _ellipticity: number;
17
+ _ellipticitySquared: number;
18
+ constructor(start?: Cartographic, end?: Cartographic, ellipsoid?: GeodesicEllipsoid);
19
+ /** 起止两点的恒向线弧长(米)。 */
20
+ get surfaceDistance(): number;
21
+ /** 恒方位角(弧度)。 */
22
+ get heading(): number;
23
+ setEndPoints(start: Cartographic, end: Cartographic): void;
24
+ /**
25
+ * 按 fraction(0..1)取恒向线上点。
26
+ */
27
+ interpolateUsingFraction(fraction: number, result: Cartographic): Cartographic;
28
+ /**
29
+ * 按弧长取恒向线上点。
30
+ *
31
+ * @param distance 弧长(米)。
32
+ * @param result 接收结果的 Cartographic。
33
+ * @returns 填好的 result。
34
+ */
35
+ interpolateUsingSurfaceDistance(distance: number, result: Cartographic): Cartographic;
36
+ /**
37
+ * 找恒向线与给定经线的交点。逐字 Cesium,含 90°/0° 退化、对跖与 EPSILON14 边界处理。
38
+ *
39
+ * @param intersectionLongitude 经度(弧度)。
40
+ * @param result 接收结果的 Cartographic。
41
+ * @returns 填好的 result;E-W 与给定经线重合等无穷交点情形返回 undefined。
42
+ */
43
+ findIntersectionWithLongitude(intersectionLongitude: number, result: Cartographic): Cartographic | undefined;
44
+ }
45
+ //# sourceMappingURL=ellipsoid-rhumb-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsoid-rhumb-line.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/ellipsoid-rhumb-line.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA+W9D;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAC9B,SAAgB,UAAU,EAAE,iBAAiB,CAAC;IAC9C,SAAgB,MAAM,EAAE,YAAY,CAAC;IACrC,SAAgB,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,SAAO;IACf,SAAS,SAAO;IAChB,YAAY,SAAO;IACnB,mBAAmB,SAAO;gBAGhC,KAAK,CAAC,EAAE,YAAY,EACpB,GAAG,CAAC,EAAE,YAAY,EAClB,SAAS,GAAE,iBAAiC;IAW7C,qBAAqB;IACrB,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,gBAAgB;IAChB,IAAW,OAAO,IAAI,MAAM,CAE3B;IAEM,YAAY,CAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,GAAI,IAAI;IAInE;;OAEG;IACI,wBAAwB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAClB,YAAY;IAOf;;;;;;OAMG;IACI,+BAA+B,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GAClB,YAAY;IAWf;;;;;;OAMG;IACI,6BAA6B,CACnC,qBAAqB,EAAE,MAAM,EAC7B,MAAM,EAAE,YAAY,GAClB,YAAY,GAAG,SAAS;CA6D3B"}
@@ -0,0 +1,94 @@
1
+ import { Vector3 } from 'three';
2
+ import type { Cartographic } from './cartographic';
3
+ /**
4
+ * 由 Cartographic(λ, φ)算椭球表面 (λ, φ) 处的单位法向(指向外)。
5
+ *
6
+ * 算法:用参数化球向量 (cosφ·cosλ, cosφ·sinλ, sinφ) 作为初始方向,
7
+ * 然后 normalize。在椭球(a ≠ c)上,这个球向量长度并非 1,但
8
+ * **方向**恰好沿椭球面法向(因为椭球隐式方程的梯度与该球向量共线)。
9
+ *
10
+ * Cesium 对应:Ellipsoid.js:321-341
11
+ *
12
+ * @param carto 经度 / 纬度(弧度),height 字段被忽略。
13
+ * @param out 输出单位向量(模 1)。
14
+ * @returns out。
15
+ */
16
+ export declare function geodeticSurfaceNormalCartographic(carto: Cartographic, out: Vector3): Vector3;
17
+ /**
18
+ * 由 ECEF 点计算椭球表面在该点的单位法向。
19
+ *
20
+ * 椭球隐式方程 F(x,y,z) = (x/a)² + (y/b)² + (z/c)² − 1 = 0 的梯度
21
+ * ∇F = (2x/a², 2y/b², 2z/c²) 方向即法向;归一化后即单位向量。
22
+ * 系数 2 不影响方向,省略。
23
+ *
24
+ * Cesium 对应:Ellipsoid.js:350-371
25
+ *
26
+ * @param cart ECEF 点(米);若位于椭球中心附近(模² < EPSILON14²)返回 undefined。
27
+ * @param out 输出单位向量。
28
+ * @returns out 或 undefined(中心退化)。
29
+ */
30
+ export declare function geodeticSurfaceNormal(cart: Vector3, out: Vector3): Vector3 | undefined;
31
+ /**
32
+ * Newton 投影:把任意 ECEF 点投影到椭球表面(垂足投影)。
33
+ *
34
+ * 物理意义:求 cart 到椭球面的最近点(沿椭球法向回退)。
35
+ * 数值方法:设 P' = (px/(1 + λ/a²), py/(1 + λ/b²), pz/(1 + λ/c²)),
36
+ * 代入椭球方程得 func(λ) = 0,用 Newton-Raphson 迭代求 λ。每次迭代
37
+ * 精度平方提升,通常 2-3 次即收敛到 |func| ≤ EPSILON12(1e-12)。
38
+ *
39
+ * Cesium 对应:scaleToGeodeticSurface.js:25-146
40
+ *
41
+ * @param cart ECEF 输入点。
42
+ * @param out 输出椭球表面点(可与 cart 同实例)。
43
+ * @returns out 或 undefined(中心点 + 非有限 ratio 兜底)。
44
+ */
45
+ export declare function scaleToGeodeticSurface(cart: Vector3, out: Vector3): Vector3 | undefined;
46
+ /**
47
+ * Cartographic (λ, φ, h) → ECEF (x, y, z),即 Cesium 著名的 gamma 投影法。
48
+ *
49
+ * 算法:n = 单位法向(球向量),k = (a²·n.x, b²·n.y, c²·n.z),
50
+ * gamma = √(n · k),椭球表面点 P = k / gamma,加高度偏移 h · n 即得。
51
+ *
52
+ * Cesium 对应:Ellipsoid.js:385-399
53
+ *
54
+ * @param carto 输入 cartographic。
55
+ * @param out 输出 ECEF 点。
56
+ * @returns out。
57
+ */
58
+ export declare function cartographicToCartesian(carto: Cartographic, out: Vector3): Vector3;
59
+ /**
60
+ * ECEF → Cartographic(经纬度 + 高度)。
61
+ *
62
+ * 步骤:
63
+ * 1. Newton 投影到椭球面 → 表面点 P
64
+ * 2. 在 P 处计算单位法向 n(此时 n 指向 cart 方向)
65
+ * 3. 高度偏移 h_vec = cart − P;|h_vec| · sign(h_vec · cart) 即高度
66
+ * 4. 经度 = atan2(n.y, n.x);纬度 = asin(n.z)
67
+ *
68
+ * Cesium 对应:Ellipsoid.js:443-499
69
+ *
70
+ * @param cart 输入 ECEF 点。
71
+ * @param out 输出 cartographic。
72
+ * @returns out 或 undefined(scaleToGeodeticSurface 返回 undefined 时)。
73
+ */
74
+ export declare function cartesianToCartographic(cart: Vector3, out: Cartographic): Cartographic | undefined;
75
+ /**
76
+ * 把一个 Float64 ECEF 点数组(原地)按 height 提升或降低。
77
+ *
78
+ * 调用规则:
79
+ * - scaleToSurface = false:假设输入点已在椭球面,直接加 height · normal
80
+ * - scaleToSurface = true:先 Newton 投影到椭球面再加 height · normal
81
+ *
82
+ * 矩形 extruded 路径中:
83
+ * - top 层用 false(顶点来自 grid 采样,确实在表面)
84
+ * - bottom 层用 true(同 buffer 已被前一步污染过,Newton 兜底;实际是 no-op)
85
+ *
86
+ * Cesium 对应:PolygonPipeline.js:593-631
87
+ *
88
+ * @param positions ECEF 点数组(长度必须是 3 的倍数,原地修改)。
89
+ * @param height 高度偏移,米。
90
+ * @param scaleToSurface 见上述调用规则。
91
+ * @returns 原 positions(链式调用)。
92
+ */
93
+ export declare function scaleToGeodeticHeight(positions: Float64Array, height: number, scaleToSurface: boolean): Float64Array;
94
+ //# sourceMappingURL=ellipsoid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsoid.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/ellipsoid.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAuCnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,OAAO,GACV,OAAO,CAYT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,GACV,OAAO,GAAG,SAAS,CAcrB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,GACV,OAAO,GAAG,SAAS,CA4FrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,OAAO,GACV,OAAO,CA+BT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,YAAY,GACf,YAAY,GAAG,SAAS,CA8B1B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,GACrB,YAAY,CAkCd"}
@@ -0,0 +1,27 @@
1
+ import { Matrix4, Vector3 } from 'three';
2
+ /**
3
+ * 在给定 ECEF 原点构造 ENU(东-北-上)→ ECEF 变换矩阵。
4
+ *
5
+ * 输出矩阵 M 的列布局:
6
+ * 列 0:east 基底(单位向量)
7
+ * 列 1:north 基底(单位向量)
8
+ * 列 2:up 基底(单位向量,沿椭球面法向)
9
+ * 列 3:平移 = origin
10
+ *
11
+ * 对任意局部 ENU 坐标 (e, n, u),`M · [e, n, u, 1]^T` 给出该点的 ECEF 坐标。
12
+ *
13
+ * 完整实现三个分支(必须全部保留,与 Cesium 字节级对齐):
14
+ * 分支 1:|origin|² < EPSILON14² → 退化为约定基底(east=Y,north=Z,up=X)
15
+ * 分支 2:|origin.x|, |origin.y| < EPSILON14 → 极点约定(east=X,north=±Y,up=±Z)
16
+ * 分支 3:一般情况 → up = geodeticSurfaceNormal(origin),
17
+ * east = normalize(-origin.y, origin.x, 0),
18
+ * north = up × east
19
+ *
20
+ * Cesium 对应:Transforms.js:99-279(生成器)+ L276-279(具体绑定 east+north)
21
+ *
22
+ * @param origin ECEF 原点(米);可以是椭球表面或上方任意点。
23
+ * @param out 输出 4×4 矩阵(原地写入)。
24
+ * @returns out(链式调用)。
25
+ */
26
+ export declare function eastNorthUpToFixedFrame(origin: Vector3, out: Matrix4): Matrix4;
27
+ //# sourceMappingURL=enu-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enu-frame.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/enu-frame.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAWzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,OAAO,GACV,OAAO,CAoDT"}
@@ -0,0 +1,20 @@
1
+ import type { Matrix4, Vector3 } from 'three';
2
+ /**
3
+ * 4×4 矩阵乘以 3D 点(齐次坐标 w = 1)。
4
+ *
5
+ * 公式(列主序矩阵):
6
+ * out.x = e[0]·p.x + e[4]·p.y + e[8]·p.z + e[12]
7
+ * out.y = e[1]·p.x + e[5]·p.y + e[9]·p.z + e[13]
8
+ * out.z = e[2]·p.x + e[6]·p.y + e[10]·p.z + e[14]
9
+ *
10
+ * 等价 Cesium `Matrix4.multiplyByPoint(matrix, cartesian, result)`,
11
+ * 同样支持 result === cartesian(原地变换),因为先把 p.x/y/z 读到
12
+ * 局部变量再写回 out。
13
+ *
14
+ * @param matrix 4×4 列主序变换矩阵(Three Matrix4)。
15
+ * @param point 输入点(可与 out 同实例)。
16
+ * @param out 输出向量(原地写入)。
17
+ * @returns out(链式调用)。
18
+ */
19
+ export declare function matrix4MultiplyByPoint(matrix: Matrix4, point: Vector3, out: Vector3): Vector3;
20
+ //# sourceMappingURL=matrix4-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix4-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/matrix4-helpers.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,GACV,OAAO,CAWT"}
@@ -0,0 +1,51 @@
1
+ import type { Vector3 } from 'three';
2
+ /**
3
+ * 把一个 Float64 标量拆为 (high, low) 两个 Float32 等价分量。
4
+ *
5
+ * 算法逐字复刻 Cesium `EncodedCartesian3.encode`:
6
+ * - 正数:doubleHigh = floor(value / 65536) · 65536;return (doubleHigh, value − doubleHigh)
7
+ * - 负数:对称处理(对 −value 取 doubleHigh,然后 high = −doubleHigh,low = value + doubleHigh)
8
+ *
9
+ * 验证:high + low === value(Float64 精度无损)。
10
+ *
11
+ * @param value 任意 Float64 标量(米尺度典型 ±1e7)。
12
+ * @returns 高低分量对象。返回新对象,V8 逃逸分析后栈分配。
13
+ */
14
+ export declare function encodeScalarRTE(value: number): {
15
+ high: number;
16
+ low: number;
17
+ };
18
+ /**
19
+ * 把一个 Vector3 的三个分量分别 RTE 编码,写入 outHigh / outLow。
20
+ *
21
+ * 等价 Cesium `EncodedCartesian3.fromCartesian(source, result)`。
22
+ *
23
+ * 使用场景:
24
+ * - 每帧:classification.ts 中编码相机位置(czm_encodedCameraPositionMC*)
25
+ * - 一次性:computeRectanglePlanarExtents 中编码 SW 角点(u_southWest_*)
26
+ *
27
+ * @param source 输入 ECEF 向量(米)。
28
+ * @param outHigh 输出高分量向量。
29
+ * @param outLow 输出低分量向量。
30
+ */
31
+ export declare function encodeVec3RTE(source: Vector3, outHigh: Vector3, outLow: Vector3): void;
32
+ /**
33
+ * 把一整个 Float64Array(ECEF 顶点数组)拆为两个等长 Float32Array。
34
+ *
35
+ * 等价 Cesium `GeometryPipeline.encodeAttribute(geom, 'position', 'position3DHigh', 'position3DLow')`,
36
+ * 但解耦自 Cesium 的 Geometry 容器 — 直接返回两个 Float32Array,
37
+ * 由 caller 装入 Three BufferGeometry。
38
+ *
39
+ * 类型转换说明:
40
+ * `high[i] = hi`(hi 是 Float64)在 TypedArray 隐式转换时截断到 Float32。
41
+ * 由于 hi 永远是 65536 的整数倍且 |hi| < 1e7 < 2²⁴,Float32 精确表示无损。
42
+ * `low[i] = lo` 同理(|lo| < 65536)。
43
+ *
44
+ * @param positions ECEF 顶点数组(长度 = 3 × vertexCount)。
45
+ * @returns 两个 Float32Array,长度同输入。
46
+ */
47
+ export declare function encodePositionsToHighLowArrays(positions: Float64Array): {
48
+ high: Float32Array;
49
+ low: Float32Array;
50
+ };
51
+ //# sourceMappingURL=rte-encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rte-encoding.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/rte-encoding.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAE,KAAK,EAAE,MAAM,GAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAU9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,GACb,IAAI,CAON;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC7C,SAAS,EAAE,YAAY,GACrB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,CAY3C"}
@@ -0,0 +1,50 @@
1
+ import { Vector3 } from 'three';
2
+ /**
3
+ * 从 Float64Array / Float32Array / number[] 的 (offset, offset+1, offset+2)
4
+ * 三个分量读入一个 Vector3,等价 Cesium `Cartesian3.fromArray(arr, offset, out)`。
5
+ *
6
+ * 调用方负责保证 array 与 offset 范围有效,本函数不做边界检查
7
+ * (热路径上由调用上下文 invariant 保证)。
8
+ *
9
+ * @param array 数据源(支持 TypedArray / 普通数组)。
10
+ * @param offset 起始下标(读取 array[offset..offset+2])。
11
+ * @param out 输出 Vector3(原地修改),便于 scratch 复用。
12
+ * @returns out(链式调用)。
13
+ */
14
+ export declare function vec3FromArrayInto(array: ArrayLike<number>, offset: number, out: Vector3): Vector3;
15
+ /**
16
+ * 两个 Vector3 在 EPSILON 容差内是否相等。
17
+ *
18
+ * 用绝对差(component-wise abs ≤ epsilon),等价 Cesium 的 absolute 模式。
19
+ * Cesium 同名 API 还支持 relative epsilon,但矩形路径只需 absolute。
20
+ *
21
+ * @param a 第一个向量。
22
+ * @param b 第二个向量。
23
+ * @param epsilon 各分量绝对差上限(含等号)。
24
+ * @returns 三个分量都在容差内为 true。
25
+ */
26
+ export declare function vec3EqualsEpsilon(a: Vector3, b: Vector3, epsilon: number): boolean;
27
+ /**
28
+ * 分量乘法,等价 Cesium `Cartesian3.multiplyComponents(a, b, out)`:
29
+ * out = (a.x · b.x, a.y · b.y, a.z · b.z)。
30
+ *
31
+ * Three 的 `Vector3.multiply(other)` 也是分量乘,但语义 = self.multiply(other),
32
+ * 不支持 out 参数 / 不允许 a 与 b 同向 out。封装一遍以匹配 Cesium 调用方式。
33
+ *
34
+ * @param a 左乘向量。
35
+ * @param b 右乘向量。
36
+ * @param out 输出向量(可与 a 或 b 同实例)。
37
+ * @returns out(链式调用)。
38
+ */
39
+ export declare function vec3MultiplyComponents(a: Vector3, b: Vector3, out: Vector3): Vector3;
40
+ /**
41
+ * 向量模长平方(x² + y² + z²)。
42
+ *
43
+ * 与 Three `Vector3.lengthSq()` 等价,提供同名函数仅为对照
44
+ * Cesium `Cartesian3.magnitudeSquared` 调用风格,避免上下文切换。
45
+ *
46
+ * @param v 输入向量(不修改)。
47
+ * @returns 模长的平方(米²)。
48
+ */
49
+ export declare function vec3MagnitudeSquared(v: Vector3): number;
50
+ //# sourceMappingURL=vec3-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vec3-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/vec3-helpers.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACV,OAAO,CAKT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAI,OAAO,CAMpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAI,OAAO,CAKtF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAE,CAAC,EAAE,OAAO,GAAI,MAAM,CAEzD"}
@@ -0,0 +1,22 @@
1
+ import { Vector3 } from 'three';
2
+ /**
3
+ * 把 (lon°, lat°, h) 转为 ECEF Vector3,Three.js 世界坐标系。
4
+ *
5
+ * @param longitudeDegrees 经度,度(范围 [-180, 180])。
6
+ * @param latitudeDegrees 纬度,度(范围 [-90, 90])。
7
+ * @param height 高度,米;默认 0(椭球表面)。
8
+ * @returns ECEF Vector3(每次新建,可以安全持有)。
9
+ */
10
+ export declare function wgs84PositionFromDegrees(longitudeDegrees: number, latitudeDegrees: number, height?: number): Vector3;
11
+ /**
12
+ * 把 (lon°, lat°) 转为该地理位置的椭球面单位法向(指向外)。
13
+ *
14
+ * 高度不影响法向,故不接受 height 参数。Up 向量、相机方向、ENU 基底
15
+ * 的 U 轴等场景使用。
16
+ *
17
+ * @param longitudeDegrees 经度,度。
18
+ * @param latitudeDegrees 纬度,度。
19
+ * @returns 单位法向 Vector3(每次新建)。
20
+ */
21
+ export declare function wgs84NormalFromDegrees(longitudeDegrees: number, latitudeDegrees: number): Vector3;
22
+ //# sourceMappingURL=wgs84-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgs84-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/math/wgs84-helpers.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAYhC;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACvC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,MAAM,SAAM,GACV,OAAO,CAQT;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACrC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,GACrB,OAAO,CAQT"}
@@ -0,0 +1,71 @@
1
+ import { Vector2, Vector3 } from 'three';
2
+ /**
3
+ * 椭球切平面数据结构。
4
+ *
5
+ * 数学不变量:
6
+ * - `origin` 在椭球面上(由 scaleToGeodeticSurface 保证)
7
+ * - `normal` 是 origin 处的椭球面外法向(单位向量)
8
+ * - `xAxis` / `yAxis` 在切平面内,正交,单位向量,且 `xAxis × yAxis = normal`(右手系)
9
+ * - `xAxis` 对齐 ENU 的 east 基底,`yAxis` 对齐 ENU 的 north 基底
10
+ * - `distance` 是 Cesium Plane 公式中的常数项:`distance = -dot(origin, normal)`
11
+ * ⇒ 平面方程为 `dot(P, normal) + distance = 0`
12
+ */
13
+ export interface EllipsoidTangentPlane {
14
+ /** 切点(椭球面上的 ECEF 位置,米) */
15
+ origin: Vector3;
16
+ /** 切平面外法向(单位向量,沿椭球面在 origin 处的法线) */
17
+ normal: Vector3;
18
+ /** 切平面 "east" 基底(单位向量,正交于 normal) */
19
+ xAxis: Vector3;
20
+ /** 切平面 "north" 基底(单位向量,正交于 normal 与 xAxis,组成右手系) */
21
+ yAxis: Vector3;
22
+ /** Cesium Plane 公式常数项:plane(P) = dot(P, normal) + distance = 0 */
23
+ distance: number;
24
+ }
25
+ /**
26
+ * 由一组 ECEF 点构造切平面,中心取 AABB(轴对齐包围盒)中心。
27
+ *
28
+ * 复刻 Cesium `EllipsoidTangentPlane.fromPoints` 调用 `AxisAlignedBoundingBox.fromPoints`
29
+ * 取 `box.center = (box.minimum + box.maximum) / 2` 这一精确路径。**不要**用算术平均
30
+ * (`Σ p_i / N`),否则会与 Cesium 字节级输出有微差(R2)。
31
+ *
32
+ * 算法 6 步:
33
+ * 1. AABB 扫描:遍历 points 求 (minX, minY, minZ) 与 (maxX, maxY, maxZ)
34
+ * 2. center = ((min + max) / 2)
35
+ * 3. origin = scaleToGeodeticSurface(center) ◄── math/ellipsoid.ts
36
+ * 4. 在 origin 上构造 ENU → ECEF 矩阵 ◄── math/enu-frame.ts
37
+ * 5. 从矩阵列 0/1/2 取 xAxis (east) / yAxis (north) / normal (up)
38
+ * 6. distance = -dot(origin, normal)
39
+ *
40
+ * 数值示例(珠峰 5 顶点 polygon):
41
+ * AABB.min ≈ (+299870, +5627990, +2971890)
42
+ * AABB.max ≈ (+304850, +5628570, +2977340)
43
+ * center ≈ (+302360, +5628280, +2974615)
44
+ * origin = scaleToGeodeticSurface(center) ≈ 几乎不变(已在椭球面附近)
45
+ * normal ≈ (+0.0473, +0.8830, +0.4670) ≈ (cos27.99°cos86.92°, cos27.99°sin86.92°, sin27.99°)
46
+ * xAxis ≈ (+0.9988, -0.0537, +0.0000) ≈ ENU east
47
+ * yAxis ≈ (-0.0251, -0.4664, +0.8842) ≈ ENU north
48
+ *
49
+ * @param points 输入 ECEF 点数组(非空,典型为 polygon outer ring)。
50
+ * @returns 构造好的切平面(原 Vector3 实例,可安全持有)。
51
+ * @throws points 为空 / origin 在椭球中心退化时。
52
+ */
53
+ export declare function tangentPlaneFromPoints(points: readonly Vector3[]): EllipsoidTangentPlane;
54
+ /**
55
+ * 把一组 ECEF 点投影到切平面 2D 坐标系。
56
+ *
57
+ * 复刻 Cesium EllipsoidTangentPlane.projectPointsOntoPlane(L215-238) +
58
+ * projectPointOntoPlane(L160-203):**逐点构造一条从 P 出发、方向 = normalize(P)
59
+ * 的 ray,与切平面求交**,然后把交点减去 origin 后投影到 (xAxis, yAxis) 得 2D 坐标。
60
+ *
61
+ * **关键不变量**:对 polygon-rings.ts 已 scaleToGeodeticSurface 过的输入,所有 P
62
+ * 都在椭球面上、且离 tangentPlane.origin ≤ 数 km 量级,ray 永远会成功命中切平面。
63
+ * Cesium 把"投影失败的点"从输出数组中剔除(`projectPointsOntoPlane` 内部 `count++`
64
+ * 跳过 undefined);本实现也保留同样语义(返回的数组长度可能小于输入)。
65
+ *
66
+ * @param tangentPlane 切平面(由 tangentPlaneFromPoints 产出)。
67
+ * @param points 输入 ECEF 点序列。
68
+ * @returns 2D 切平面坐标数组(长度 ≤ points.length,失败点被剔除)。
69
+ */
70
+ export declare function projectPointsOntoPlane(tangentPlane: EllipsoidTangentPlane, points: readonly Vector3[]): Vector2[];
71
+ //# sourceMappingURL=ellipsoid-tangent-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsoid-tangent-plane.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/polygon/ellipsoid-tangent-plane.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAW,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAUlD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACrC,0BAA0B;IAC1B,MAAM,EAAE,OAAO,CAAC;IAEhB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAEhB,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IAEf,oDAAoD;IACpD,KAAK,EAAE,OAAO,CAAC;IAEf,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;CACjB;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,SAAS,OAAO,EAAE,GAAI,qBAAqB,CAkE1F;AAkDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACrC,YAAY,EAAE,qBAAqB,EACnC,MAAM,EAAE,SAAS,OAAO,EAAE,GACxB,OAAO,EAAE,CAuDX"}
@@ -0,0 +1,59 @@
1
+ import type { EllipsoidTangentPlane } from './ellipsoid-tangent-plane';
2
+ import type { PolygonHierarchy } from './polygon-hierarchy';
3
+ /**
4
+ * Polygon cap(顶面)构造结果。
5
+ *
6
+ * - `positions`:Float64 ECEF 顶点(在椭球面上),长度 = 3 × vertexCount。
7
+ * vertexCount = 原 ring 顶点总数(外环 + holes 合并)+ subdivision 新增中点数。
8
+ * subdivision 中点在 ring 顶点之后追加(由 computeSubdivision 实现保证)。
9
+ * ⚠️ 注意:cap.positions 是 Float64Array,**下游 scaleToGeodeticHeight 会原地修改它**
10
+ * — 调用方若需要保留原始 cap.positions,自行 slice() 一份。
11
+ *
12
+ * - `indices`:顶面三角形索引,vertexCount ≤ 65535 时为 Uint16Array,否则 Uint32Array。
13
+ *
14
+ * - `tangentPlane`:切平面(从 processPolygonRings 透传);
15
+ * polygon-extents.ts / polygon-style-points.ts 在更上层可能用得到。
16
+ *
17
+ * - `rings`:原始 ring 边界数组(**不含 subdivision 新中点**)。
18
+ * 排列:[ 外环信息, hole_0 信息, hole_1 信息, ... ]。
19
+ * `startIndex` 与 `length` 在 `positions[0..originalRingTotal × 3)` 子区间内有效。
20
+ * polygon-wall-construction.ts 用它遍历每个 ring 的边界顶点产 wall。
21
+ */
22
+ export interface PolygonCapResult {
23
+ positions: Float64Array;
24
+ indices: Uint16Array | Uint32Array;
25
+ tangentPlane: EllipsoidTangentPlane;
26
+ rings: {
27
+ startIndex: number;
28
+ length: number;
29
+ }[];
30
+ }
31
+ /**
32
+ * 从 PolygonHierarchy 构造顶面三角网格(在椭球面上的 cap)。
33
+ *
34
+ * 算法(5 步):
35
+ * 1. processPolygonRings(hierarchy):
36
+ * → { positions: Vector3[], positions2D: Vector2[],
37
+ * holeStartIndices: number[], tangentPlane, rings }
38
+ *
39
+ * 2. triangulate(positions2D, holeStartIndices):
40
+ * → number[],每 3 个一组 = 一个三角形;顶点 ID 在 positions 数组的索引空间。
41
+ *
42
+ * 3. computeSubdivision(positions, rawIndices, granularity):
43
+ * → { positions: Float64Array, indices: Uint32Array }
44
+ * ECEF 顶点扩充为(原 + 中点)的 Float64 数组;索引指向扩充后顶点。
45
+ *
46
+ * 4. 索引类型选择:
47
+ * vertexCount = positions.length / 3
48
+ * 若 ≤ 65535 → 拷一份到 Uint16Array(GPU 上传更省 buffer,WebGL 1 默认即支持)
49
+ * 否则保持 Uint32Array
50
+ *
51
+ * 5. 返回 PolygonCapResult。`rings` 字段从 processPolygonRings 透传,
52
+ * **仍指向 ring 边界顶点 ID**(不包含 subdivision 中点 — 中点 ID ≥ ring 总长度)。
53
+ *
54
+ * @param hierarchy Polygon hierarchy(已被 polygon-hierarchy.ts 转为 Vector3 ECEF)。
55
+ * @param granularity 角分辨率(弧度),控制 subdivision 阈值。
56
+ * @returns PolygonCapResult。
57
+ */
58
+ export declare function constructPolygonCap(hierarchy: PolygonHierarchy, granularity: number): PolygonCapResult;
59
+ //# sourceMappingURL=polygon-cap-construction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-cap-construction.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/polygon/polygon-cap-construction.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;IACnC,YAAY,EAAE,qBAAqB,CAAC;IACpC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,MAAM,GACjB,gBAAgB,CAwClB"}
@@ -0,0 +1,44 @@
1
+ import type { RectangleRadians } from '../types';
2
+ import type { PolygonHierarchy } from './polygon-hierarchy';
3
+ /**
4
+ * 完整 prism 装配结果。
5
+ *
6
+ * 排列约定:
7
+ * positions = [
8
+ * <cap top 顶点 0..capVertexCount-1> (高度 = maximumHeight)
9
+ * <cap bottom 顶点 0..capVertexCount-1> (高度 = minimumHeight)
10
+ * <wall_0 顶点 0..(2 × wallPerSide_0 - 1)> (顺序由 constructPolygonWall 决定)
11
+ * <wall_1 顶点 ...>
12
+ * ...
13
+ * ]
14
+ * extrudeDirection 同序,Float32,长度同 positions。
15
+ *
16
+ * indices = [
17
+ * <cap top 三角形索引> (引用 cap top 顶点 ID 0..capVertexCount-1)
18
+ * <cap bottom 三角形索引(winding 反转 + 加 capVertexCount 偏移)>
19
+ * <wall_0 索引(加 capVertexCount × 2 偏移)>
20
+ * <wall_1 索引(加 capVertexCount × 2 + wall_0 顶点数 偏移)>
21
+ * ...
22
+ * ]
23
+ *
24
+ * polygonRectangle 是 outer ring 顶点的轴对齐经纬度外接矩形(弧度);
25
+ * 由 polygon-extents.ts / polygon-style-points.ts 在更上层使用。
26
+ */
27
+ export interface ExtrudedPolygonResult {
28
+ positions: Float64Array;
29
+ extrudeDirection: Float32Array;
30
+ indices: Uint16Array | Uint32Array;
31
+ polygonRectangle: RectangleRadians;
32
+ }
33
+ /**
34
+ * 构造完整的 polygon shadow volume prism(顶面 + 底面 + 每个 ring 的侧墙)。
35
+ *
36
+ * @param hierarchy Polygon hierarchy(Vector3 ECEF;由 polygon-hierarchy 校验过)。
37
+ * @param granularity 网格精度(弧度);≤ 0 抛错。
38
+ * @param minimumHeight 底面高度(米)。
39
+ * @param maximumHeight 顶面高度(米);必须 > minimumHeight。
40
+ * @returns 完整 prism 装配结果。
41
+ * @throws granularity / 高度参数非法,或几何退化(ring < 3 顶点)。
42
+ */
43
+ export declare function constructExtrudedPolygonShadowVolume(hierarchy: PolygonHierarchy, granularity: number, minimumHeight: number, maximumHeight: number): ExtrudedPolygonResult;
44
+ //# sourceMappingURL=polygon-construct-extruded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-construct-extruded.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/polygon/polygon-construct-extruded.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE,YAAY,CAAC;IACxB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;CACnC;AA+ID;;;;;;;;;GASG;AACH,wBAAgB,oCAAoC,CACnD,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACnB,qBAAqB,CAkIvB"}