@pirireis/webglobeplugins 0.16.0 → 0.16.1

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