@pirireis/webglobeplugins 0.17.1 → 1.0.2

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 (272) hide show
  1. package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
  2. package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
  3. package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
  4. package/Math/{arc.js → arc.ts} +421 -292
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
  7. package/Math/{circle.js → circle.ts} +49 -33
  8. package/Math/{constants.js → constants.ts} +12 -4
  9. package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
  10. package/Math/contour/quadtreecontours1.js +336 -298
  11. package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
  12. package/Math/haversine.ts +33 -0
  13. package/Math/index.js +0 -1
  14. package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
  15. package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
  16. package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
  17. package/Math/{line.js → line.ts} +84 -52
  18. package/Math/matrix4.ts +0 -0
  19. package/Math/mesh/mapbox-delaunay.d.ts +74 -0
  20. package/Math/{methods.js → methods.ts} +182 -113
  21. package/Math/{plane.js → plane.ts} +92 -56
  22. package/Math/{quaternion.js → quaternion.ts} +128 -106
  23. package/Math/roadmap.md +10 -0
  24. package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
  25. package/Math/tessellation/constants.ts +1 -0
  26. package/Math/tessellation/methods.ts +79 -0
  27. package/Math/tessellation/nearest-value-padding.ts +147 -0
  28. package/Math/tessellation/roadmap.md +48 -0
  29. package/Math/tessellation/spherical-triangle-area.ts +127 -0
  30. package/Math/tessellation/tile-merger.ts +578 -0
  31. package/Math/tessellation/triangle-tessellation.ts +533 -0
  32. package/Math/tessellation/types.ts +1 -0
  33. package/Math/types.ts +68 -0
  34. package/Math/utils.js +3 -2
  35. package/Math/{vec3.js → vec3.ts} +227 -151
  36. package/Math/xyz-tile.ts +26 -0
  37. package/algorithms/search-binary.js +14 -16
  38. package/altitude-locator/adaptors.js +0 -1
  39. package/altitude-locator/keymethod.js +0 -1
  40. package/altitude-locator/plugin.js +445 -345
  41. package/altitude-locator/types.js +26 -21
  42. package/compass-rose/compass-rose-padding-flat.js +274 -230
  43. package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
  44. package/compass-rose/index.js +3 -3
  45. package/{constants.js → constants.ts} +8 -6
  46. package/heatwave/datamanager.js +168 -149
  47. package/heatwave/heatwave.js +261 -206
  48. package/heatwave/index.js +5 -5
  49. package/heatwave/isobar.js +340 -303
  50. package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
  51. package/investigation-tools/draw/tiles/adapters.ts +133 -0
  52. package/investigation-tools/draw/tiles/{tiles.js → tiles.ts} +162 -128
  53. package/jest.config.js +6 -7
  54. package/package.json +1 -1
  55. package/pin/pin-object-array1.js +381 -300
  56. package/pin/pin-point-totem1.js +77 -60
  57. package/programs/arrowfield/arrow-field.js +89 -60
  58. package/programs/arrowfield/logic.js +173 -141
  59. package/programs/data2legend/density-to-legend.js +86 -68
  60. package/programs/data2legend/point-to-density-texture.js +84 -67
  61. package/programs/float2legendwithratio/index.js +3 -2
  62. package/programs/float2legendwithratio/logic.js +144 -118
  63. package/programs/float2legendwithratio/object.js +141 -104
  64. package/programs/helpers/blender.js +73 -58
  65. package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
  66. package/programs/index.js +19 -20
  67. package/programs/line-on-globe/circle-accurate-3d.js +112 -85
  68. package/programs/line-on-globe/circle-accurate-flat.js +200 -148
  69. package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
  70. package/programs/line-on-globe/index.js +0 -1
  71. package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
  72. package/programs/line-on-globe/linestrip/data.ts +29 -0
  73. package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
  74. package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
  75. package/programs/line-on-globe/util.js +8 -5
  76. package/programs/picking/pickable-polygon-renderer.js +129 -98
  77. package/programs/picking/pickable-renderer.js +130 -98
  78. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  79. package/programs/point-on-globe/element-point-glow.js +114 -80
  80. package/programs/point-on-globe/square-pixel-point.js +139 -120
  81. package/programs/polygon-on-globe/roadmap.md +8 -0
  82. package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
  83. package/programs/{programcache.js → programcache.ts} +134 -126
  84. package/programs/rings/index.js +1 -1
  85. package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
  86. package/programs/totems/camera-totem-attactment-interface.ts +4 -0
  87. package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
  88. package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
  89. package/programs/totems/dem-textures-manager.ts +368 -0
  90. package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
  91. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  92. package/programs/totems/{index.js → index.ts} +2 -2
  93. package/programs/two-d/pixel-padding-for-compass.js +101 -87
  94. package/programs/util.js +19 -14
  95. package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
  96. package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
  97. package/programs/vectorfields/logics/index.js +4 -2
  98. package/programs/vectorfields/logics/particle-ubo.ts +23 -0
  99. package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
  100. package/programs/vectorfields/logics/ubo.js +57 -51
  101. package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
  102. package/publish.bat +62 -0
  103. package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
  104. package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
  105. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  106. package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
  107. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
  108. package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
  109. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  110. package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
  111. package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
  112. package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
  113. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  114. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  115. package/semiplugins/interface.ts +14 -0
  116. package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
  117. package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
  118. package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -481
  119. package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
  120. package/semiplugins/shape-on-terrain/goal.md +12 -0
  121. package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
  122. package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
  126. package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
  127. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
  128. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
  129. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
  130. package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
  131. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
  132. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
  133. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
  134. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
  135. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
  136. package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
  137. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
  138. package/semiplugins/shell/bbox-renderer/index.ts +2 -0
  139. package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
  140. package/semiplugins/shell/bbox-renderer/object.ts +129 -0
  141. package/semiplugins/type.ts +8 -0
  142. package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
  143. package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
  144. package/shaders/fragment-toy/firework.js +1 -1
  145. package/shaders/fragment-toy/singularity.js +5 -2
  146. package/terrain-plugin.mmd +83 -0
  147. package/tests/Math/arc-sampling-test.js +367 -0
  148. package/tests/Math/arc-sampling-test.ts +429 -0
  149. package/tests/Math/arc.test.ts +77 -0
  150. package/tests/Math/junction/arc-limit.test.ts +7 -0
  151. package/tests/Math/junction/arc-plane-points.test.ts +196 -0
  152. package/tests/Math/junction/arc-plane.test.ts +172 -0
  153. package/tests/Math/junction/line-sphere.test.ts +127 -0
  154. package/tests/Math/junction/plane-plane.test.ts +91 -0
  155. package/tests/Math/plane-test.ts +17 -0
  156. package/tests/Math/plane.test.ts +43 -0
  157. package/tests/Math/vec3.test.ts +33 -0
  158. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  159. package/tracks/point-heat-map/index.js +0 -1
  160. package/tracks/point-heat-map/plugin-webworker.js +148 -121
  161. package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
  162. package/tracks/point-heat-map/readme.md +15 -0
  163. package/tracks/point-tracks/key-methods.js +3 -2
  164. package/tracks/point-tracks/plugin.js +487 -394
  165. package/tracks/timetracks/adaptors-line-strip.js +79 -65
  166. package/tracks/timetracks/plugin-line-strip.js +295 -240
  167. package/tracks/timetracks/program-line-strip.js +495 -411
  168. package/tracks/timetracks/programpoint-line-strip.js +137 -109
  169. package/tracks/timetracks/readme.md +1 -0
  170. package/tsconfig.json +22 -0
  171. package/types/@pirireis/webglobe.d.ts +102 -0
  172. package/types/delaunator.d.ts +40 -0
  173. package/types/earcut.d.ts +11 -0
  174. package/types/rbush.d.ts +57 -0
  175. package/types.ts +319 -0
  176. package/util/account/bufferoffsetmanager.js +209 -176
  177. package/util/account/create-buffermap-orchastration.ts +85 -0
  178. package/util/account/index.js +6 -3
  179. package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
  180. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
  181. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
  182. package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
  183. package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
  184. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  185. package/util/account/util.js +22 -18
  186. package/util/algorithms/index.js +0 -1
  187. package/util/algorithms/search-binary.js +26 -25
  188. package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
  189. package/util/check/index.js +0 -1
  190. package/util/check/typecheck.ts +74 -0
  191. package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
  192. package/util/geometry/{index.js → index.ts} +155 -121
  193. package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
  194. package/util/gl-util/buffer/{index.js → index.ts} +6 -3
  195. package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
  196. package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
  197. package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
  198. package/util/helper-methods.ts +9 -0
  199. package/util/index.js +9 -10
  200. package/util/interpolation/index.js +0 -1
  201. package/util/interpolation/timetrack/index.js +9 -2
  202. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  203. package/util/interpolation/timetrack/web-worker.js +51 -46
  204. package/util/picking/{fence.js → fence.ts} +47 -41
  205. package/util/picking/picker-displayer.ts +226 -0
  206. package/util/programs/draw-from-pixel-coords.js +201 -164
  207. package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
  208. package/util/programs/supersampletotextures.js +130 -97
  209. package/util/programs/texturetoglobe.js +153 -128
  210. package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
  211. package/util/shaderfunctions/index.js +2 -2
  212. package/util/shaderfunctions/nodata.js +4 -2
  213. package/util/shaderfunctions/noisefunctions.js +10 -7
  214. package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
  215. package/vectorfield/arrowfield/adaptor.js +11 -11
  216. package/vectorfield/arrowfield/index.js +3 -3
  217. package/vectorfield/arrowfield/plugin.js +128 -83
  218. package/vectorfield/waveparticles/adaptor.js +16 -15
  219. package/vectorfield/waveparticles/index.js +3 -3
  220. package/vectorfield/waveparticles/plugin.ts +506 -0
  221. package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
  222. package/vectorfield/wind/adapters/types.ts +12 -0
  223. package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
  224. package/vectorfield/wind/index.js +5 -5
  225. package/vectorfield/wind/plugin-persistant copy.ts +461 -0
  226. package/vectorfield/wind/plugin-persistant.ts +483 -0
  227. package/vectorfield/wind/plugin.js +883 -685
  228. package/vectorfield/wind/vectorfieldimage.js +27 -23
  229. package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
  230. package/write-text/context-text3.ts +252 -0
  231. package/write-text/{context-text4.js → context-text4.ts} +231 -146
  232. package/write-text/context-textDELETE.js +125 -94
  233. package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
  234. package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
  235. package/write-text/objectarraylabels/objectarraylabels.js +247 -200
  236. package/Math/matrix4.js +0 -1
  237. package/Math/tessellation/earcut/adapters.js +0 -37
  238. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
  239. package/Math/tessellation/methods.js +0 -46
  240. package/Math/tessellation/shred-input.js +0 -18
  241. package/Math/tessellation/tile-merger.js +0 -298
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -523
  244. package/Math/tessellation/triangle-tessellation.js +0 -14
  245. package/Math/tessellation/types.js +0 -1
  246. package/Math/tessellation/zoom-catch.js +0 -1
  247. package/Math/types.js +0 -1
  248. package/investigation-tools/draw/tiles/adapters.js +0 -67
  249. package/programs/line-on-globe/linestrip/data.js +0 -4
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -328
  251. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -268
  252. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -114
  253. package/programs/vectorfields/logics/drawrectangleparticles1.js +0 -112
  254. package/programs/vectorfields/logics/ubo-new.js +0 -25
  255. package/range-tools-on-terrain/bearing-line/types.js +0 -1
  256. package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
  257. package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
  258. package/range-tools-on-terrain/range-ring/types.js +0 -9
  259. package/semiplugins/interface.js +0 -1
  260. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
  261. package/semiplugins/shell/bbox-renderer/index.js +0 -2
  262. package/semiplugins/shell/bbox-renderer/object.js +0 -65
  263. package/semiplugins/type.js +0 -1
  264. package/types.js +0 -19
  265. package/util/account/create-buffermap-orchastration.js +0 -39
  266. package/util/account/single-attribute-buffer-management/types.js +0 -1
  267. package/util/check/typecheck.js +0 -66
  268. package/util/gl-util/uniform-block/types.js +0 -1
  269. package/util/picking/picker-displayer.js +0 -134
  270. package/util/webglobe/index.js +0 -2
  271. package/vectorfield/waveparticles/plugin.js +0 -290
  272. package/write-text/context-text3.js +0 -167
@@ -1,151 +1,227 @@
1
- import { EPSILON } from './constants';
2
- function create(x = 0, y = 0, z = 1) {
3
- return [x, y, z];
4
- }
5
- function set(out, x, y, z) {
6
- out[0] = x;
7
- out[1] = y;
8
- out[2] = z;
9
- }
10
- function negate(item) {
11
- item[0] = -item[0];
12
- item[1] = -item[1];
13
- item[2] = -item[2];
14
- }
15
- function clone(a) {
16
- return [a[0], a[1], a[2]];
17
- }
18
- function copy(out, a) {
19
- out[0] = a[0];
20
- out[1] = a[1];
21
- out[2] = a[2];
22
- return out;
23
- }
24
- function add(out, a, b) {
25
- out[0] = a[0] + b[0];
26
- out[1] = a[1] + b[1];
27
- out[2] = a[2] + b[2];
28
- return out;
29
- }
30
- function subtract(out, a, b) {
31
- out[0] = a[0] - b[0];
32
- out[1] = a[1] - b[1];
33
- out[2] = a[2] - b[2];
34
- }
35
- function dot(a, b) {
36
- return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
37
- }
38
- function cross(out, a, b) {
39
- const x = a[1] * b[2] - a[2] * b[1];
40
- const y = a[2] * b[0] - a[0] * b[2];
41
- const z = a[0] * b[1] - a[1] * b[0];
42
- out[0] = x;
43
- out[1] = y;
44
- out[2] = z;
45
- }
46
- function multiplyScalar(out, a, b) {
47
- out[0] = a[0] * b;
48
- out[1] = a[1] * b;
49
- out[2] = a[2] * b;
50
- }
51
- function divideScalar(out, a, b) {
52
- if (b === 0) {
53
- throw new Error('Division by zero');
54
- }
55
- out[0] = a[0] / b;
56
- out[1] = a[1] / b;
57
- out[2] = a[2] / b;
58
- }
59
- function lengthSquared(a) {
60
- return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
61
- }
62
- function length(a) {
63
- return Math.sqrt(lengthSquared(a));
64
- }
65
- function normalize(outVec, inVec) {
66
- const len = length(inVec);
67
- if (len === 0) {
68
- // console.warn('Cannot normalize a zero vector');
69
- outVec[0] = 0;
70
- outVec[1] = 0;
71
- outVec[2] = 0;
72
- return;
73
- }
74
- outVec[0] = inVec[0] / len;
75
- outVec[1] = inVec[1] / len;
76
- outVec[2] = inVec[2] / len;
77
- }
78
- function distanceSquared(a, b) {
79
- const dx = a[0] - b[0];
80
- const dy = a[1] - b[1];
81
- const dz = a[2] - b[2];
82
- return dx * dx + dy * dy + dz * dz;
83
- }
84
- function distance(a, b) {
85
- return Math.sqrt(distanceSquared(a, b));
86
- }
87
- function equals(a, b) {
88
- return (Math.abs(a[0] - b[0]) < EPSILON &&
89
- Math.abs(a[1] - b[1]) < EPSILON &&
90
- Math.abs(a[2] - b[2]) < EPSILON);
91
- }
92
- function fromUnitVectorToLongLat(out, a) {
93
- const len = length(a);
94
- if (len === 0) {
95
- throw new Error('Cannot convert a zero vector to unit vector');
96
- }
97
- out[0] = Math.atan2(a[1], a[0]); // Longitude
98
- out[1] = Math.asin(a[2] / len); // Latitude
99
- }
100
- function fromLongLatToUnitVector(out, longLat) {
101
- const longitude = longLat[0];
102
- const latitude = longLat[1];
103
- const cosLat = Math.cos(latitude);
104
- out[0] = cosLat * Math.cos(longitude);
105
- out[1] = cosLat * Math.sin(longitude);
106
- out[2] = Math.sin(latitude);
107
- }
108
- function createUnitVectorFromLongLat(longLat) {
109
- const cosLat = Math.cos(longLat[1]);
110
- return [
111
- cosLat * Math.cos(longLat[0]),
112
- cosLat * Math.sin(longLat[0]),
113
- Math.sin(longLat[1])
114
- ];
115
- }
116
- function applyQuaternion(out, a, q) {
117
- const x = a[0], y = a[1], z = a[2];
118
- const qx = q[0], qy = q[1], qz = q[2], qw = q[3];
119
- // Calculate the quaternion multiplication
120
- const ix = qw * x + qy * z - qz * y;
121
- const iy = qw * y + qz * x - qx * z;
122
- const iz = qw * z + qx * y - qy * x;
123
- const iw = -qx * x - qy * y - qz * z;
124
- // Apply the quaternion to the vector
125
- out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
126
- out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
127
- out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
128
- }
129
- function randomUnit(out) {
130
- const theta = Math.random() * 2 * Math.PI;
131
- const phi = Math.acos(2 * Math.random() - 1);
132
- out[0] = Math.sin(phi) * Math.cos(theta);
133
- out[1] = Math.sin(phi) * Math.sin(theta);
134
- out[2] = Math.cos(phi);
135
- }
136
- function str(a) {
137
- return `Vec3(${a[0].toFixed(2)}, ${a[1].toFixed(2)}, ${a[2].toFixed(2)})`;
138
- }
139
- function vec3ToLongLatDegrees(v) {
140
- return [
141
- Math.atan2(v[1], v[0]) * 180 / Math.PI,
142
- Math.asin(v[2]) * 180 / Math.PI
143
- ];
144
- }
145
- function vec3ToLongLatRadians(v) {
146
- return [
147
- Math.atan2(v[1], v[0]),
148
- Math.asin(v[2])
149
- ];
150
- }
151
- export { create, set, clone, copy, add, subtract, negate, dot, cross, multiplyScalar, divideScalar, lengthSquared, length, normalize, distanceSquared, distance, equals, fromUnitVectorToLongLat, fromLongLatToUnitVector, applyQuaternion, randomUnit, str, createUnitVectorFromLongLat, vec3ToLongLatDegrees, vec3ToLongLatRadians };
1
+ import { Vec3, Quaternion } from './types';
2
+ import { EPSILON } from './constants';
3
+ import { LongLatRadian } from '../types';
4
+
5
+ function create(x = 0, y = 0, z = 1): Vec3 {
6
+ return [x, y, z];
7
+ }
8
+
9
+ function set(out: Vec3, x: number, y: number, z: number) {
10
+ out[0] = x;
11
+ out[1] = y;
12
+ out[2] = z;
13
+ }
14
+
15
+
16
+ function negate(item: Vec3): void {
17
+ item[0] = -item[0];
18
+ item[1] = -item[1];
19
+ item[2] = -item[2];
20
+ }
21
+
22
+ function clone(a: Vec3): Vec3 {
23
+ return [a[0], a[1], a[2]];
24
+ }
25
+
26
+ function copy(out: Vec3, a: Vec3): Vec3 {
27
+ out[0] = a[0];
28
+ out[1] = a[1];
29
+ out[2] = a[2];
30
+ return out;
31
+ }
32
+
33
+ function add(out: Vec3, a: Vec3, b: Vec3): Vec3 {
34
+ out[0] = a[0] + b[0];
35
+ out[1] = a[1] + b[1];
36
+ out[2] = a[2] + b[2];
37
+ return out;
38
+ }
39
+
40
+ function subtract(out: Vec3, a: Vec3, b: Vec3) {
41
+ out[0] = a[0] - b[0];
42
+ out[1] = a[1] - b[1];
43
+ out[2] = a[2] - b[2];
44
+ }
45
+
46
+ function dot(a: Vec3, b: Vec3): number {
47
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
48
+ }
49
+
50
+ function cross(out: Vec3, a: Vec3, b: Vec3) {
51
+ const x = a[1] * b[2] - a[2] * b[1];
52
+ const y = a[2] * b[0] - a[0] * b[2];
53
+ const z = a[0] * b[1] - a[1] * b[0];
54
+ out[0] = x;
55
+ out[1] = y;
56
+ out[2] = z;
57
+ }
58
+
59
+
60
+ function multiplyScalar(out: Vec3, a: Vec3, b: number) {
61
+ out[0] = a[0] * b;
62
+ out[1] = a[1] * b;
63
+ out[2] = a[2] * b;
64
+ }
65
+
66
+ function divideScalar(out: Vec3, a: Vec3, b: number) {
67
+ if (b === 0) {
68
+ throw new Error('Division by zero');
69
+ }
70
+ out[0] = a[0] / b;
71
+ out[1] = a[1] / b;
72
+ out[2] = a[2] / b;
73
+ }
74
+
75
+ function lengthSquared(a: Vec3): number {
76
+ return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
77
+ }
78
+
79
+ function length(a: Vec3): number {
80
+ return Math.sqrt(lengthSquared(a));
81
+ }
82
+
83
+ function normalize(outVec: Vec3, inVec: Vec3): void {
84
+ const len = length(inVec);
85
+ if (len === 0) {
86
+ // console.warn('Cannot normalize a zero vector');
87
+ outVec[0] = 0;
88
+ outVec[1] = 0;
89
+ outVec[2] = 0;
90
+ return;
91
+ }
92
+ outVec[0] = inVec[0] / len;
93
+ outVec[1] = inVec[1] / len;
94
+ outVec[2] = inVec[2] / len;
95
+ }
96
+
97
+
98
+ function distanceSquared(a: Vec3, b: Vec3): number {
99
+ const dx = a[0] - b[0];
100
+ const dy = a[1] - b[1];
101
+ const dz = a[2] - b[2];
102
+ return dx * dx + dy * dy + dz * dz;
103
+ }
104
+
105
+
106
+ function distance(a: Vec3, b: Vec3): number {
107
+ return Math.sqrt(distanceSquared(a, b));
108
+ }
109
+
110
+ function equals(a: Vec3, b: Vec3): boolean {
111
+ return (
112
+ Math.abs(a[0] - b[0]) < EPSILON &&
113
+ Math.abs(a[1] - b[1]) < EPSILON &&
114
+ Math.abs(a[2] - b[2]) < EPSILON
115
+ );
116
+ }
117
+
118
+
119
+ function fromUnitVectorToLongLat(out: LongLatRadian, a: Vec3) {
120
+ const len = length(a);
121
+ if (len === 0) {
122
+ throw new Error('Cannot convert a zero vector to unit vector');
123
+ }
124
+ out[0] = Math.atan2(a[1], a[0]); // Longitude
125
+ out[1] = Math.asin(a[2] / len); // Latitude
126
+ }
127
+
128
+ function fromLongLatToUnitVector(out: Vec3, longLat: LongLatRadian) {
129
+ const longitude = longLat[0];
130
+ const latitude = longLat[1];
131
+ const cosLat = Math.cos(latitude);
132
+ out[0] = cosLat * Math.cos(longitude);
133
+ out[1] = cosLat * Math.sin(longitude);
134
+ out[2] = Math.sin(latitude);
135
+ }
136
+
137
+ function createUnitVectorFromLongLat(longLat: LongLatRadian): Vec3 {
138
+ const cosLat = Math.cos(longLat[1]);
139
+ return [
140
+ cosLat * Math.cos(longLat[0]),
141
+ cosLat * Math.sin(longLat[0]),
142
+ Math.sin(longLat[1])
143
+ ];
144
+ }
145
+
146
+
147
+ function applyQuaternion(out: Vec3, a: Vec3, q: Quaternion) {
148
+ const x = a[0], y = a[1], z = a[2];
149
+ const qx = q[0], qy = q[1], qz = q[2], qw = q[3];
150
+ // Calculate the quaternion multiplication
151
+ const ix = qw * x + qy * z - qz * y;
152
+ const iy = qw * y + qz * x - qx * z;
153
+ const iz = qw * z + qx * y - qy * x;
154
+ const iw = -qx * x - qy * y - qz * z;
155
+ // Apply the quaternion to the vector
156
+ out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
157
+ out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
158
+ out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
159
+ }
160
+
161
+
162
+ function randomUnit(out: Vec3) {
163
+ const theta = Math.random() * 2 * Math.PI;
164
+ const phi = Math.acos(2 * Math.random() - 1);
165
+ out[0] = Math.sin(phi) * Math.cos(theta);
166
+ out[1] = Math.sin(phi) * Math.sin(theta);
167
+ out[2] = Math.cos(phi);
168
+ }
169
+
170
+
171
+ function str(a: Vec3): string {
172
+ return `Vec3(${a[0].toFixed(2)}, ${a[1].toFixed(2)}, ${a[2].toFixed(2)})`;
173
+ }
174
+
175
+
176
+ function vec3ToLongLatDegrees(v: Vec3): LongLatRadian {
177
+ return [
178
+ Math.atan2(v[1], v[0]) * 180 / Math.PI,
179
+ Math.asin(v[2]) * 180 / Math.PI
180
+ ];
181
+ }
182
+
183
+
184
+ function vec3ToLongLatRadians(v: Vec3): LongLatRadian {
185
+ return [
186
+ Math.atan2(v[1], v[0]),
187
+ Math.asin(v[2])
188
+ ];
189
+ }
190
+
191
+
192
+ export function vec3ToLongLatRadiansOut(out: LongLatRadian, v: Vec3): void {
193
+ out[0] = Math.atan2(v[1], v[0]);
194
+ out[1] = Math.asin(v[2]);
195
+ }
196
+
197
+
198
+
199
+
200
+
201
+ export {
202
+ create,
203
+ set,
204
+ clone,
205
+ copy,
206
+ add,
207
+ subtract,
208
+ negate,
209
+ dot,
210
+ cross,
211
+ multiplyScalar,
212
+ divideScalar,
213
+ lengthSquared,
214
+ length,
215
+ normalize,
216
+ distanceSquared,
217
+ distance,
218
+ equals,
219
+ fromUnitVectorToLongLat,
220
+ fromLongLatToUnitVector,
221
+ applyQuaternion,
222
+ randomUnit,
223
+ str,
224
+ createUnitVectorFromLongLat,
225
+ vec3ToLongLatDegrees,
226
+ vec3ToLongLatRadians
227
+ }
@@ -0,0 +1,26 @@
1
+ import { GlobeBBox } from "../types";
2
+ import { RADIAN } from "./methods";
3
+ export function xyzToBBOX(
4
+ x: number,
5
+ y: number,
6
+ z: number
7
+ ): GlobeBBox {
8
+ const n = Math.pow(2, z);
9
+ const lonMin = x / n * 360 - 180;
10
+ const lonMax = (x + 1) / n * 360 - 180;
11
+ const latMinRad = Math.atan(Math.sinh(Math.PI * (1 - 2 * (y + 1) / n)));
12
+ const latMaxRad = Math.atan(Math.sinh(Math.PI * (1 - 2 * y / n)));
13
+
14
+ return {
15
+ ll: {
16
+ x: lonMin,
17
+ y: latMinRad / RADIAN
18
+ },
19
+ ur: {
20
+ x: lonMax,
21
+ y: latMaxRad / RADIAN
22
+ }
23
+
24
+ };
25
+ }
26
+
@@ -1,16 +1,14 @@
1
- const findFirstIndexInRange = (container, value) => {
2
- let start = 0;
3
- let end = container.length - 1;
4
- let mid = 0;
5
- while (start <= end) {
6
- mid = Math.floor((start + end) / 2);
7
- if (container[mid] <= value && value <= container[mid + 1])
8
- return mid;
9
- if (container[mid] < value)
10
- start = mid + 1;
11
- else
12
- end = mid - 1;
13
- }
14
- return null;
15
- };
16
- export { findFirstIndexInRange };
1
+ const findFirstIndexInRange = (container, value) => {
2
+ let start = 0;
3
+ let end = container.length - 1;
4
+ let mid = 0;
5
+ while (start <= end) {
6
+ mid = Math.floor((start + end) / 2);
7
+ if (container[mid] <= value && value <= container[mid + 1]) return mid;
8
+ if (container[mid] < value) start = mid + 1;
9
+ else end = mid - 1;
10
+ }
11
+ return null;
12
+ }
13
+
14
+ export { findFirstIndexInRange };
@@ -1 +0,0 @@
1
- "use strict";
@@ -1 +0,0 @@
1
- "use strict";