@pirireis/webglobeplugins 0.9.6 → 0.9.8

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 (304) hide show
  1. package/{Math → dist/Math}/angle-calculation.js +15 -14
  2. package/dist/Math/arc.js +65 -0
  3. package/{Math → dist/Math}/bounds/line-bbox.js +188 -225
  4. package/dist/Math/constants.js +9 -0
  5. package/{Math/frustum/camera.ts → dist/Math/frustum/camera.js} +24 -32
  6. package/{Math/frustum/from-globeinfo.ts → dist/Math/frustum/from-globeinfo.js} +48 -63
  7. package/dist/Math/frustum/types.js +2 -0
  8. package/{Math/globe-util/horizon-plane.ts → dist/Math/globe-util/horizon-plane.js} +112 -137
  9. package/dist/Math/index.js +1 -0
  10. package/dist/Math/juction/arc-plane.js +83 -0
  11. package/dist/Math/juction/line-sphere.js +25 -0
  12. package/{Math/juction/plane-plane.ts → dist/Math/juction/plane-plane.js} +58 -66
  13. package/dist/Math/line.js +56 -0
  14. package/dist/Math/matrix4.js +1 -0
  15. package/{Math → dist/Math}/methods.js +201 -237
  16. package/dist/Math/plane.js +60 -0
  17. package/{Math/quaternion.ts → dist/Math/quaternion.js} +104 -120
  18. package/dist/Math/types.js +2 -0
  19. package/dist/Math/utils.js +4 -0
  20. package/{Math/vec3.ts → dist/Math/vec3.js} +126 -155
  21. package/dist/algorithms/search-binary.js +19 -0
  22. package/dist/altitude-locator/adaptors.js +1 -0
  23. package/{altitude-locator → dist/altitude-locator}/draw-subset-obj.js +18 -27
  24. package/dist/altitude-locator/keymethod.js +1 -0
  25. package/{altitude-locator → dist/altitude-locator}/plugin.js +341 -439
  26. package/{altitude-locator → dist/altitude-locator}/types.js +23 -26
  27. package/{arrowfield → dist/arrowfield}/adaptor.js +14 -11
  28. package/dist/arrowfield/index.js +10 -0
  29. package/{arrowfield → dist/arrowfield}/plugin.js +86 -128
  30. package/dist/bearing-line/index.js +8 -0
  31. package/{bearing-line → dist/bearing-line}/plugin.js +449 -512
  32. package/{circle-line-chain → dist/circle-line-chain}/chain-list-map.js +205 -221
  33. package/dist/circle-line-chain/init.js +1 -0
  34. package/{circle-line-chain → dist/circle-line-chain}/plugin.js +424 -469
  35. package/dist/circle-line-chain/util.js +5 -0
  36. package/{compass-rose → dist/compass-rose}/compass-rose-padding-flat.js +225 -266
  37. package/{compass-rose → dist/compass-rose}/compass-text-writer.js +153 -173
  38. package/dist/compass-rose/index.js +7 -0
  39. package/{compassrose → dist/compassrose}/compassrose.js +296 -341
  40. package/dist/compassrose/index.js +8 -0
  41. package/dist/globe-types.js +1 -0
  42. package/dist/heatwave/index.js +10 -0
  43. package/{heatwave → dist/heatwave}/isobar/objectarraylabels.js +202 -247
  44. package/{heatwave → dist/heatwave}/isobar/plugin.js +343 -340
  45. package/{heatwave → dist/heatwave}/isobar/quadtreecontours.js +300 -336
  46. package/{heatwave → dist/heatwave}/plugins/heatwaveglobeshell.js +206 -258
  47. package/dist/index.js +58 -0
  48. package/{jest.config.js → dist/jest.config.js} +7 -6
  49. package/{partialrings → dist/partialrings}/buffer-manager.js +81 -89
  50. package/dist/partialrings/index.js +41 -0
  51. package/{partialrings → dist/partialrings}/plugin.js +135 -160
  52. package/{partialrings → dist/partialrings}/program.js +204 -242
  53. package/{pin → dist/pin}/pin-object-array.js +305 -381
  54. package/{pin → dist/pin}/pin-point-totem.js +60 -77
  55. package/{point-heat-map → dist/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +66 -78
  56. package/dist/point-heat-map/index.js +1 -0
  57. package/{point-heat-map → dist/point-heat-map}/plugin-webworker.js +126 -151
  58. package/{point-heat-map → dist/point-heat-map}/point-to-heat-map-flow.js +127 -150
  59. package/dist/point-tracks/key-methods.js +5 -0
  60. package/{point-tracks → dist/point-tracks}/plugin.js +338 -394
  61. package/dist/programs/arrowfield/index.js +7 -0
  62. package/{programs → dist/programs}/arrowfield/logic.js +144 -173
  63. package/{programs → dist/programs}/arrowfield/object.js +66 -89
  64. package/{programs → dist/programs}/data2legend/density-to-legend.js +76 -90
  65. package/{programs → dist/programs}/data2legend/point-to-density-texture.js +76 -90
  66. package/dist/programs/float2legendwithratio/index.js +8 -0
  67. package/{programs → dist/programs}/float2legendwithratio/logic.js +122 -145
  68. package/{programs → dist/programs}/float2legendwithratio/object.js +110 -141
  69. package/{programs → dist/programs}/globe-util/is-globe-moved.js +21 -27
  70. package/dist/programs/globeshell/index.js +8 -0
  71. package/dist/programs/globeshell/noise/noises.js +1 -0
  72. package/dist/programs/globeshell/wiggle/index.js +8 -0
  73. package/{programs → dist/programs}/globeshell/wiggle/logic.js +246 -272
  74. package/{programs → dist/programs}/globeshell/wiggle/object.js +72 -93
  75. package/dist/programs/helpers/blender/index.js +1 -0
  76. package/{programs → dist/programs}/helpers/blender/program.js +61 -73
  77. package/dist/programs/helpers/fadeaway/index.js +7 -0
  78. package/{programs → dist/programs}/helpers/fadeaway/logic.js +49 -53
  79. package/dist/programs/helpers/fadeaway/object.js +20 -0
  80. package/dist/programs/helpers/index.js +8 -0
  81. package/dist/programs/index.js +58 -0
  82. package/dist/programs/interface.js +1 -0
  83. package/{programs → dist/programs}/line-on-globe/angled-line.js +125 -155
  84. package/{programs → dist/programs}/line-on-globe/circle-accurate-3d.js +95 -121
  85. package/{programs → dist/programs}/line-on-globe/circle-accurate-flat.js +158 -204
  86. package/{programs → dist/programs}/line-on-globe/circle-accurate.js +117 -141
  87. package/{programs → dist/programs}/line-on-globe/circle.js +111 -135
  88. package/{programs → dist/programs}/line-on-globe/degree-padding-around-circle-3d.js +111 -140
  89. package/dist/programs/line-on-globe/index.js +1 -0
  90. package/{programs → dist/programs}/line-on-globe/lines-color-instanced-flat.js +91 -106
  91. package/{programs/line-on-globe/linestrip.ts → dist/programs/line-on-globe/linestrip.js} +108 -165
  92. package/{programs → dist/programs}/line-on-globe/naive-accurate-flexible.js +127 -171
  93. package/{programs → dist/programs}/line-on-globe/to-the-surface.js +83 -101
  94. package/dist/programs/line-on-globe/util.js +8 -0
  95. package/{programs → dist/programs}/picking/pickable-renderer.js +107 -135
  96. package/{programs → dist/programs}/point-on-globe/element-globe-surface-glow.js +101 -127
  97. package/{programs → dist/programs}/point-on-globe/element-point-glow.js +88 -119
  98. package/{programs → dist/programs}/point-on-globe/square-pixel-point.js +126 -141
  99. package/{programs/programcache.ts → dist/programs/programcache.js} +131 -131
  100. package/{programs → dist/programs}/rings/distancering/circleflatprogram.js +115 -95
  101. package/{programs → dist/programs}/rings/distancering/circlepaddingfreeangleprogram.js +320 -329
  102. package/{programs → dist/programs}/rings/distancering/circlepaddysharedbuffer.js +357 -420
  103. package/dist/programs/rings/distancering/index.js +14 -0
  104. package/{programs → dist/programs}/rings/distancering/paddyflatprogram.js +120 -94
  105. package/{programs → dist/programs}/rings/distancering/paddyflatprogram2d.js +122 -98
  106. package/{programs → dist/programs}/rings/distancering/paddyflatprogram3d.js +120 -94
  107. package/dist/programs/rings/distancering/shader.js +1 -0
  108. package/dist/programs/rings/index.js +17 -0
  109. package/{programs → dist/programs}/rings/partial-ring/piece-of-pie.js +181 -221
  110. package/{programs → dist/programs}/totems/camerauniformblock.js +147 -184
  111. package/{programs → dist/programs}/totems/canvas-webglobe-info.js +102 -128
  112. package/{programs → dist/programs}/totems/gpu-selection-uniform-block.js +104 -128
  113. package/dist/programs/totems/index.js +40 -0
  114. package/dist/programs/two-d/pixel-circle.js +1 -0
  115. package/{programs → dist/programs}/two-d/pixel-padding-for-compass.js +101 -113
  116. package/{programs → dist/programs}/util.js +17 -20
  117. package/dist/programs/vectorfields/index.js +23 -0
  118. package/{programs → dist/programs}/vectorfields/logics/drawrectangleparticles.js +65 -83
  119. package/dist/programs/vectorfields/logics/index.js +12 -0
  120. package/{programs → dist/programs}/vectorfields/logics/pixelbased.js +84 -103
  121. package/{programs → dist/programs}/vectorfields/logics/ubo.js +55 -56
  122. package/{programs → dist/programs}/vectorfields/pingpongbuffermanager.js +76 -80
  123. package/dist/rangerings/enum.js +5 -0
  124. package/dist/rangerings/index.js +15 -0
  125. package/{rangerings → dist/rangerings}/plugin.js +560 -649
  126. package/{rangerings → dist/rangerings}/rangeringangletext.js +329 -368
  127. package/{rangerings → dist/rangerings}/ring-account.js +117 -129
  128. package/{shaders → dist/shaders}/fragment-toy/firework.js +5 -2
  129. package/{shaders → dist/shaders}/fragment-toy/singularity.js +5 -5
  130. package/{shape-on-terrain/arc/naive/plugin.ts → dist/shape-on-terrain/arc/naive/plugin.js} +252 -304
  131. package/{timetracks → dist/timetracks}/adaptors-line-strip.js +71 -80
  132. package/{timetracks → dist/timetracks}/adaptors.js +122 -133
  133. package/dist/timetracks/index.js +19 -0
  134. package/{timetracks → dist/timetracks}/plugin-line-strip.js +250 -295
  135. package/{timetracks → dist/timetracks}/plugin.js +258 -304
  136. package/{timetracks → dist/timetracks}/program-line-strip.js +416 -493
  137. package/{timetracks → dist/timetracks}/program.js +464 -542
  138. package/{timetracks → dist/timetracks}/programpoint-line-strip.js +101 -122
  139. package/{timetracks → dist/timetracks}/programpoint.js +101 -122
  140. package/{types.ts → dist/types.js} +15 -17
  141. package/{util → dist/util}/account/bufferoffsetmanager.js +179 -209
  142. package/dist/util/account/index.js +23 -0
  143. package/{util/account/single-attribute-buffer-management/buffer-manager.ts → dist/util/account/single-attribute-buffer-management/buffer-manager.js} +108 -119
  144. package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → dist/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +150 -173
  145. package/dist/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/{util/account/single-attribute-buffer-management/object-store.ts → dist/util/account/single-attribute-buffer-management/object-store.js} +51 -65
  147. package/dist/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/{util → dist/util}/account/util.js +22 -22
  149. package/dist/util/algorithms/index.js +1 -0
  150. package/{util → dist/util}/algorithms/search-binary.js +28 -26
  151. package/dist/util/check/get.js +18 -0
  152. package/dist/util/check/index.js +1 -0
  153. package/dist/util/check/typecheck.js +49 -0
  154. package/{util → dist/util}/geometry/index.js +51 -53
  155. package/{util/gl-util/buffer/attribute-loader.ts → dist/util/gl-util/buffer/attribute-loader.js} +69 -85
  156. package/dist/util/gl-util/buffer/index.js +6 -0
  157. package/dist/util/gl-util/buffer/types.js +1 -0
  158. package/dist/util/gl-util/draw-options/methods.js +38 -0
  159. package/dist/util/gl-util/draw-options/types.js +15 -0
  160. package/{util/gl-util/uniform-block/manager.ts → dist/util/gl-util/uniform-block/manager.js} +156 -187
  161. package/dist/util/gl-util/uniform-block/shader.js +1 -0
  162. package/dist/util/gl-util/uniform-block/types.js +8 -0
  163. package/{util → dist/util}/heatwavedatamanager/datamanager.js +152 -168
  164. package/dist/util/heatwavedatamanager/index.js +10 -0
  165. package/{util → dist/util}/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -133
  166. package/{util → dist/util}/heatwavedatamanager/pointcoordsmeta.js +20 -22
  167. package/dist/util/index.js +57 -0
  168. package/dist/util/interpolation/index.js +1 -0
  169. package/dist/util/interpolation/timetrack/index.js +5 -0
  170. package/{util → dist/util}/interpolation/timetrack/timetrack-interpolator.js +79 -88
  171. package/{util → dist/util}/interpolation/timetrack/web-worker-str.js +5 -2
  172. package/{util → dist/util}/interpolation/timetrack/web-worker.js +48 -51
  173. package/{util → dist/util}/jshelpers/data-filler.js +20 -19
  174. package/{util → dist/util}/jshelpers/equality.js +20 -17
  175. package/dist/util/jshelpers/index.js +37 -0
  176. package/{util → dist/util}/jshelpers/timefilters.js +32 -32
  177. package/{util → dist/util}/picking/fence.js +46 -46
  178. package/{util → dist/util}/picking/picker-displayer.js +139 -177
  179. package/{util → dist/util}/programs/draw-texture-on-canvas.js +69 -82
  180. package/dist/util/programs/index.js +17 -0
  181. package/{util → dist/util}/programs/shapesonglobe.js +174 -206
  182. package/{util → dist/util}/programs/supersampletotextures.js +103 -132
  183. package/{util → dist/util}/programs/texturetoglobe.js +133 -154
  184. package/{util/shaderfunctions/geometrytransformations.ts → dist/util/shaderfunctions/geometrytransformations.js} +68 -116
  185. package/dist/util/shaderfunctions/index.js +18 -0
  186. package/{util → dist/util}/shaderfunctions/nodata.js +5 -4
  187. package/{util → dist/util}/shaderfunctions/noisefunctions.js +9 -10
  188. package/{util/surface-line-data/arc-bboxes.ts → dist/util/surface-line-data/arc-bboxes.js} +25 -42
  189. package/{util → dist/util}/surface-line-data/arcs-to-cuts.js +50 -74
  190. package/dist/util/surface-line-data/cut-arc.js +1 -0
  191. package/{util/surface-line-data/flow.ts → dist/util/surface-line-data/flow.js} +28 -52
  192. package/dist/util/surface-line-data/rbush-manager.js +1 -0
  193. package/dist/util/surface-line-data/types.js +1 -0
  194. package/dist/util/surface-line-data/web-worker.js +1 -0
  195. package/dist/util/webglobe/gldefaultstates.js +7 -0
  196. package/dist/util/webglobe/index.js +18 -0
  197. package/{util → dist/util}/webglobe/rasteroverlay.js +78 -96
  198. package/{util/webglobjectbuilders.ts → dist/util/webglobjectbuilders.js} +388 -456
  199. package/{util → dist/util}/webglobjectbuilders1.js +237 -271
  200. package/{waveparticles → dist/waveparticles}/adaptor.js +17 -16
  201. package/dist/waveparticles/index.js +10 -0
  202. package/{waveparticles → dist/waveparticles}/plugin.js +266 -313
  203. package/{wind → dist/wind}/imagetovectorfieldandmagnitude.js +35 -39
  204. package/dist/wind/index.js +14 -0
  205. package/{wind → dist/wind}/plugin.js +681 -812
  206. package/{wind → dist/wind}/vectorfieldimage.js +25 -27
  207. package/{write-text → dist/write-text}/attached-text-writer.js +91 -105
  208. package/{write-text → dist/write-text}/context-text.js +98 -125
  209. package/{write-text → dist/write-text}/context-text3.js +155 -178
  210. package/dist/write-text/index.js +5 -0
  211. package/{write-text → dist/write-text}/writer-plugin.js +8 -7
  212. package/package.json +5 -2
  213. package/Math/arc.ts +0 -76
  214. package/Math/constants.ts +0 -11
  215. package/Math/frustum/types.ts +0 -11
  216. package/Math/index.js +0 -0
  217. package/Math/juction/arc-plane.ts +0 -114
  218. package/Math/juction/line-sphere.ts +0 -30
  219. package/Math/line.ts +0 -70
  220. package/Math/matrix4.ts +0 -0
  221. package/Math/plane.ts +0 -86
  222. package/Math/roadmap.md +0 -10
  223. package/Math/types.ts +0 -45
  224. package/Math/utils.js +0 -3
  225. package/algorithms/search-binary.js +0 -14
  226. package/altitude-locator/adaptors.js +0 -0
  227. package/altitude-locator/keymethod.js +0 -0
  228. package/arrowfield/index.js +0 -3
  229. package/bearing-line/index.js +0 -2
  230. package/circle-line-chain/init.js +0 -0
  231. package/circle-line-chain/readme.md +0 -57
  232. package/circle-line-chain/util.js +0 -1
  233. package/compass-rose/index.js +0 -3
  234. package/compassrose/index.js +0 -2
  235. package/depth-locator/readme.md +0 -26
  236. package/globe-types.ts +0 -13
  237. package/heatwave/index.js +0 -4
  238. package/partialrings/goals.md +0 -17
  239. package/partialrings/index.js +0 -3
  240. package/point-heat-map/index.js +0 -0
  241. package/point-heat-map/readme.md +0 -15
  242. package/point-tracks/key-methods.js +0 -3
  243. package/programs/arrowfield/index.js +0 -2
  244. package/programs/float2legendwithratio/index.js +0 -3
  245. package/programs/globeshell/index.js +0 -2
  246. package/programs/globeshell/noise/noises.js +0 -0
  247. package/programs/globeshell/wiggle/index.js +0 -6
  248. package/programs/helpers/blender/index.js +0 -0
  249. package/programs/helpers/fadeaway/index.js +0 -3
  250. package/programs/helpers/fadeaway/object.js +0 -20
  251. package/programs/helpers/index.js +0 -2
  252. package/programs/index.js +0 -21
  253. package/programs/interface.ts +0 -7
  254. package/programs/line-on-globe/index.js +0 -0
  255. package/programs/line-on-globe/util.js +0 -8
  256. package/programs/rings/distancering/index.js +0 -5
  257. package/programs/rings/distancering/shader.js +0 -0
  258. package/programs/rings/index.js +0 -1
  259. package/programs/totems/camerauniformblock.d.ts +0 -48
  260. package/programs/totems/index.ts +0 -2
  261. package/programs/two-d/pixel-circle.js +0 -0
  262. package/programs/vectorfields/index.js +0 -3
  263. package/programs/vectorfields/logics/index.js +0 -5
  264. package/publish.bat +0 -60
  265. package/rangerings/enum.js +0 -3
  266. package/rangerings/index.js +0 -5
  267. package/shape-on-terrain/goal.md +0 -12
  268. package/tests/Math/junction/arc-plane.test.ts +0 -133
  269. package/tests/Math/junction/plane-plane.test.ts +0 -82
  270. package/tests/Math/plane.test.ts +0 -43
  271. package/tests/Math/vec3.test.ts +0 -14
  272. package/timetracks/index.js +0 -6
  273. package/timetracks/readme.md +0 -1
  274. package/tsconfig.json +0 -22
  275. package/util/account/index.js +0 -6
  276. package/util/account/single-attribute-buffer-management/index.ts +0 -13
  277. package/util/account/single-attribute-buffer-management/types.ts +0 -39
  278. package/util/algorithms/index.js +0 -0
  279. package/util/check/get.js +0 -13
  280. package/util/check/index.js +0 -0
  281. package/util/check/typecheck.js +0 -39
  282. package/util/gl-util/buffer/index.ts +0 -6
  283. package/util/gl-util/buffer/types.ts +0 -13
  284. package/util/gl-util/draw-options/methods.ts +0 -66
  285. package/util/gl-util/draw-options/types.ts +0 -28
  286. package/util/gl-util/uniform-block/roadmap.md +0 -70
  287. package/util/gl-util/uniform-block/shader.js +0 -0
  288. package/util/gl-util/uniform-block/types.ts +0 -27
  289. package/util/heatwavedatamanager/index.js +0 -3
  290. package/util/index.js +0 -13
  291. package/util/interpolation/index.js +0 -0
  292. package/util/interpolation/timetrack/index.js +0 -9
  293. package/util/jshelpers/index.js +0 -1
  294. package/util/programs/index.js +0 -1
  295. package/util/shaderfunctions/index.js +0 -2
  296. package/util/surface-line-data/cut-arc.js +0 -0
  297. package/util/surface-line-data/rbush-manager.js +0 -0
  298. package/util/surface-line-data/types.ts +0 -27
  299. package/util/surface-line-data/web-worker.js +0 -0
  300. package/util/webglobe/gldefaultstates.js +0 -5
  301. package/util/webglobe/index.js +0 -2
  302. package/waveparticles/index.js +0 -3
  303. package/wind/index.js +0 -5
  304. package/write-text/index.js +0 -1
@@ -1,63 +1,48 @@
1
- // import { Plane } from "../plane";
2
- // import { Vector3D } from "../vector3d";
3
- // import { WORLD_RADIUS_3D } from "../constants";
4
- // import { Quaternion } from "../quaternion";
5
-
6
- // import { FrustumPlanes } from "./types";
7
-
8
- // const _quaternion = new Quaternion();
9
-
10
- // export function getFrustum(globe: any, fieldOfView: number = 50 * Math.PI / 180,
11
- // out: FrustumPlanes): void {
12
-
13
- // const lookinfo = globe.api_GetCurrentLookInfo();
14
- // lookinfo.CenterLong *= Math.PI / 180; // convert degrees to radians
15
- // lookinfo.CenterLat *= Math.PI / 180; // convert degrees to radians
16
- // lookinfo.NorthAng *= Math.PI / 180; // convert degrees to radians
17
-
18
- // const lookAtPosition = Vector3D.fromLongLatRadians(lookinfo.CenterLong, lookinfo.CenterLat);
19
- // const cameraPosition = new Vector3D(globe.Fp.x, globe.Fp.y, globe.Fp.z).divideByScaler(WORLD_RADIUS_3D);
20
- // const lookFromCamera = lookAtPosition.clone().subtract(cameraPosition).normalize();
21
-
22
-
23
- // const cameraZ = new Vector3D(globe.Fu.x, globe.Fu.y, globe.Fu.z);
24
- // const cameraY = cameraZ.clone().cross(lookFromCamera).normalize();
25
-
26
- // const bottomNormal = cameraZ.clone().applyQuaternion(
27
- // _quaternion.setFromAxisAngle(cameraY, -fieldOfView)
28
- // ).normalize();
29
-
30
- // const topNormal = cameraZ.clone().applyQuaternion(
31
- // _quaternion.setFromAxisAngle(cameraY, fieldOfView)
32
- // ).negate().normalize();
33
- // const leftNormal = cameraY.clone().applyQuaternion(
34
- // _quaternion.setFromAxisAngle(cameraZ, fieldOfView)
35
- // ).negate().normalize();
36
-
37
- // const rightNormal = cameraY.clone().applyQuaternion(
38
- // _quaternion.setFromAxisAngle(cameraZ, -fieldOfView)
39
- // ).normalize();
40
-
41
-
42
- // out.top.set(topNormal, topNormal.dot(cameraPosition));
43
- // out.bottom.set(bottomNormal, bottomNormal.dot(cameraPosition));
44
- // out.left.set(leftNormal, leftNormal.dot(cameraPosition));
45
- // out.right.set(rightNormal, rightNormal.dot(cameraPosition));
46
- // out.far.set(cameraPosition.normalize(), 0.01);
47
- // out.near = null; // Near plane is not calculated in this function, set to null
48
- // vectorInfo(globe, [out]);
49
-
50
- // }
51
-
52
- // let interval = 0;
53
-
54
- // const vectorInfo = (globe, args: null | Array<any>) => {
55
- // interval++;
56
- // if (interval % 100 === 0) {
57
- // console.log("Fp:", globe.Fp.x / WORLD_RADIUS_3D, globe.Fp.y / WORLD_RADIUS_3D, globe.Fp.z / WORLD_RADIUS_3D);
58
- // console.log("Fu:", globe.Fu.x, globe.Fu.y, globe.Fu.z);
59
-
60
- // if (args) console.log(...args)
61
- // interval = 0;
62
- // }
63
- // }
1
+ "use strict";
2
+ // import { Plane } from "../plane";
3
+ // import { Vector3D } from "../vector3d";
4
+ // import { WORLD_RADIUS_3D } from "../constants";
5
+ // import { Quaternion } from "../quaternion";
6
+ // import { FrustumPlanes } from "./types";
7
+ // const _quaternion = new Quaternion();
8
+ // export function getFrustum(globe: any, fieldOfView: number = 50 * Math.PI / 180,
9
+ // out: FrustumPlanes): void {
10
+ // const lookinfo = globe.api_GetCurrentLookInfo();
11
+ // lookinfo.CenterLong *= Math.PI / 180; // convert degrees to radians
12
+ // lookinfo.CenterLat *= Math.PI / 180; // convert degrees to radians
13
+ // lookinfo.NorthAng *= Math.PI / 180; // convert degrees to radians
14
+ // const lookAtPosition = Vector3D.fromLongLatRadians(lookinfo.CenterLong, lookinfo.CenterLat);
15
+ // const cameraPosition = new Vector3D(globe.Fp.x, globe.Fp.y, globe.Fp.z).divideByScaler(WORLD_RADIUS_3D);
16
+ // const lookFromCamera = lookAtPosition.clone().subtract(cameraPosition).normalize();
17
+ // const cameraZ = new Vector3D(globe.Fu.x, globe.Fu.y, globe.Fu.z);
18
+ // const cameraY = cameraZ.clone().cross(lookFromCamera).normalize();
19
+ // const bottomNormal = cameraZ.clone().applyQuaternion(
20
+ // _quaternion.setFromAxisAngle(cameraY, -fieldOfView)
21
+ // ).normalize();
22
+ // const topNormal = cameraZ.clone().applyQuaternion(
23
+ // _quaternion.setFromAxisAngle(cameraY, fieldOfView)
24
+ // ).negate().normalize();
25
+ // const leftNormal = cameraY.clone().applyQuaternion(
26
+ // _quaternion.setFromAxisAngle(cameraZ, fieldOfView)
27
+ // ).negate().normalize();
28
+ // const rightNormal = cameraY.clone().applyQuaternion(
29
+ // _quaternion.setFromAxisAngle(cameraZ, -fieldOfView)
30
+ // ).normalize();
31
+ // out.top.set(topNormal, topNormal.dot(cameraPosition));
32
+ // out.bottom.set(bottomNormal, bottomNormal.dot(cameraPosition));
33
+ // out.left.set(leftNormal, leftNormal.dot(cameraPosition));
34
+ // out.right.set(rightNormal, rightNormal.dot(cameraPosition));
35
+ // out.far.set(cameraPosition.normalize(), 0.01);
36
+ // out.near = null; // Near plane is not calculated in this function, set to null
37
+ // vectorInfo(globe, [out]);
38
+ // }
39
+ // let interval = 0;
40
+ // const vectorInfo = (globe, args: null | Array<any>) => {
41
+ // interval++;
42
+ // if (interval % 100 === 0) {
43
+ // console.log("Fp:", globe.Fp.x / WORLD_RADIUS_3D, globe.Fp.y / WORLD_RADIUS_3D, globe.Fp.z / WORLD_RADIUS_3D);
44
+ // console.log("Fu:", globe.Fu.x, globe.Fu.y, globe.Fu.z);
45
+ // if (args) console.log(...args)
46
+ // interval = 0;
47
+ // }
48
+ // }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,137 +1,112 @@
1
- // TODO: REMOVE
2
-
3
- // // import { Vector3D, Quaternion, Plane, Ray, Matrix4 } from 'your-3d-math-library'; // <-- ADAPT THIS IMPORT
4
-
5
- // import { Vector3D } from '../vector3d';
6
- // import { Plane } from '../plane';
7
- // import { Line } from '../line';
8
- // import { Matrix4 } from '../matrix4';
9
- // import { Quaternion } from '../quaternion';
10
-
11
- // // --- Assume these static helper variables exist within your class ---
12
- // const _lookFromOrigin = new Vector3D();
13
- // const _cameraPosition = new Vector3D();
14
- // const _finalForward = new Vector3D();
15
- // const _approxUp = new Vector3D();
16
- // const _finalRight = new Vector3D();
17
- // const _finalUp = new Vector3D();
18
- // const _tempVec = new Vector3D(); // General purpose helper
19
- // const _initialBottomRayDir = new Vector3D();
20
- // const _qOrient = new Quaternion();
21
- // const _rollQuaternion = new Quaternion();
22
- // const _rotationMatrix = new Matrix4();
23
- // const _fieldOfViewBottomRay = new Line(new Vector3D(), new Vector3D());
24
- // const _origin3d = new Vector3D(0, 0, 0); // Globe Center
25
-
26
- // // --- Assume these constants exist ---
27
- // const WORLD_RADIUS_3D = 6371000; // Example: Earth radius
28
- // const FIELD_OF_VIEW = (25 * Math.PI) / 180; // Example: 25 degrees half-FOV in radians
29
-
30
- // // // --- Assume Plane class has these methods ---
31
- // // interface Plane {
32
- // // setFromNormalAndPoint(normal: Vector3D, point: Vector3D): this;
33
- // // set(normal: Vector3D, constant: number): this;
34
- // // // ... other plane methods
35
- // // }
36
-
37
- // // // --- Assume Ray class has these methods ---
38
- // // interface Ray {
39
- // // origin: Vector3D;
40
- // // direction: Vector3D;
41
- // // intersectionSphere(center: Vector3D, radius: number): Vector3D[] | null; // Or similar
42
- // // // ... other ray methods
43
- // // }
44
-
45
- // // // --- Assume Vector3D has setFromLongLat ---
46
- // // interface Vector3D {
47
- // // setFromLongLat(lon: number, lat: number): this;
48
- // // // ... other vector methods
49
- // // }
50
- // // // --- END OF ASSUMPTIONS ---
51
-
52
-
53
- // /**
54
- // * Calculates a culling plane representing the bottom edge of the camera's field of view.
55
- // * @param globe - The globe object, expected to have api_GetCurrentLookInfo and Fp properties.
56
- // * @param out - The Plane object to store the result.
57
- // * @param fieldOfView - The vertical half-angle of the field of view in radians.
58
- // * @returns The calculated Plane.
59
- // */
60
- // function calculateHorizonPlane(globe: any, out: Plane, fieldOfView: number = FIELD_OF_VIEW): Plane {
61
-
62
- // const cameraLookInfo = globe.api_GetCurrentLookInfo();
63
- // cameraLookInfo.CenterLong *= Math.PI / 180;
64
- // cameraLookInfo.CenterLat *= Math.PI / 180;
65
- // // cameraLookInfo.Tilt *= Math.PI / 180; // Tilt is now implicitly handled
66
- // cameraLookInfo.NorthAng *= Math.PI / 180;
67
-
68
- // // Set _lookFromOrigin based on camera target (Lon/Lat)
69
- // (_lookFromOrigin as any).setFromLongLat(cameraLookInfo.CenterLong, cameraLookInfo.CenterLat); // Cast to any if setFromLongLat is custom
70
-
71
- // // 1. Calculate _cameraPosition and _finalForward (_lookFromCamera)
72
- // _cameraPosition.set(globe.Fp.x, globe.Fp.y, globe.Fp.z); // Using your X negation
73
- // _cameraPosition.divideScalar(WORLD_RADIUS_3D); // Scale to unit sphere
74
-
75
- // Vector3D.subVectors(_lookFromOrigin, _cameraPosition, _finalForward).normalize();
76
-
77
- // // 2. Calculate Q_orient (Final Camera Orientation Quaternion)
78
-
79
- // // Use the vector from origin to camera as an initial 'up' reference
80
- // _approxUp.copy(_cameraPosition).normalize();
81
-
82
- // // Calculate Right vector using cross product
83
- // Vector3D.crossVectors(_finalForward, _approxUp, _finalRight).normalize();
84
-
85
- // // Handle edge case: If looking straight along (or opposite to) _approxUp
86
- // if (_finalRight.lengthSq() < 0.0001) {
87
- // // If vectors are parallel, _approxUp is not good.
88
- // // Choose a different 'up', e.g., if _approxUp is near Z, use Y.
89
- // if (Math.abs(_approxUp.z) > 0.9) {
90
- // _approxUp.set(0, 1, 0);
91
- // } else {
92
- // _approxUp.set(0, 0, 1);
93
- // }
94
- // Vector3D.crossVectors(_finalForward, _approxUp, _finalRight).normalize();
95
- // }
96
-
97
- // // Calculate the 'true' Up vector, orthogonal to Right and Forward
98
- // Vector3D.crossVectors(_finalRight, _finalForward, _finalUp).normalize();
99
-
100
- // // Apply NorthAng (Roll) around the Forward axis
101
- // _rollQuaternion.setFromAxisAngle(_finalForward, cameraLookInfo.NorthAng);
102
- // _finalUp.applyQuaternion(_rollQuaternion);
103
- // _finalRight.applyQuaternion(_rollQuaternion); // Must rotate Right as well!
104
-
105
- // // Create Q_orient from the final basis vectors (Right, Up, -Forward)
106
- // // This assumes a Matrix4.makeBasis(x, y, z) exists and builds a rotation matrix.
107
- // // It also assumes local camera looks down -Z, hence negating _finalForward for the Z basis.
108
- // _tempVec.copy(_finalForward).negate();
109
- // _rotationMatrix.makeBasis(_finalRight, _finalUp, _tempVec); // <-- ADAPT: Ensure your library has makeBasis or equivalent
110
- // _qOrient.setFromRotationMatrix(_rotationMatrix); // <-- ADAPT: Ensure this function exists
111
-
112
- // // 3. Calculate Initial Bottom Ray (Local: -Z forward, Y up, X right)
113
- // // Rotates (0, 0, -1) around (1, 0, 0) by fieldOfView
114
- // _initialBottomRayDir.set(0, -Math.sin(fieldOfView), -Math.cos(fieldOfView));
115
-
116
- // // 4. Calculate Final Bottom Ray (World)
117
- // _fieldOfViewBottomRay.direction.copy(_initialBottomRayDir).applyQuaternion(_qOrient).normalize();
118
- // _fieldOfViewBottomRay.origin.copy(_cameraPosition);
119
-
120
- // // 5. Intersection and Plane
121
- // const intersection = (_fieldOfViewBottomRay as any).intersectionSphere(_origin3d, 1); // Cast to any if method isn't standard
122
-
123
- // if (intersection && intersection.length > 0) {
124
- // // If ray intersects, use the closest point for the plane
125
- // out.setFromNormalAndPoint(_lookFromOrigin, intersection[0]);
126
- // } else {
127
- // // If ray does not intersect (FOV covers globe or misses)
128
- // // WARNING: This sets a plane through the globe's center.
129
- // // This might not be the desired behavior for culling.
130
- // // Consider what should happen if the whole globe *is* visible.
131
- // out.set(_lookFromOrigin, 0.0);
132
- // }
133
-
134
- // return out;
135
- // }
136
-
137
- // export { calculateHorizonPlane };
1
+ "use strict";
2
+ // TODO: REMOVE
3
+ // // import { Vector3D, Quaternion, Plane, Ray, Matrix4 } from 'your-3d-math-library'; // <-- ADAPT THIS IMPORT
4
+ // import { Vector3D } from '../vector3d';
5
+ // import { Plane } from '../plane';
6
+ // import { Line } from '../line';
7
+ // import { Matrix4 } from '../matrix4';
8
+ // import { Quaternion } from '../quaternion';
9
+ // // --- Assume these static helper variables exist within your class ---
10
+ // const _lookFromOrigin = new Vector3D();
11
+ // const _cameraPosition = new Vector3D();
12
+ // const _finalForward = new Vector3D();
13
+ // const _approxUp = new Vector3D();
14
+ // const _finalRight = new Vector3D();
15
+ // const _finalUp = new Vector3D();
16
+ // const _tempVec = new Vector3D(); // General purpose helper
17
+ // const _initialBottomRayDir = new Vector3D();
18
+ // const _qOrient = new Quaternion();
19
+ // const _rollQuaternion = new Quaternion();
20
+ // const _rotationMatrix = new Matrix4();
21
+ // const _fieldOfViewBottomRay = new Line(new Vector3D(), new Vector3D());
22
+ // const _origin3d = new Vector3D(0, 0, 0); // Globe Center
23
+ // // --- Assume these constants exist ---
24
+ // const WORLD_RADIUS_3D = 6371000; // Example: Earth radius
25
+ // const FIELD_OF_VIEW = (25 * Math.PI) / 180; // Example: 25 degrees half-FOV in radians
26
+ // // // --- Assume Plane class has these methods ---
27
+ // // interface Plane {
28
+ // // setFromNormalAndPoint(normal: Vector3D, point: Vector3D): this;
29
+ // // set(normal: Vector3D, constant: number): this;
30
+ // // // ... other plane methods
31
+ // // }
32
+ // // // --- Assume Ray class has these methods ---
33
+ // // interface Ray {
34
+ // // origin: Vector3D;
35
+ // // direction: Vector3D;
36
+ // // intersectionSphere(center: Vector3D, radius: number): Vector3D[] | null; // Or similar
37
+ // // // ... other ray methods
38
+ // // }
39
+ // // // --- Assume Vector3D has setFromLongLat ---
40
+ // // interface Vector3D {
41
+ // // setFromLongLat(lon: number, lat: number): this;
42
+ // // // ... other vector methods
43
+ // // }
44
+ // // // --- END OF ASSUMPTIONS ---
45
+ // /**
46
+ // * Calculates a culling plane representing the bottom edge of the camera's field of view.
47
+ // * @param globe - The globe object, expected to have api_GetCurrentLookInfo and Fp properties.
48
+ // * @param out - The Plane object to store the result.
49
+ // * @param fieldOfView - The vertical half-angle of the field of view in radians.
50
+ // * @returns The calculated Plane.
51
+ // */
52
+ // function calculateHorizonPlane(globe: any, out: Plane, fieldOfView: number = FIELD_OF_VIEW): Plane {
53
+ // const cameraLookInfo = globe.api_GetCurrentLookInfo();
54
+ // cameraLookInfo.CenterLong *= Math.PI / 180;
55
+ // cameraLookInfo.CenterLat *= Math.PI / 180;
56
+ // // cameraLookInfo.Tilt *= Math.PI / 180; // Tilt is now implicitly handled
57
+ // cameraLookInfo.NorthAng *= Math.PI / 180;
58
+ // // Set _lookFromOrigin based on camera target (Lon/Lat)
59
+ // (_lookFromOrigin as any).setFromLongLat(cameraLookInfo.CenterLong, cameraLookInfo.CenterLat); // Cast to any if setFromLongLat is custom
60
+ // // 1. Calculate _cameraPosition and _finalForward (_lookFromCamera)
61
+ // _cameraPosition.set(globe.Fp.x, globe.Fp.y, globe.Fp.z); // Using your X negation
62
+ // _cameraPosition.divideScalar(WORLD_RADIUS_3D); // Scale to unit sphere
63
+ // Vector3D.subVectors(_lookFromOrigin, _cameraPosition, _finalForward).normalize();
64
+ // // 2. Calculate Q_orient (Final Camera Orientation Quaternion)
65
+ // // Use the vector from origin to camera as an initial 'up' reference
66
+ // _approxUp.copy(_cameraPosition).normalize();
67
+ // // Calculate Right vector using cross product
68
+ // Vector3D.crossVectors(_finalForward, _approxUp, _finalRight).normalize();
69
+ // // Handle edge case: If looking straight along (or opposite to) _approxUp
70
+ // if (_finalRight.lengthSq() < 0.0001) {
71
+ // // If vectors are parallel, _approxUp is not good.
72
+ // // Choose a different 'up', e.g., if _approxUp is near Z, use Y.
73
+ // if (Math.abs(_approxUp.z) > 0.9) {
74
+ // _approxUp.set(0, 1, 0);
75
+ // } else {
76
+ // _approxUp.set(0, 0, 1);
77
+ // }
78
+ // Vector3D.crossVectors(_finalForward, _approxUp, _finalRight).normalize();
79
+ // }
80
+ // // Calculate the 'true' Up vector, orthogonal to Right and Forward
81
+ // Vector3D.crossVectors(_finalRight, _finalForward, _finalUp).normalize();
82
+ // // Apply NorthAng (Roll) around the Forward axis
83
+ // _rollQuaternion.setFromAxisAngle(_finalForward, cameraLookInfo.NorthAng);
84
+ // _finalUp.applyQuaternion(_rollQuaternion);
85
+ // _finalRight.applyQuaternion(_rollQuaternion); // Must rotate Right as well!
86
+ // // Create Q_orient from the final basis vectors (Right, Up, -Forward)
87
+ // // This assumes a Matrix4.makeBasis(x, y, z) exists and builds a rotation matrix.
88
+ // // It also assumes local camera looks down -Z, hence negating _finalForward for the Z basis.
89
+ // _tempVec.copy(_finalForward).negate();
90
+ // _rotationMatrix.makeBasis(_finalRight, _finalUp, _tempVec); // <-- ADAPT: Ensure your library has makeBasis or equivalent
91
+ // _qOrient.setFromRotationMatrix(_rotationMatrix); // <-- ADAPT: Ensure this function exists
92
+ // // 3. Calculate Initial Bottom Ray (Local: -Z forward, Y up, X right)
93
+ // // Rotates (0, 0, -1) around (1, 0, 0) by fieldOfView
94
+ // _initialBottomRayDir.set(0, -Math.sin(fieldOfView), -Math.cos(fieldOfView));
95
+ // // 4. Calculate Final Bottom Ray (World)
96
+ // _fieldOfViewBottomRay.direction.copy(_initialBottomRayDir).applyQuaternion(_qOrient).normalize();
97
+ // _fieldOfViewBottomRay.origin.copy(_cameraPosition);
98
+ // // 5. Intersection and Plane
99
+ // const intersection = (_fieldOfViewBottomRay as any).intersectionSphere(_origin3d, 1); // Cast to any if method isn't standard
100
+ // if (intersection && intersection.length > 0) {
101
+ // // If ray intersects, use the closest point for the plane
102
+ // out.setFromNormalAndPoint(_lookFromOrigin, intersection[0]);
103
+ // } else {
104
+ // // If ray does not intersect (FOV covers globe or misses)
105
+ // // WARNING: This sets a plane through the globe's center.
106
+ // // This might not be the desired behavior for culling.
107
+ // // Consider what should happen if the whole globe *is* visible.
108
+ // out.set(_lookFromOrigin, 0.0);
109
+ // }
110
+ // return out;
111
+ // }
112
+ // export { calculateHorizonPlane };
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.arcSlice = arcSlice;
4
+ const constants_1 = require("../constants");
5
+ const vec3_1 = require("../vec3");
6
+ const line_1 = require("../line");
7
+ const plane_1 = require("../plane");
8
+ const arc_1 = require("../arc");
9
+ const plane_plane_1 = require("./plane-plane");
10
+ const line_sphere_1 = require("./line-sphere");
11
+ const _intersectionLine = /*@__PURE__*/ line_1.line.create();
12
+ const _originPlane = /*@__PURE__*/ plane_1.plane.create();
13
+ _originPlane.distance = 0;
14
+ const _originSphere = /*@__PURE__*/ { center: vec3_1.vec3.create(0, 0, 0), radius: 1 };
15
+ const _intersectionPoints = /*@__PURE__*/ [vec3_1.vec3.create(), vec3_1.vec3.create()];
16
+ // TODO: out must be [Arc, Arc] there is a case where split into three arcs, visible by points or arcs but middle is not visible
17
+ /**
18
+ *
19
+ * @param out \
20
+ * @param inArc
21
+ * @param juctionPlane
22
+ * @returns number of arcs segments in the junction divided by the junction plane.
23
+ */
24
+ function arcSlice(out, inArc, juctionPlane) {
25
+ // arc coverPlane and junctionPlane intersection exist in the range of unit sphere
26
+ const coverRadiusAngle = plane_1.plane.getUnitSphereRadiusAngle(inArc.coverPlane);
27
+ const visibleRadiusAngle = plane_1.plane.getUnitSphereRadiusAngle(juctionPlane);
28
+ // TODO: RESEARCH efficient approach --
29
+ const angleBetween_Cover_Visible = Math.acos(vec3_1.vec3.dot(inArc.coverPlane.normal, juctionPlane.normal));
30
+ if (coverRadiusAngle + visibleRadiusAngle < angleBetween_Cover_Visible - constants_1.EPSILON) { // case A: out of range
31
+ return 0; // No intersection
32
+ }
33
+ // ------------------------------------
34
+ // the case when the arc is completely covered by the juction plane
35
+ if (visibleRadiusAngle + constants_1.EPSILON >= angleBetween_Cover_Visible + coverRadiusAngle) { // case B: fully visible
36
+ arc_1.arc.copy(out[0], inArc);
37
+ return 1;
38
+ }
39
+ // plane-plane intersection line should be calculated for the rest of the calculations
40
+ vec3_1.vec3.copy(_originPlane.normal, inArc.normal);
41
+ const isPlaneJunctions = (0, plane_plane_1.planePlaneJuction)(_intersectionLine, _originPlane, juctionPlane);
42
+ if (!isPlaneJunctions) { // case C: planes are parallel.
43
+ // case A covers opposite directions
44
+ // case B Covers they face each other
45
+ throw new Error("Unexpected case: planes are parallel, case A and B should Cover it");
46
+ }
47
+ // --- read until here ---
48
+ // calculate the intersection points
49
+ const isSphereIntersection = (0, line_sphere_1.lineSphereIntersection)(_intersectionPoints, _intersectionLine, _originSphere);
50
+ if (!isSphereIntersection) {
51
+ // other edge caes should be covered by now
52
+ return 0; // No intersection
53
+ }
54
+ const i0IsCovered = plane_1.plane.distanceToPoint(inArc.coverPlane, _intersectionPoints[0]) > -constants_1.EPSILON;
55
+ const i1IsCovered = plane_1.plane.distanceToPoint(inArc.coverPlane, _intersectionPoints[1]) > -constants_1.EPSILON;
56
+ const p0IsVisible = plane_1.plane.distanceToPoint(juctionPlane, inArc.p0) > -constants_1.EPSILON;
57
+ const p1IsVisible = plane_1.plane.distanceToPoint(juctionPlane, inArc.p1) > -constants_1.EPSILON;
58
+ if (!p0IsVisible && !p1IsVisible && !i0IsCovered && !i1IsCovered) {
59
+ return 0; // No intersection
60
+ }
61
+ if (i0IsCovered && i1IsCovered && p0IsVisible && p1IsVisible) {
62
+ // calculate which points are closer
63
+ const p0i0DistanceSquared = vec3_1.vec3.distanceSquared(inArc.p0, _intersectionPoints[0]);
64
+ const p0i1DistanceSquared = vec3_1.vec3.distanceSquared(inArc.p0, _intersectionPoints[1]);
65
+ const case0 = p0i0DistanceSquared < p0i1DistanceSquared;
66
+ arc_1.arc.set(out[0], inArc.p0, case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
67
+ arc_1.arc.set(out[1], inArc.p1, !case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
68
+ return 2;
69
+ }
70
+ if (i0IsCovered && i1IsCovered) {
71
+ arc_1.arc.set(out[0], _intersectionPoints[0], _intersectionPoints[1]);
72
+ return 1;
73
+ }
74
+ if (p0IsVisible && p1IsVisible) {
75
+ arc_1.arc.copy(out[0], inArc);
76
+ return 1;
77
+ }
78
+ if ((p0IsVisible || p1IsVisible) !== (i0IsCovered || i1IsCovered)) {
79
+ throw new Error("Unexpected case: one covered and one visible point must be present");
80
+ }
81
+ arc_1.arc.set(out[0], p0IsVisible ? inArc.p0 : inArc.p1, i0IsCovered ? _intersectionPoints[0] : _intersectionPoints[1]);
82
+ return 1;
83
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lineSphereIntersection = lineSphereIntersection;
4
+ const vec3_1 = require("../vec3");
5
+ const line_1 = require("../line");
6
+ const _0vector = /*@__PURE__*/ vec3_1.vec3.create(0, 0, 0);
7
+ function lineSphereIntersection(out, inLine, inSphere) {
8
+ vec3_1.vec3.subtract(_0vector, inLine.origin, inSphere.center);
9
+ const distanceSquared = vec3_1.vec3.lengthSquared(_0vector);
10
+ const radiusSquared = inSphere.radius * inSphere.radius;
11
+ const dot = vec3_1.vec3.dot(_0vector, inLine.direction);
12
+ const dotSquared = dot * dot;
13
+ const _a = dotSquared + radiusSquared - distanceSquared;
14
+ if (_a < 0) {
15
+ return false; // no intersection
16
+ }
17
+ else {
18
+ const a = Math.sqrt(_a);
19
+ const t1 = dot - a;
20
+ const t2 = dot + a;
21
+ line_1.line.at(out[0], inLine, t1);
22
+ line_1.line.at(out[1], inLine, t2);
23
+ return true;
24
+ }
25
+ }
@@ -1,66 +1,58 @@
1
- import { Plane, Line, Vec3 } from "../types";
2
- import { EPSILON } from "../constants";
3
- import { plane } from "../plane";
4
- import { line } from "../line";
5
- import { vec3 } from "../vec3";
6
-
7
- const _normal1 = vec3.create();
8
- const _normal2 = vec3.create();
9
-
10
- export function planePlaneJuction(out: Line, plane1: Plane, plane2: Plane): boolean {
11
- vec3.copy(_normal1, plane1.normal);
12
- vec3.copy(_normal2, plane2.normal);
13
- const distance1 = plane1.distance;
14
- const distance2 = plane2.distance;
15
-
16
- const { origin, direction } = out;
17
-
18
- const dot = vec3.dot(_normal1, _normal2);
19
-
20
- if (Math.abs(dot) > 1 - EPSILON) {
21
- return false; // Planes are parallel, no intersection
22
- }
23
-
24
- vec3.cross(direction, _normal1, _normal2);
25
-
26
- const magnitudeSquired = vec3.lengthSquared(out.direction);
27
- if (magnitudeSquired < EPSILON) {
28
- return false; // No valid intersection line
29
- }
30
-
31
- const magnitude = Math.sqrt(magnitudeSquired);
32
- direction[0] /= magnitude;
33
- direction[1] /= magnitude;
34
- direction[2] /= magnitude;
35
-
36
-
37
-
38
- let determinant: number;
39
- // Calculate the intersection point
40
- // set z = 0
41
- determinant = _normal1[0] * _normal2[1] - _normal1[1] * _normal2[0];
42
- if (Math.abs(determinant) > EPSILON) {
43
- origin[0] = (distance1 * _normal2[1] - distance2 * _normal1[1]) / determinant;
44
- origin[1] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
45
- origin[2] = 0;
46
- } else {
47
- // set y = 0
48
- determinant = _normal1[0] * _normal2[2] - _normal1[2] * _normal2[0];
49
- if (Math.abs(determinant) > EPSILON) {
50
- origin[0] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
51
- origin[1] = 0;
52
- origin[2] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
53
- } else {
54
- // set x = 0
55
- determinant = _normal1[1] * _normal2[2] - _normal1[2] * _normal2[1];
56
- if (Math.abs(determinant) > EPSILON) {
57
- origin[0] = 0;
58
- origin[1] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
59
- origin[2] = (distance2 * _normal1[1] - distance1 * _normal2[1]) / determinant;
60
- } else {
61
- return false; // No valid intersection point
62
- }
63
- }
64
- }
65
- return true;
66
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.planePlaneJuction = planePlaneJuction;
4
+ const constants_1 = require("../constants");
5
+ const vec3_1 = require("../vec3");
6
+ const _normal1 = vec3_1.vec3.create();
7
+ const _normal2 = vec3_1.vec3.create();
8
+ function planePlaneJuction(out, plane1, plane2) {
9
+ vec3_1.vec3.copy(_normal1, plane1.normal);
10
+ vec3_1.vec3.copy(_normal2, plane2.normal);
11
+ const distance1 = plane1.distance;
12
+ const distance2 = plane2.distance;
13
+ const { origin, direction } = out;
14
+ const dot = vec3_1.vec3.dot(_normal1, _normal2);
15
+ if (Math.abs(dot) > 1 - constants_1.EPSILON) {
16
+ return false; // Planes are parallel, no intersection
17
+ }
18
+ vec3_1.vec3.cross(direction, _normal1, _normal2);
19
+ const magnitudeSquired = vec3_1.vec3.lengthSquared(out.direction);
20
+ if (magnitudeSquired < constants_1.EPSILON) {
21
+ return false; // No valid intersection line
22
+ }
23
+ const magnitude = Math.sqrt(magnitudeSquired);
24
+ direction[0] /= magnitude;
25
+ direction[1] /= magnitude;
26
+ direction[2] /= magnitude;
27
+ let determinant;
28
+ // Calculate the intersection point
29
+ // set z = 0
30
+ determinant = _normal1[0] * _normal2[1] - _normal1[1] * _normal2[0];
31
+ if (Math.abs(determinant) > constants_1.EPSILON) {
32
+ origin[0] = (distance1 * _normal2[1] - distance2 * _normal1[1]) / determinant;
33
+ origin[1] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
34
+ origin[2] = 0;
35
+ }
36
+ else {
37
+ // set y = 0
38
+ determinant = _normal1[0] * _normal2[2] - _normal1[2] * _normal2[0];
39
+ if (Math.abs(determinant) > constants_1.EPSILON) {
40
+ origin[0] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
41
+ origin[1] = 0;
42
+ origin[2] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
43
+ }
44
+ else {
45
+ // set x = 0
46
+ determinant = _normal1[1] * _normal2[2] - _normal1[2] * _normal2[1];
47
+ if (Math.abs(determinant) > constants_1.EPSILON) {
48
+ origin[0] = 0;
49
+ origin[1] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
50
+ origin[2] = (distance2 * _normal1[1] - distance1 * _normal2[1]) / determinant;
51
+ }
52
+ else {
53
+ return false; // No valid intersection point
54
+ }
55
+ }
56
+ }
57
+ return true;
58
+ }