@pirireis/webglobeplugins 0.15.34 → 0.16.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 (481) hide show
  1. package/Math/angle-calculation.js +14 -13
  2. package/Math/arc-cdf-points.ts +329 -0
  3. package/Math/arc-generate-points-exponantial.ts +299 -0
  4. package/Math/arc.ts +299 -0
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/circle-cdf-points.ts +143 -0
  7. package/Math/circle.ts +49 -0
  8. package/Math/constants.ts +12 -0
  9. package/Math/index.js +0 -1
  10. package/Math/juction/arc-plane.ts +129 -0
  11. package/Math/juction/line-sphere.ts +30 -0
  12. package/Math/juction/plane-plane.ts +64 -0
  13. package/Math/line.ts +84 -0
  14. package/Math/matrix4.ts +0 -0
  15. package/Math/mesh/mapbox-delaunay.js +607 -0
  16. package/Math/methods.ts +157 -0
  17. package/Math/plane.ts +92 -0
  18. package/Math/quaternion.ts +128 -0
  19. package/Math/roadmap.md +10 -0
  20. package/Math/templete-shapes/grid-visually-equal.ts +119 -0
  21. package/Math/types.ts +66 -0
  22. package/Math/utils.js +3 -2
  23. package/Math/vec3.ts +180 -0
  24. package/algorithms/search-binary.js +14 -16
  25. package/altitude-locator/adaptors.js +0 -1
  26. package/altitude-locator/keymethod.js +0 -1
  27. package/altitude-locator/plugin.js +446 -345
  28. package/altitude-locator/types.js +26 -21
  29. package/arrowfield/adaptor.js +11 -11
  30. package/arrowfield/index.js +3 -3
  31. package/arrowfield/plugin.js +128 -83
  32. package/bearing-line/index.js +2 -2
  33. package/bearing-line/plugin.js +520 -444
  34. package/circle-line-chain/chain-list-map.js +221 -201
  35. package/circle-line-chain/init.js +0 -1
  36. package/circle-line-chain/plugin.js +464 -411
  37. package/circle-line-chain/readme.md +57 -0
  38. package/circle-line-chain/util.js +1 -1
  39. package/compass-rose/compass-rose-padding-flat.js +274 -230
  40. package/compass-rose/compass-text-writer.js +173 -149
  41. package/compass-rose/index.js +3 -3
  42. package/compassrose/compassrose.js +341 -293
  43. package/compassrose/index.js +2 -2
  44. package/depth-locator/readme.md +26 -0
  45. package/dist/Math/angle-calculation.js +13 -0
  46. package/dist/Math/bounds/line-bbox.js +186 -0
  47. package/dist/Math/mesh/mapbox-delaunay.js +544 -0
  48. package/dist/Math/utils.js +2 -0
  49. package/dist/algorithms/search-binary.js +16 -0
  50. package/dist/altitude-locator/adaptors.js +1 -0
  51. package/dist/altitude-locator/keymethod.js +1 -0
  52. package/dist/altitude-locator/plugin.js +345 -0
  53. package/dist/altitude-locator/types.js +21 -0
  54. package/dist/arrowfield/adaptor.js +11 -0
  55. package/dist/arrowfield/index.js +3 -0
  56. package/dist/arrowfield/plugin.js +83 -0
  57. package/dist/bearing-line/index.js +2 -0
  58. package/dist/bearing-line/plugin.js +444 -0
  59. package/dist/circle-line-chain/chain-list-map.js +201 -0
  60. package/dist/circle-line-chain/init.js +1 -0
  61. package/dist/circle-line-chain/plugin.js +411 -0
  62. package/dist/circle-line-chain/util.js +1 -0
  63. package/dist/compass-rose/compass-rose-padding-flat.js +230 -0
  64. package/dist/compass-rose/compass-text-writer.js +149 -0
  65. package/dist/compass-rose/index.js +3 -0
  66. package/dist/compassrose/compassrose.js +293 -0
  67. package/dist/compassrose/index.js +2 -0
  68. package/dist/heatwave/index.js +3 -0
  69. package/dist/heatwave/isobar/objectarraylabels.js +200 -0
  70. package/dist/heatwave/isobar/plugin.js +302 -0
  71. package/dist/heatwave/isobar/quadtreecontours.js +298 -0
  72. package/dist/heatwave/plugins/heatwaveglobeshell.js +204 -0
  73. package/dist/index.js +12 -0
  74. package/dist/jest.config.js +7 -0
  75. package/dist/partialrings/buffer-manager.js +75 -0
  76. package/dist/partialrings/index.js +2 -0
  77. package/dist/partialrings/plugin.js +128 -0
  78. package/dist/partialrings/program.js +279 -0
  79. package/dist/pin/pin-object-array.js +300 -0
  80. package/dist/pin/pin-point-totem.js +60 -0
  81. package/dist/point-heat-map/adaptors/timetracksplugin-format-to-this.js +63 -0
  82. package/dist/point-heat-map/index.js +1 -0
  83. package/dist/point-heat-map/plugin-webworker.js +121 -0
  84. package/dist/point-heat-map/point-to-heat-map-flow.js +124 -0
  85. package/dist/point-tracks/key-methods.js +2 -0
  86. package/dist/point-tracks/plugin.js +393 -0
  87. package/dist/programs/arrowfield/index.js +2 -0
  88. package/dist/programs/arrowfield/logic.js +254 -0
  89. package/dist/programs/arrowfield/object.js +60 -0
  90. package/dist/programs/data2legend/density-to-legend.js +98 -0
  91. package/dist/programs/data2legend/point-to-density-texture.js +97 -0
  92. package/dist/programs/float2legendwithratio/index.js +2 -0
  93. package/dist/programs/float2legendwithratio/logic.js +167 -0
  94. package/dist/programs/float2legendwithratio/object.js +104 -0
  95. package/dist/programs/globe-util/is-globe-moved.js +19 -0
  96. package/dist/programs/globeshell/index.js +2 -0
  97. package/dist/programs/globeshell/wiggle/index.js +2 -0
  98. package/dist/programs/globeshell/wiggle/logic.js +342 -0
  99. package/dist/programs/globeshell/wiggle/object.js +66 -0
  100. package/dist/programs/helpers/blender/index.js +1 -0
  101. package/dist/programs/helpers/blender/program.js +76 -0
  102. package/dist/programs/helpers/fadeaway/index.js +2 -0
  103. package/dist/programs/helpers/fadeaway/logic.js +69 -0
  104. package/dist/programs/helpers/fadeaway/object.js +14 -0
  105. package/dist/programs/helpers/index.js +2 -0
  106. package/dist/programs/index.js +9 -0
  107. package/dist/programs/line-on-globe/circle-accurate-3d.js +138 -0
  108. package/dist/programs/line-on-globe/circle-accurate-flat.js +210 -0
  109. package/dist/programs/line-on-globe/degree-padding-around-circle-3d.js +156 -0
  110. package/dist/programs/line-on-globe/index.js +1 -0
  111. package/dist/programs/line-on-globe/lines-color-instanced-flat.js +131 -0
  112. package/dist/programs/line-on-globe/util.js +5 -0
  113. package/dist/programs/picking/pickable-polygon-renderer.js +184 -0
  114. package/dist/programs/picking/pickable-renderer.js +184 -0
  115. package/dist/programs/point-on-globe/element-globe-surface-glow.js +138 -0
  116. package/dist/programs/point-on-globe/element-point-glow.js +150 -0
  117. package/dist/programs/point-on-globe/square-pixel-point.js +171 -0
  118. package/dist/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +97 -0
  119. package/dist/programs/polygon-on-globe/texture-dem-triangles.js +167 -0
  120. package/dist/programs/rings/distancering/circleflatprogram.js +116 -0
  121. package/dist/programs/rings/distancering/circlepaddingfreeangleprogram.js +326 -0
  122. package/dist/programs/rings/distancering/circlepaddysharedbuffer.js +368 -0
  123. package/dist/programs/rings/distancering/index.js +6 -0
  124. package/dist/programs/rings/distancering/paddyflatprogram.js +127 -0
  125. package/dist/programs/rings/distancering/paddyflatprogram2d.js +129 -0
  126. package/dist/programs/rings/distancering/paddyflatprogram3d.js +128 -0
  127. package/dist/programs/rings/index.js +1 -0
  128. package/dist/programs/totems/gpu-selection-uniform-block.js +104 -0
  129. package/dist/programs/two-d/pixel-circle.js +1 -0
  130. package/dist/programs/two-d/pixel-padding-for-compass.js +159 -0
  131. package/dist/programs/util.js +14 -0
  132. package/dist/programs/vectorfields/index.js +3 -0
  133. package/dist/programs/vectorfields/logics/drawrectangleparticles.js +113 -0
  134. package/dist/programs/vectorfields/logics/index.js +2 -0
  135. package/dist/programs/vectorfields/logics/pixelbased.js +140 -0
  136. package/dist/programs/vectorfields/logics/ubo.js +60 -0
  137. package/dist/programs/vectorfields/pingpongbuffermanager.js +73 -0
  138. package/dist/rangerings/index.js +5 -0
  139. package/dist/rangerings/plugin.js +543 -0
  140. package/dist/rangerings/rangeringangletext.js +326 -0
  141. package/dist/rangerings/ring-account.js +112 -0
  142. package/dist/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +1 -0
  143. package/dist/shaders/fragment-toy/firework.js +55 -0
  144. package/dist/shaders/fragment-toy/singularity.js +56 -0
  145. package/dist/timetracks/adaptors-line-strip.js +65 -0
  146. package/dist/timetracks/index.js +1 -0
  147. package/dist/timetracks/plugin-line-strip.js +240 -0
  148. package/dist/timetracks/program-line-strip.js +608 -0
  149. package/dist/timetracks/programpoint-line-strip.js +151 -0
  150. package/dist/util/account/bufferoffsetmanager.js +176 -0
  151. package/dist/util/account/index.js +3 -0
  152. package/dist/util/account/util.js +18 -0
  153. package/dist/util/algorithms/index.js +1 -0
  154. package/dist/util/algorithms/search-binary.js +25 -0
  155. package/dist/util/check/index.js +1 -0
  156. package/dist/util/gl-util/uniform-block/shader.js +1 -0
  157. package/dist/util/heatwavedatamanager/datamanager.js +149 -0
  158. package/dist/util/heatwavedatamanager/index.js +2 -0
  159. package/dist/util/index.js +13 -0
  160. package/dist/util/interpolation/index.js +1 -0
  161. package/dist/util/interpolation/timetrack/index.js +2 -0
  162. package/dist/util/interpolation/timetrack/timetrack-interpolator.js +79 -0
  163. package/dist/util/interpolation/timetrack/web-worker.js +46 -0
  164. package/dist/util/jshelpers/data-filler.js +17 -0
  165. package/dist/util/jshelpers/equality.js +18 -0
  166. package/dist/util/jshelpers/index.js +2 -0
  167. package/dist/util/jshelpers/timefilters.js +30 -0
  168. package/dist/util/picking/fence.js +43 -0
  169. package/dist/util/picking/picker-displayer.js +136 -0
  170. package/dist/util/programs/draw-texture-on-canvas.js +86 -0
  171. package/dist/util/programs/index.js +1 -0
  172. package/dist/util/programs/shapesonglobe.js +210 -0
  173. package/dist/util/programs/supersampletotextures.js +109 -0
  174. package/dist/util/programs/texturetoglobe.js +179 -0
  175. package/dist/util/shaderfunctions/index.js +2 -0
  176. package/dist/util/shaderfunctions/nodata.js +8 -0
  177. package/dist/util/shaderfunctions/noisefunctions.js +41 -0
  178. package/dist/util/surface-line-data/arcs-to-cuts.js +50 -0
  179. package/dist/util/surface-line-data/cut-arc.js +1 -0
  180. package/dist/util/surface-line-data/rbush-manager.js +1 -0
  181. package/dist/util/surface-line-data/types.js +1 -0
  182. package/dist/util/surface-line-data/web-worker.js +1 -0
  183. package/dist/util/webglobe/gldefaultstates.js +4 -0
  184. package/dist/util/webglobe/index.js +2 -0
  185. package/dist/util/webglobe/rasteroverlay.js +75 -0
  186. package/dist/waveparticles/adaptor.js +15 -0
  187. package/dist/waveparticles/index.js +3 -0
  188. package/dist/waveparticles/plugin.js +290 -0
  189. package/dist/wind/imagetovectorfieldandmagnitude.js +56 -0
  190. package/dist/wind/index.js +5 -0
  191. package/dist/wind/plugin.js +921 -0
  192. package/dist/wind/vectorfieldimage.js +23 -0
  193. package/dist/write-text/attached-text-writer.js +87 -0
  194. package/dist/write-text/context-text-bulk.js +185 -0
  195. package/dist/write-text/context-text.js +94 -0
  196. package/dist/write-text/context-text3old.js +152 -0
  197. package/dist/write-text/index.js +1 -0
  198. package/dist/write-text/writer-plugin.js +8 -0
  199. package/heatwave/index.js +4 -3
  200. package/heatwave/isobar/objectarraylabels.js +247 -200
  201. package/heatwave/isobar/plugin.js +339 -302
  202. package/heatwave/isobar/quadtreecontours.js +336 -298
  203. package/heatwave/plugins/heatwaveglobeshell.js +259 -204
  204. package/index.js +15 -12
  205. package/jest.config.js +6 -7
  206. package/package.json +6 -2
  207. package/partialrings/buffer-manager.js +89 -75
  208. package/partialrings/goals.md +17 -0
  209. package/partialrings/index.js +3 -2
  210. package/partialrings/plugin.js +160 -128
  211. package/partialrings/program.js +233 -188
  212. package/pin/pin-object-array.js +381 -300
  213. package/pin/pin-point-totem.js +77 -60
  214. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  215. package/point-heat-map/index.js +0 -1
  216. package/point-heat-map/plugin-webworker.js +148 -121
  217. package/point-heat-map/point-to-heat-map-flow.js +150 -124
  218. package/point-heat-map/readme.md +15 -0
  219. package/point-tracks/key-methods.js +3 -2
  220. package/point-tracks/plugin.js +480 -393
  221. package/programs/arrowfield/index.js +2 -2
  222. package/programs/arrowfield/logic.js +173 -141
  223. package/programs/arrowfield/object.js +89 -60
  224. package/programs/data2legend/density-to-legend.js +90 -73
  225. package/programs/data2legend/point-to-density-texture.js +87 -70
  226. package/programs/float2legendwithratio/index.js +3 -2
  227. package/programs/float2legendwithratio/logic.js +144 -118
  228. package/programs/float2legendwithratio/object.js +141 -104
  229. package/programs/globe-util/is-globe-moved.js +27 -19
  230. package/programs/globeshell/index.js +2 -2
  231. package/programs/globeshell/wiggle/index.js +3 -2
  232. package/programs/globeshell/wiggle/logic.js +272 -243
  233. package/programs/globeshell/wiggle/object.js +93 -66
  234. package/programs/helpers/blender/index.js +0 -1
  235. package/programs/helpers/blender/program.js +73 -58
  236. package/programs/helpers/fadeaway/index.js +3 -2
  237. package/programs/helpers/fadeaway/logic.js +53 -46
  238. package/programs/helpers/fadeaway/object.js +20 -14
  239. package/programs/helpers/index.js +2 -2
  240. package/programs/index.js +21 -9
  241. package/programs/line-on-globe/circle-accurate-3d.js +115 -87
  242. package/programs/line-on-globe/circle-accurate-flat.js +201 -149
  243. package/programs/line-on-globe/degree-padding-around-circle-3d.js +136 -104
  244. package/programs/line-on-globe/index.js +0 -1
  245. package/programs/line-on-globe/lines-color-instanced-flat.js +102 -83
  246. package/programs/line-on-globe/linestrip/data.ts +29 -0
  247. package/programs/line-on-globe/linestrip/linestrip.ts +201 -0
  248. package/programs/line-on-globe/naive-accurate-flexible.ts +258 -0
  249. package/programs/line-on-globe/util.js +8 -5
  250. package/programs/picking/pickable-polygon-renderer.js +215 -0
  251. package/programs/picking/pickable-renderer.js +129 -98
  252. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  253. package/programs/point-on-globe/element-point-glow.js +114 -80
  254. package/programs/point-on-globe/square-pixel-point.js +138 -120
  255. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.ts +120 -0
  256. package/programs/polygon-on-globe/texture-dem-triangles.ts +207 -0
  257. package/programs/programcache.ts +131 -0
  258. package/programs/rings/distancering/circleflatprogram.js +138 -116
  259. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +323 -275
  260. package/programs/rings/distancering/circlepaddysharedbuffer.js +423 -368
  261. package/programs/rings/distancering/index.js +5 -6
  262. package/programs/rings/distancering/paddyflatprogram.js +148 -127
  263. package/programs/rings/distancering/paddyflatprogram2d.js +153 -129
  264. package/programs/rings/distancering/paddyflatprogram3d.js +149 -128
  265. package/programs/rings/index.js +1 -1
  266. package/programs/rings/partial-ring/piece-of-pie.ts +323 -0
  267. package/programs/totems/camerauniformblock.ts +310 -0
  268. package/programs/totems/canvas-webglobe-info.ts +156 -0
  269. package/programs/totems/globe-changes.ts +79 -0
  270. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  271. package/programs/totems/index.ts +2 -0
  272. package/programs/two-d/pixel-circle.js +0 -1
  273. package/programs/two-d/pixel-padding-for-compass.js +112 -97
  274. package/programs/util.js +19 -14
  275. package/programs/vectorfields/index.js +3 -3
  276. package/programs/vectorfields/logics/constants.ts +5 -0
  277. package/programs/vectorfields/logics/drawrectangleparticles.js +78 -58
  278. package/programs/vectorfields/logics/index.js +4 -2
  279. package/programs/vectorfields/logics/pixelbased.js +92 -73
  280. package/programs/vectorfields/logics/ubo-new.ts +37 -0
  281. package/programs/vectorfields/logics/ubo.js +57 -51
  282. package/programs/vectorfields/pingpongbuffermanager.js +80 -73
  283. package/publish.bat +62 -0
  284. package/range-tools-on-terrain/bearing-line/adapters.ts +154 -0
  285. package/range-tools-on-terrain/bearing-line/plugin.ts +569 -0
  286. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  287. package/range-tools-on-terrain/circle-line-chain/adapters.ts +109 -0
  288. package/range-tools-on-terrain/circle-line-chain/chain-list-map.ts +446 -0
  289. package/range-tools-on-terrain/circle-line-chain/plugin.ts +607 -0
  290. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  291. package/range-tools-on-terrain/range-ring/adapters.ts +114 -0
  292. package/range-tools-on-terrain/range-ring/enum.ts +2 -0
  293. package/range-tools-on-terrain/range-ring/plugin.ts +447 -0
  294. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  295. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  296. package/rangerings/enum.ts +2 -0
  297. package/rangerings/index.js +5 -5
  298. package/rangerings/plugin.js +644 -543
  299. package/rangerings/rangeringangletext.js +369 -326
  300. package/rangerings/ring-account.js +129 -112
  301. package/semiplugins/interface.ts +14 -0
  302. package/semiplugins/lightweight/line-plugin.ts +343 -0
  303. package/semiplugins/lightweight/piece-of-pie-plugin.ts +275 -0
  304. package/semiplugins/shape-on-terrain/arc-plugin.ts +602 -0
  305. package/semiplugins/shape-on-terrain/circle-plugin.ts +588 -0
  306. package/semiplugins/shape-on-terrain/goal.md +12 -0
  307. package/semiplugins/shape-on-terrain/padding-1-degree.ts +714 -0
  308. package/semiplugins/shape-on-terrain/terrain-cover/notes.md +90 -0
  309. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.ts +0 -0
  310. package/semiplugins/type.ts +8 -0
  311. package/shaders/fragment-toy/firework.js +1 -1
  312. package/shaders/fragment-toy/singularity.js +5 -2
  313. package/tests/Math/arc-sampling-test.js +367 -0
  314. package/tests/Math/arc-sampling-test.ts +429 -0
  315. package/tests/Math/arc.test.ts +102 -0
  316. package/tests/Math/junction/arc-plane.test.ts +163 -0
  317. package/tests/Math/junction/plane-plane.test.ts +91 -0
  318. package/tests/Math/plane-test.ts +17 -0
  319. package/tests/Math/plane.test.ts +43 -0
  320. package/tests/Math/vec3.test.ts +14 -0
  321. package/timetracks/adaptors-line-strip.js +80 -65
  322. package/timetracks/index.js +0 -1
  323. package/timetracks/plugin-line-strip.js +295 -240
  324. package/timetracks/program-line-strip.js +491 -411
  325. package/timetracks/programpoint-line-strip.js +122 -98
  326. package/timetracks/readme.md +1 -0
  327. package/tsconfig.json +22 -0
  328. package/types.ts +265 -0
  329. package/util/account/bufferoffsetmanager.js +209 -176
  330. package/util/account/create-buffermap-orchastration.ts +85 -0
  331. package/util/account/index.js +6 -3
  332. package/util/account/single-attribute-buffer-management/buffer-manager.ts +149 -0
  333. package/util/account/single-attribute-buffer-management/buffer-orchestrator.ts +332 -0
  334. package/util/account/single-attribute-buffer-management/buffer-orchestrator1.ts +184 -0
  335. package/util/account/single-attribute-buffer-management/index.ts +11 -0
  336. package/util/account/single-attribute-buffer-management/object-store.ts +76 -0
  337. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  338. package/util/account/util.js +22 -18
  339. package/util/algorithms/index.js +0 -1
  340. package/util/algorithms/search-binary.js +26 -25
  341. package/util/build-strategy/general-strategy.ts +99 -0
  342. package/util/build-strategy/static-dynamic.ts +50 -0
  343. package/util/check/index.js +0 -1
  344. package/util/check/typecheck.ts +74 -0
  345. package/util/frame-counter-trigger.ts +99 -0
  346. package/util/geometry/index.ts +64 -0
  347. package/util/gl-util/buffer/attribute-loader.ts +84 -0
  348. package/util/gl-util/buffer/index.ts +6 -0
  349. package/util/gl-util/draw-options/methods.ts +47 -0
  350. package/util/gl-util/uniform-block/manager.ts +210 -0
  351. package/util/gl-util/uniform-block/roadmap.md +70 -0
  352. package/util/gl-util/uniform-block/shader.js +0 -1
  353. package/util/gl-util/uniform-block/types.ts +20 -0
  354. package/util/heatwavedatamanager/datamanager.js +168 -149
  355. package/util/heatwavedatamanager/index.js +2 -2
  356. package/util/heatwavedatamanager/pointcoordsmeta.ts +28 -0
  357. package/util/heatwavedatamanager/texture-point-sampler.ts +198 -0
  358. package/util/index.js +13 -13
  359. package/util/interpolation/index.js +0 -1
  360. package/util/interpolation/timetrack/index.js +9 -2
  361. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  362. package/util/interpolation/timetrack/web-worker.js +51 -46
  363. package/util/jshelpers/data-filler.js +19 -17
  364. package/util/jshelpers/equality.js +17 -18
  365. package/util/jshelpers/index.js +1 -2
  366. package/util/jshelpers/timefilters.js +32 -30
  367. package/util/picking/fence.js +46 -43
  368. package/util/picking/picker-displayer.js +177 -136
  369. package/util/programs/draw-texture-on-canvas.js +82 -66
  370. package/util/programs/index.js +1 -1
  371. package/util/programs/shapesonglobe.js +203 -167
  372. package/util/programs/supersampletotextures.js +132 -99
  373. package/util/programs/texturetoglobe.js +152 -128
  374. package/util/shaderfunctions/geometrytransformations.ts +388 -0
  375. package/util/shaderfunctions/index.js +2 -2
  376. package/util/shaderfunctions/nodata.js +4 -2
  377. package/util/shaderfunctions/noisefunctions.js +10 -7
  378. package/util/surface-line-data/arc-bboxes.ts +42 -0
  379. package/util/surface-line-data/arcs-to-cuts.js +74 -50
  380. package/util/surface-line-data/cut-arc.js +0 -1
  381. package/util/surface-line-data/flow.ts +52 -0
  382. package/util/surface-line-data/rbush-manager.js +0 -1
  383. package/util/surface-line-data/types.ts +27 -0
  384. package/util/surface-line-data/web-worker.js +0 -1
  385. package/util/webglobe/gldefaultstates.js +5 -4
  386. package/util/webglobe/index.js +2 -2
  387. package/util/webglobe/rasteroverlay.js +96 -75
  388. package/util/webglobjectbuilders.ts +446 -0
  389. package/waveparticles/adaptor.js +16 -15
  390. package/waveparticles/index.js +3 -3
  391. package/waveparticles/plugin.js +342 -290
  392. package/wind/imagetovectorfieldandmagnitude.js +71 -56
  393. package/wind/index.js +5 -5
  394. package/wind/plugin.js +845 -670
  395. package/wind/vectorfieldimage.js +27 -23
  396. package/write-text/attached-text-writer.js +105 -87
  397. package/write-text/context-text-bulk.ts +268 -0
  398. package/write-text/context-text.js +125 -94
  399. package/write-text/context-text3.ts +253 -0
  400. package/write-text/context-text3old.js +179 -152
  401. package/write-text/context-text4.ts +243 -0
  402. package/write-text/index.js +1 -1
  403. package/write-text/writer-plugin.js +7 -8
  404. package/Math/frustum/camera.js +0 -24
  405. package/Math/frustum/from-globeinfo.js +0 -48
  406. package/util/account/single-attribute-buffer-management/types.js +0 -1
  407. /package/{Math → dist/Math}/arc-cdf-points.js +0 -0
  408. /package/{Math → dist/Math}/arc-generate-points-exponantial.js +0 -0
  409. /package/{Math → dist/Math}/arc.js +0 -0
  410. /package/{Math → dist/Math}/circle-cdf-points.js +0 -0
  411. /package/{Math → dist/Math}/circle.js +0 -0
  412. /package/{Math → dist/Math}/constants.js +0 -0
  413. /package/{Math/matrix4.js → dist/Math/index.js} +0 -0
  414. /package/{Math → dist/Math}/juction/arc-plane.js +0 -0
  415. /package/{Math → dist/Math}/juction/line-sphere.js +0 -0
  416. /package/{Math → dist/Math}/juction/plane-plane.js +0 -0
  417. /package/{Math → dist/Math}/line.js +0 -0
  418. /package/{util/surface-line-data/types.js → dist/Math/matrix4.js} +0 -0
  419. /package/{Math → dist/Math}/methods.js +0 -0
  420. /package/{Math → dist/Math}/plane.js +0 -0
  421. /package/{Math → dist/Math}/quaternion.js +0 -0
  422. /package/{Math → dist/Math}/templete-shapes/grid-visually-equal.js +0 -0
  423. /package/{Math/frustum → dist/Math}/types.js +0 -0
  424. /package/{Math → dist/Math}/vec3.js +0 -0
  425. /package/{programs → dist/programs}/line-on-globe/linestrip/data.js +0 -0
  426. /package/{programs → dist/programs}/line-on-globe/linestrip/linestrip.js +0 -0
  427. /package/{programs → dist/programs}/line-on-globe/naive-accurate-flexible.js +0 -0
  428. /package/{programs → dist/programs}/programcache.js +0 -0
  429. /package/{programs → dist/programs}/rings/partial-ring/piece-of-pie.js +0 -0
  430. /package/{programs → dist/programs}/totems/camerauniformblock.js +0 -0
  431. /package/{programs → dist/programs}/totems/canvas-webglobe-info.js +0 -0
  432. /package/{programs → dist/programs}/totems/globe-changes.js +0 -0
  433. /package/{programs → dist/programs}/totems/index.js +0 -0
  434. /package/{programs → dist/programs}/vectorfields/logics/constants.js +0 -0
  435. /package/{programs → dist/programs}/vectorfields/logics/ubo-new.js +0 -0
  436. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/bearing-line/adapters.js +0 -0
  437. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/bearing-line/plugin.js +0 -0
  438. /package/{Math → dist/range-tools-on-terrain/bearing-line}/types.js +0 -0
  439. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/circle-line-chain/adapters.js +0 -0
  440. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/circle-line-chain/chain-list-map.js +0 -0
  441. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/circle-line-chain/plugin.js +0 -0
  442. /package/{range-tools-on-terrain/bearing-line → dist/range-tools-on-terrain/circle-line-chain}/types.js +0 -0
  443. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/range-ring/adapters.js +0 -0
  444. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/range-ring/enum.js +0 -0
  445. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/range-ring/plugin.js +0 -0
  446. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/range-ring/rangeringangletext.js +0 -0
  447. /package/{range-tools-on-terrain → dist/range-tools-on-terrain}/range-ring/types.js +0 -0
  448. /package/{rangerings → dist/rangerings}/enum.js +0 -0
  449. /package/{semiplugins → dist/semiplugins}/interface.js +0 -0
  450. /package/{semiplugins → dist/semiplugins}/lightweight/line-plugin.js +0 -0
  451. /package/{semiplugins → dist/semiplugins}/lightweight/piece-of-pie-plugin.js +0 -0
  452. /package/{semiplugins → dist/semiplugins}/shape-on-terrain/arc-plugin.js +0 -0
  453. /package/{semiplugins → dist/semiplugins}/shape-on-terrain/circle-plugin.js +0 -0
  454. /package/{semiplugins → dist/semiplugins}/shape-on-terrain/padding-1-degree.js +0 -0
  455. /package/{semiplugins → dist/semiplugins}/type.js +0 -0
  456. /package/{types.js → dist/types.js} +0 -0
  457. /package/{util → dist/util}/account/create-buffermap-orchastration.js +0 -0
  458. /package/{util → dist/util}/account/single-attribute-buffer-management/buffer-manager.js +0 -0
  459. /package/{util → dist/util}/account/single-attribute-buffer-management/buffer-orchestrator.js +0 -0
  460. /package/{util → dist/util}/account/single-attribute-buffer-management/buffer-orchestrator1.js +0 -0
  461. /package/{util → dist/util}/account/single-attribute-buffer-management/index.js +0 -0
  462. /package/{util → dist/util}/account/single-attribute-buffer-management/object-store.js +0 -0
  463. /package/{range-tools-on-terrain/circle-line-chain → dist/util/account/single-attribute-buffer-management}/types.js +0 -0
  464. /package/{util → dist/util}/build-strategy/general-strategy.js +0 -0
  465. /package/{util → dist/util}/build-strategy/static-dynamic.js +0 -0
  466. /package/{util → dist/util}/check/typecheck.js +0 -0
  467. /package/{util → dist/util}/frame-counter-trigger.js +0 -0
  468. /package/{util → dist/util}/geometry/index.js +0 -0
  469. /package/{util → dist/util}/gl-util/buffer/attribute-loader.js +0 -0
  470. /package/{util → dist/util}/gl-util/buffer/index.js +0 -0
  471. /package/{util → dist/util}/gl-util/draw-options/methods.js +0 -0
  472. /package/{util → dist/util}/gl-util/uniform-block/manager.js +0 -0
  473. /package/{util → dist/util}/gl-util/uniform-block/types.js +0 -0
  474. /package/{util → dist/util}/heatwavedatamanager/pointcoordsmeta.js +0 -0
  475. /package/{util → dist/util}/heatwavedatamanager/texture-point-sampler.js +0 -0
  476. /package/{util → dist/util}/shaderfunctions/geometrytransformations.js +0 -0
  477. /package/{util → dist/util}/surface-line-data/arc-bboxes.js +0 -0
  478. /package/{util → dist/util}/surface-line-data/flow.js +0 -0
  479. /package/{util → dist/util}/webglobjectbuilders.js +0 -0
  480. /package/{write-text → dist/write-text}/context-text3.js +0 -0
  481. /package/{write-text → dist/write-text}/context-text4.js +0 -0
@@ -0,0 +1,90 @@
1
+ # Requirements
2
+
3
+ - webgl program
4
+ - interaction with globe elevation api
5
+ - mesh algorithm
6
+
7
+
8
+ # WEBGL PROGRAM
9
+
10
+ Triangles with Webgl picking. Program can have color hightlighting too for selected item.
11
+
12
+ # Interation with Globe Elevation API
13
+
14
+ Elevation resolution is based on camera and focus positions.
15
+ Instead of blindly ask for elevation of coordinates, what else can be done?
16
+
17
+ ## 1. Server side solution
18
+ A detailed version can be requested from server. Server create mesh. The mesh preferably high resolution.
19
+ Therefore zoom level and camera information is no longer parameters.
20
+
21
+ On edit mod the change is on fly. Server probably cannot catch the speed of spontanius editting. On this case less detailed mesh can be
22
+ processed be client side. One edit finished, client asks for detailed final version.
23
+
24
+ **Criterias:** Visual compatibility with Globe surface, Performance, Memory, Web Traffic(maybe opening a mesh server at backand)
25
+
26
+ # Mesh Algorithm & Data Structure
27
+
28
+ olygon to elevation mesh
29
+
30
+ Data structure would be points and indexes.
31
+
32
+ Adaptors employed to convert user input to desired ınput.
33
+
34
+ Flat version of mesh can be build on front end if possible
35
+
36
+
37
+
38
+ ***********
39
+
40
+
41
+ [-] Mesh algorthm concave
42
+ [-] triangle plugin with gpu picking. input ( key, mesh (Variative size ?) , color,)
43
+
44
+
45
+ --------
46
+
47
+ # Loading DEM to texture array
48
+
49
+ There is 6 Tiles with dem in an instance of time.
50
+
51
+ These 6 tiles can be loaded to gpu as texture[6].
52
+ And 6 bbox can be loaded as vec4[6] rgba -> ur lr rl ll
53
+ Each vertex finds which tile they are blonged to, and calculate dem from points relative position to their bbox
54
+ If a vertex is not inside of a tile elevation is Zero.
55
+
56
+ ****
57
+
58
+ Taking interseption between points of six tile ( 5 * 5 * 6 ) and polygons will give necessery points.
59
+
60
+ In theory, That way we can contract polygon mesh that fits the Elevation model perfectly with minimal count of points.
61
+
62
+ {
63
+ If 'tiles' are not spontaninus. ve can predefine meshes acounding to current zoom level. If zoom level changes the shapes inside visibility bbox will be updated.
64
+ }
65
+
66
+
67
+
68
+ Hasana sorular
69
+
70
+ Ekrana yüklenen ekrandaki yükseklikler merkez baz alınarak 6 tane
71
+
72
+ 5 * 5 * 6 ?
73
+
74
+ bir anda sadece 6 tile in yükseikli ile mi çizim yapılmakta ?
75
+
76
+
77
+ GLOBA bunları bboxları ile alabileceğim bir method çıkabilir miyiz?
78
+
79
+ Dönen istekleri alabileceğim
80
+
81
+ --
82
+
83
+ Hasan ile konuştum.
84
+
85
+
86
+ ---
87
+
88
+ mesh
89
+
90
+ try mapbox delunay
@@ -0,0 +1,8 @@
1
+ import { Color } from "../types";
2
+
3
+ export type PluginStyleOptions = {
4
+ variativeColorsOn?: boolean; // If true, the color will be variative based on the circle's radius.
5
+ defaultColor: Color;
6
+ defaultHeightFromGroundIn3D?: number; // Default height from ground in 3D mode.
7
+
8
+ }
@@ -52,4 +52,4 @@ float firework(vec2 point_coord, float phase) {
52
52
  float alpha = sum * 2.5;
53
53
  return clamp(alpha, 0.0, 1.0);
54
54
  }
55
- `;
55
+ `
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  const singularity = `
2
4
 
3
5
  vec3 palette(float d){
@@ -52,5 +54,6 @@ vec4 singularity(vec2 pointCoord, float u_phase) {
52
54
  vec3 rd = normalize(uuv - ro);
53
55
 
54
56
  return rm(ro, rd);
55
- }`;
56
- export { singularity };
57
+ }`;
58
+
59
+ export { singularity };
@@ -0,0 +1,367 @@
1
+ /**
2
+ * @file This script provides a function to generate points along an arc on a unit sphere.
3
+ * The arc is defined by a start point, an end point, and a rotation axis.
4
+ * The density of the sampled points can be biased towards an 'attraction point'
5
+ * using a deterministic inverse transform sampling approach.
6
+ */
7
+ // --- Utility Functions for 3D Vector Operations ---
8
+ /**
9
+ * Normalizes a 3D vector to unit length.
10
+ * @param v The input vector.
11
+ * @returns The normalized vector. Returns [0,0,0] if the input vector is a zero vector.
12
+ */
13
+ function vec3Normalize(v) {
14
+ var len = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
15
+ if (len < 1e-9) { // Use a small epsilon to handle near-zero vectors
16
+ return [0, 0, 0];
17
+ }
18
+ return [v[0] / len, v[1] / len, v[2] / len];
19
+ }
20
+ /**
21
+ * Calculates the dot product of two 3D vectors.
22
+ * @param v1 The first vector.
23
+ * @param v2 The second vector.
24
+ * @returns The dot product.
25
+ */
26
+ function vec3Dot(v1, v2) {
27
+ return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
28
+ }
29
+ /**
30
+ * Calculates the cross product of two 3D vectors.
31
+ * @param v1 The first vector.
32
+ * @param v2 The second vector.
33
+ * @returns The cross product vector.
34
+ */
35
+ function vec3Cross(v1, v2) {
36
+ return [
37
+ v1[1] * v2[2] - v1[2] * v2[1],
38
+ v1[2] * v2[0] - v1[0] * v2[2],
39
+ v1[0] * v2[1] - v1[1] * v2[0]
40
+ ];
41
+ }
42
+ /**
43
+ * Scales a 3D vector by a scalar.
44
+ * @param v The input vector.
45
+ * @param s The scalar value.
46
+ * @returns The scaled vector.
47
+ */
48
+ function vec3Scale(v, s) {
49
+ return [v[0] * s, v[1] * s, v[2] * s];
50
+ }
51
+ /**
52
+ * Adds two 3D vectors.
53
+ * @param v1 The first vector.
54
+ * @param v2 The second vector.
55
+ * @returns The resulting vector.
56
+ */
57
+ function vec3Add(v1, v2) {
58
+ return [v1[0] + v2[0], v1[1] + v2[1], v1[2] + v2[2]];
59
+ }
60
+ /**
61
+ * Subtracts the second 3D vector from the first.
62
+ * @param v1 The first vector.
63
+ * @param v2 The second vector.
64
+ * @returns The resulting vector.
65
+ */
66
+ function vec3Sub(v1, v2) {
67
+ return [v1[0] - v2[0], v1[1] - v2[1], v1[2] - v2[2]];
68
+ }
69
+ /**
70
+ * Clamps a numerical value within a specified range.
71
+ * @param value The value to clamp.
72
+ * @param min The minimum allowed value.
73
+ * @param max The maximum allowed value.
74
+ * @returns The clamped value.
75
+ */
76
+ function clamp(value, min, max) {
77
+ return Math.max(min, Math.min(value, max));
78
+ }
79
+ function vec3Distance(v1, v2) {
80
+ var dx = v1[0] - v2[0];
81
+ var dy = v1[1] - v2[1];
82
+ var dz = v1[2] - v2[2];
83
+ return Math.sqrt(dx * dx + dy * dy + dz * dz);
84
+ }
85
+ /**
86
+ * Rotates a vector around a given axis by a specified angle using Rodrigues' rotation formula.
87
+ * The axis must be a unit vector for correct results.
88
+ * @param v The vector to rotate.
89
+ * @param axis The unit axis of rotation.
90
+ * @param angle The angle of rotation in radians.
91
+ * @returns The rotated vector.
92
+ */
93
+ function rotateVector(v, axis, angle) {
94
+ var cosAngle = Math.cos(angle);
95
+ var sinAngle = Math.sin(angle);
96
+ var oneMinusCos = 1.0 - cosAngle;
97
+ var dotAxisV = vec3Dot(axis, v);
98
+ var crossAxisV = vec3Cross(axis, v);
99
+ // Rodrigues' rotation formula:
100
+ // v' = v * cos(angle) + (axis x v) * sin(angle) + axis * (axis . v) * (1 - cos(angle))
101
+ var term1 = vec3Scale(v, cosAngle);
102
+ var term2 = vec3Scale(crossAxisV, sinAngle);
103
+ var term3 = vec3Scale(axis, dotAxisV * oneMinusCos);
104
+ return vec3Add(vec3Add(term1, term2), term3);
105
+ }
106
+ /**
107
+ * Solves a quadratic equation Ax^2 + Bx + C = 0 for x, returning a root within a specified range.
108
+ * Handles linear cases (A approx 0) and multiple roots, selecting the most appropriate one for CDF inversion.
109
+ * @param a Coefficient A.
110
+ * @param b Coefficient B.
111
+ * @param c Coefficient C.
112
+ * @param minVal The minimum expected value for the root.
113
+ * @param maxVal The maximum expected value for the root.
114
+ * @returns The selected root within the range, or null if no valid real root.
115
+ */
116
+ function solveQuadratic(a, b, c, minVal, maxVal) {
117
+ var epsilon = 1e-12; // Small value for floating point comparisons
118
+ // Case 1: Linear equation (A is close to zero)
119
+ if (Math.abs(a) < epsilon) {
120
+ if (Math.abs(b) < epsilon) {
121
+ // Both A and B are zero. If C is also zero, infinitely many solutions, pick minVal.
122
+ // Otherwise, no solutions.
123
+ return Math.abs(c) < epsilon ? minVal : null;
124
+ }
125
+ var x = -c / b;
126
+ // Check if the linear solution is within the expected range
127
+ return (x >= minVal - epsilon && x <= maxVal + epsilon) ? x : null;
128
+ }
129
+ // Case 2: Quadratic equation
130
+ var discriminant = b * b - 4 * a * c;
131
+ if (discriminant < -epsilon) { // No real roots (discriminant is significantly negative)
132
+ return null;
133
+ }
134
+ if (discriminant < epsilon) { // One real root (discriminant is close to zero)
135
+ var x = -b / (2 * a);
136
+ return (x >= minVal - epsilon && x <= maxVal + epsilon) ? x : null;
137
+ }
138
+ // Case 3: Two distinct real roots
139
+ var sqrtDisc = Math.sqrt(discriminant);
140
+ var x1 = (-b + sqrtDisc) / (2 * a);
141
+ var x2 = (-b - sqrtDisc) / (2 * a);
142
+ var validX1 = (x1 >= minVal - epsilon && x1 <= maxVal + epsilon);
143
+ var validX2 = (x2 >= minVal - epsilon && x2 <= maxVal + epsilon);
144
+ if (validX1 && validX2) {
145
+ // If both roots are valid, pick the one that is logically correct for CDF inversion.
146
+ // For an increasing CDF, we generally want the smallest valid non-negative root.
147
+ return Math.min(x1, x2);
148
+ }
149
+ else if (validX1) {
150
+ return x1;
151
+ }
152
+ else if (validX2) {
153
+ return x2;
154
+ }
155
+ else {
156
+ return null; // No valid roots within the range
157
+ }
158
+ }
159
+ // --- Main Function for Arc Point Generation ---
160
+ /**
161
+ * Generates points on the shortest arc between p0 and p1 on a unit sphere.
162
+ * The arc is formed by rotating p0 around axisA. The density of points
163
+ * is higher closer to the attractionPoint.
164
+ *
165
+ * @param p0 The starting point of the arc (will be normalized).
166
+ * @param p1 The ending point of the arc (will be normalized).
167
+ * @param axisA The axis of rotation (will be normalized).
168
+ * @param attractionPoint The point on the unit sphere that attracts sampled points (will be normalized).
169
+ * @param pointCount The total number of points to generate on the arc, including p0 and p1.
170
+ * @param strength Controls the density bias. A value of 0 means uniform sampling.
171
+ * Higher positive values (e.g., 1 to 10) result in stronger attraction.
172
+ * @returns An array of `Vec3` representing the deterministically sampled points on the arc.
173
+ */
174
+ function generateArcPoints(p0, p1, axisA, attractionPoint, pointCount, strength) {
175
+ var sampledPoints = [];
176
+ var epsilon = 1e-7; // General epsilon for vector comparisons
177
+ // 1. Normalize all input vectors
178
+ var nP0 = vec3Normalize(p0);
179
+ var nP1 = vec3Normalize(p1);
180
+ var nAxisA = vec3Normalize(axisA);
181
+ var nAttractionPoint = vec3Normalize(attractionPoint);
182
+ // Handle edge cases for pointCount
183
+ if (pointCount < 1) {
184
+ return sampledPoints;
185
+ }
186
+ if (pointCount === 1) {
187
+ sampledPoints.push(nP0);
188
+ return sampledPoints;
189
+ }
190
+ // 2. Determine the total rotation angle required to go from p0 to p1 around axisA
191
+ // Project p0 and p1 onto the plane perpendicular to axisA
192
+ var p0Projected = vec3Sub(nP0, vec3Scale(nAxisA, vec3Dot(nP0, nAxisA)));
193
+ var p1Projected = vec3Sub(nP1, vec3Scale(nAxisA, vec3Dot(nP1, nAxisA)));
194
+ var lenP0Proj = Math.sqrt(vec3Dot(p0Projected, p0Projected));
195
+ var lenP1Proj = Math.sqrt(vec3Dot(p1Projected, p1Projected));
196
+ // Handle cases where p0 or p1 are colinear with the rotation axis
197
+ if (lenP0Proj < epsilon || lenP1Proj < epsilon) {
198
+ // If start and end points are effectively the same (on or very near the axis)
199
+ if (Math.abs(vec3Dot(nP0, nP1) - 1.0) < epsilon) {
200
+ for (var i = 0; i < pointCount; i++) {
201
+ sampledPoints.push(nP0); // Return identical points as no meaningful arc exists
202
+ }
203
+ return sampledPoints;
204
+ }
205
+ else {
206
+ console.warn("generateArcPoints: p0 or p1 is colinear with axisA. Cannot form a valid arc by rotation around axisA to reach p1. Falling back to linear interpolation.");
207
+ // Fallback: simple linear interpolation and normalize
208
+ for (var i = 0; i < pointCount; i++) {
209
+ var t = i / (pointCount - 1);
210
+ var interpolated = vec3Add(vec3Scale(nP0, (1 - t)), vec3Scale(nP1, t));
211
+ sampledPoints.push(vec3Normalize(interpolated));
212
+ }
213
+ return sampledPoints;
214
+ }
215
+ }
216
+ var nP0Projected = vec3Normalize(p0Projected);
217
+ var nP1Projected = vec3Normalize(p1Projected);
218
+ // Calculate total rotation angle using atan2 for a signed angle
219
+ var crossProj = vec3Cross(nP0Projected, nP1Projected);
220
+ var totalRotationAngle = Math.atan2(vec3Dot(crossProj, nAxisA), vec3Dot(nP0Projected, nP1Projected));
221
+ // If total rotation angle is negligible, all points are essentially p0
222
+ if (Math.abs(totalRotationAngle) < epsilon) {
223
+ for (var i = 0; i < pointCount; i++) {
224
+ sampledPoints.push(nP0);
225
+ }
226
+ return sampledPoints;
227
+ }
228
+ // 3. Find alpha_A: the angle parameter (from p0) where the arc point is closest to attractionPoint
229
+ // We search over `t` from 0 to 1, and map to actual rotation angles.
230
+ var alpha_A = 0.0; // This will be the actual rotation angle
231
+ var minAngleToAttraction = Math.PI; // Initialize with max possible angle
232
+ var testSteps = 1000; // Granularity for finding alpha_A
233
+ for (var i = 0; i <= testSteps; i++) {
234
+ var t_test = i / testSteps; // Normalized parameter [0, 1]
235
+ var currentAlpha = totalRotationAngle * t_test; // Actual rotation angle
236
+ var pArcTest = rotateVector(nP0, nAxisA, currentAlpha); // Point on arc
237
+ var dotProduct = clamp(vec3Dot(pArcTest, nAttractionPoint), -1.0, 1.0);
238
+ var currentAngle = Math.acos(dotProduct);
239
+ if (currentAngle < minAngleToAttraction) {
240
+ minAngleToAttraction = currentAngle;
241
+ alpha_A = currentAlpha;
242
+ }
243
+ }
244
+ // 4. Define the PDF parameters (for normalized parameter t in [0,1])
245
+ // The density function for 't' (normalized angle from 0 to 1)
246
+ var minDensity = 1.0;
247
+ // Strength ensures positive density. Higher strength gives more pronounced peak.
248
+ var maxDensity = minDensity + Math.max(0, strength);
249
+ // Normalize alpha_A to the [0, 1] range for the PDF/CDF calculations
250
+ // This represents the peak position (t_peak) within the normalized parameter space.
251
+ var alpha_A_normalized = totalRotationAngle !== 0 ? clamp(alpha_A / totalRotationAngle, 0, 1) : 0;
252
+ // Normalization constant for the PDF (integral over [0,1] must be 1)
253
+ // Area of trapezoid = 0.5 * (base1 + base2) * height
254
+ // In our case, the "bases" are minDensity and maxDensity, "height" is 1 (the t-interval length)
255
+ var pdfArea = 0.5 * (minDensity + maxDensity);
256
+ var pdfNormalizationConstant = 1.0 / pdfArea;
257
+ // Calculate CDF value at the peak point (alpha_A_normalized)
258
+ // This splits the CDF into two regions for the quadratic solver
259
+ var cdfAtAlphaA_norm = pdfNormalizationConstant * (minDensity * alpha_A_normalized + 0.5 * (maxDensity - minDensity) * alpha_A_normalized);
260
+ // 5. Generate deterministic points using inverse transform sampling
261
+ for (var i = 0; i < pointCount; i++) {
262
+ // Generate uniformly spaced values `u` in [0, 1]
263
+ var u = i / (pointCount - 1);
264
+ var t_sampled = // This will be the sampled normalized parameter [0, 1]
265
+ void 0; // This will be the sampled normalized parameter [0, 1]
266
+ if (u <= cdfAtAlphaA_norm) {
267
+ // Case 1: The sampled point falls in the first part of the PDF (0 to alpha_A_normalized)
268
+ // F(t) = normConst * (minDensity * t + 0.5 * (maxDensity - minDensity) / alpha_A_normalized * t^2)
269
+ // Rearrange to A*t^2 + B*t + C = 0 for solving:
270
+ var A = (alpha_A_normalized !== 0) ? pdfNormalizationConstant * 0.5 * (maxDensity - minDensity) / alpha_A_normalized : 0;
271
+ var B = pdfNormalizationConstant * minDensity;
272
+ var C = -u;
273
+ var result = solveQuadratic(A, B, C, 0, alpha_A_normalized);
274
+ // Fallback for unexpected null (e.g., numerical issues)
275
+ t_sampled = result !== null ? result : (u / (cdfAtAlphaA_norm || epsilon)) * alpha_A_normalized;
276
+ }
277
+ else {
278
+ // Case 2: The sampled point falls in the second part of the PDF (alpha_A_normalized to 1)
279
+ // F(t) - cdfAtAlphaA_norm = normConst * [ maxDensity * (t - alpha_A_normalized) - 0.5 * (maxDensity - minDensity) / (1 - alpha_A_normalized) * (t - alpha_A_normalized)^2 ]
280
+ // Let x = t - alpha_A_normalized. Solve for x: A'*x^2 + B'*x + C' = 0
281
+ var rangeAfterA = 1 - alpha_A_normalized;
282
+ var A_prime = (rangeAfterA !== 0) ? -pdfNormalizationConstant * 0.5 * (maxDensity - minDensity) / rangeAfterA : 0;
283
+ var B_prime = pdfNormalizationConstant * maxDensity;
284
+ var C_prime = -(u - cdfAtAlphaA_norm);
285
+ var result_x = solveQuadratic(A_prime, B_prime, C_prime, 0, rangeAfterA);
286
+ // Fallback for unexpected null
287
+ t_sampled = (result_x !== null ? alpha_A_normalized + result_x :
288
+ alpha_A_normalized + (u - cdfAtAlphaA_norm) / ((1 - cdfAtAlphaA_norm) || epsilon) * rangeAfterA);
289
+ }
290
+ // Ensure t_sampled is within [0, 1] due to potential float inaccuracies
291
+ t_sampled = clamp(t_sampled, 0, 1);
292
+ // Convert the normalized parameter 't_sampled' back to the actual rotation angle
293
+ var actualRotationAngle = totalRotationAngle * t_sampled;
294
+ // Rotate the starting point p0 by this angle around axisA to get the final point
295
+ var currentPoint = rotateVector(nP0, nAxisA, actualRotationAngle);
296
+ sampledPoints.push(currentPoint);
297
+ }
298
+ return sampledPoints;
299
+ }
300
+ // --- Example Usage (for demonstration and testing) ---
301
+ // Example 1: Basic arc, attraction point in the middle
302
+ var p0_ex1 = [1, 0, 0];
303
+ var p1_ex1 = [0, 1, 0]; // 90 deg rotation around Z-axis
304
+ var axisA_ex1 = [0, 0, 1];
305
+ var attractionPoint_ex1 = [Math.sqrt(0.5), Math.sqrt(0.5), 0]; // On the arc, middle of P0-P1
306
+ var numPoints_ex1 = 50;
307
+ var strength_ex1 = 100.0; // Strong attraction
308
+ console.log("--- Example 1: Attraction point in the middle of the arc ---");
309
+ var points1 = generateArcPoints(p0_ex1, p1_ex1, axisA_ex1, attractionPoint_ex1, numPoints_ex1, strength_ex1);
310
+ console.log("Generated ".concat(points1.length, " points."));
311
+ // To observe concentration, you might visualize these points or calculate their 't' parameter distribution.
312
+ // For console output, let's print a few:
313
+ console.log("First 5 points:", points1.slice(0, 5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
314
+ console.log("Last 5 points:", points1.slice(-5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
315
+ // Expected: Points should be denser around [0.707, 0.707, 0]
316
+ var sequentialDistances1 = points1.map(function (p, i) {
317
+ if (i === 0)
318
+ return 0; // Skip the first point
319
+ return vec3Distance(points1[i - 1], p);
320
+ });
321
+ console.log("Sequential distances between points (should be roughly equal for uniform distribution):", sequentialDistances1.map(function (d) { return d.toFixed(4); }));
322
+ // Example 2: Attraction point near p0
323
+ var p0_ex2 = [1, 0, 0];
324
+ var p1_ex2 = [0, 1, 0];
325
+ var axisA_ex2 = [0, 0, 1];
326
+ var attractionPoint_ex2 = [0.99, 0.01, 0]; // Very close to P0
327
+ var numPoints_ex2 = 50;
328
+ var strength_ex2 = 10.0; // Very strong attraction
329
+ console.log("\n--- Example 2: Attraction point near the start (p0) ---");
330
+ var points2 = generateArcPoints(p0_ex2, p1_ex2, axisA_ex2, attractionPoint_ex2, numPoints_ex2, strength_ex2);
331
+ console.log("Generated ".concat(points2.length, " points."));
332
+ console.log("First 5 points:", points2.slice(0, 5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
333
+ console.log("Last 5 points:", points2.slice(-5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
334
+ // Expected: Points should be denser near [1, 0, 0]
335
+ // Example 3: Attraction point away from the arc (expect less concentration)
336
+ var p0_ex3 = [1, 0, 0];
337
+ var p1_ex3 = [0, 1, 0];
338
+ var axisA_ex3 = [0, 0, 1];
339
+ var attractionPoint_ex3 = [0, 0, 1]; // North pole, away from the XY plane arc
340
+ var numPoints_ex3 = 50;
341
+ var strength_ex3 = 5.0;
342
+ console.log("\n--- Example 3: Attraction point away from the arc ---");
343
+ var points3 = generateArcPoints(p0_ex3, p1_ex3, axisA_ex3, attractionPoint_ex3, numPoints_ex3, strength_ex3);
344
+ console.log("Generated ".concat(points3.length, " points."));
345
+ console.log("First 5 points:", points3.slice(0, 5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
346
+ console.log("Last 5 points:", points3.slice(-5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
347
+ // Expected: Points should be relatively uniformly distributed, as no point on the arc is significantly closer.
348
+ // The "closest point" on the arc will likely be determined by its closest angular projection.
349
+ // Example 4: No attraction (uniform distribution)
350
+ var p0_ex4 = [1, 0, 0];
351
+ var p1_ex4 = [0, 1, 0];
352
+ var axisA_ex4 = [0, 0, 1];
353
+ var attractionPoint_ex4 = [Math.sqrt(1 / 2), Math.sqrt(1 / 2), 0]; // Irrelevant when strength is 0
354
+ var numPoints_ex4 = 50;
355
+ var strength_ex4 = 4.0; // No attraction (uniform)
356
+ console.log("\n--- Example 4: Uniform distribution (strength = 0) ---");
357
+ var points4 = generateArcPoints(p0_ex4, p1_ex4, axisA_ex4, attractionPoint_ex4, numPoints_ex4, strength_ex4);
358
+ console.log("Generated ".concat(points4.length, " points."));
359
+ console.log("First 5 points:", points4.slice(0, 5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
360
+ console.log("Last 5 points:", points4.slice(-5).map(function (p) { return p.map(function (coord) { return coord.toFixed(4); }); }));
361
+ // Expected: Points should be uniformly spaced.
362
+ var sequentialDistances = points4.map(function (p, i) {
363
+ if (i === 0)
364
+ return 0; // Skip the first point
365
+ return vec3Distance(points4[i - 1], p);
366
+ });
367
+ console.log("Sequential distances between points (should be roughly equal for uniform distribution):", sequentialDistances.map(function (d) { return d.toFixed(4); }));