@pirireis/webglobeplugins 0.16.0 → 0.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Math/angle-calculation.js +13 -14
- package/Math/bounds/line-bbox.js +186 -225
- package/Math/index.js +1 -0
- package/Math/mesh/mapbox-delaunay.js +544 -607
- package/Math/utils.js +2 -3
- package/algorithms/search-binary.js +16 -14
- package/altitude-locator/adaptors.js +1 -0
- package/altitude-locator/keymethod.js +1 -0
- package/altitude-locator/plugin.js +345 -446
- package/altitude-locator/types.js +21 -26
- package/arrowfield/adaptor.js +11 -11
- package/arrowfield/index.js +3 -3
- package/arrowfield/plugin.js +83 -128
- package/bearing-line/index.js +2 -2
- package/bearing-line/plugin.js +444 -520
- package/circle-line-chain/chain-list-map.js +201 -221
- package/circle-line-chain/init.js +1 -0
- package/circle-line-chain/plugin.js +411 -464
- package/circle-line-chain/util.js +1 -1
- package/compass-rose/compass-rose-padding-flat.js +230 -274
- package/compass-rose/compass-text-writer.js +149 -173
- package/compass-rose/index.js +3 -3
- package/compassrose/compassrose.js +293 -341
- package/compassrose/index.js +2 -2
- package/constants.js +3 -0
- package/heatwave/index.js +3 -4
- package/heatwave/isobar/objectarraylabels.js +200 -247
- package/heatwave/isobar/plugin.js +302 -339
- package/heatwave/isobar/quadtreecontours.js +298 -336
- package/heatwave/plugins/heatwaveglobeshell.js +204 -259
- package/index.js +12 -15
- package/jest.config.js +7 -6
- package/package.json +1 -4
- package/partialrings/buffer-manager.js +75 -89
- package/partialrings/index.js +2 -3
- package/partialrings/plugin.js +128 -160
- package/partialrings/program.js +188 -233
- package/pin/pin-object-array.js +300 -381
- package/pin/pin-point-totem.js +60 -77
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +63 -78
- package/point-heat-map/index.js +1 -0
- package/point-heat-map/plugin-webworker.js +121 -148
- package/point-heat-map/point-to-heat-map-flow.js +124 -150
- package/point-tracks/key-methods.js +2 -3
- package/point-tracks/plugin.js +393 -480
- package/programs/arrowfield/index.js +2 -2
- package/programs/arrowfield/logic.js +141 -173
- package/programs/arrowfield/object.js +60 -89
- package/programs/data2legend/density-to-legend.js +73 -90
- package/programs/data2legend/point-to-density-texture.js +70 -87
- package/programs/float2legendwithratio/index.js +2 -3
- package/programs/float2legendwithratio/logic.js +118 -144
- package/programs/float2legendwithratio/object.js +104 -141
- package/programs/globe-util/is-globe-moved.js +19 -27
- package/programs/globeshell/index.js +2 -2
- package/programs/globeshell/wiggle/index.js +2 -3
- package/programs/globeshell/wiggle/logic.js +243 -272
- package/programs/globeshell/wiggle/object.js +66 -93
- package/programs/helpers/blender/index.js +1 -0
- package/programs/helpers/blender/program.js +58 -73
- package/programs/helpers/fadeaway/index.js +2 -3
- package/programs/helpers/fadeaway/logic.js +46 -53
- package/programs/helpers/fadeaway/object.js +14 -20
- package/programs/helpers/index.js +2 -2
- package/programs/index.js +9 -21
- package/programs/line-on-globe/circle-accurate-3d.js +87 -115
- package/programs/line-on-globe/circle-accurate-flat.js +149 -201
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +104 -136
- package/programs/line-on-globe/index.js +1 -0
- package/programs/line-on-globe/lines-color-instanced-flat.js +83 -102
- package/programs/line-on-globe/util.js +5 -8
- package/programs/picking/pickable-polygon-renderer.js +98 -129
- package/programs/picking/pickable-renderer.js +98 -129
- package/programs/point-on-globe/element-globe-surface-glow.js +93 -122
- package/programs/point-on-globe/element-point-glow.js +80 -114
- package/programs/point-on-globe/square-pixel-point.js +120 -138
- package/programs/rings/distancering/circleflatprogram.js +116 -138
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +275 -323
- package/programs/rings/distancering/circlepaddysharedbuffer.js +368 -423
- package/programs/rings/distancering/index.js +6 -5
- package/programs/rings/distancering/paddyflatprogram.js +127 -148
- package/programs/rings/distancering/paddyflatprogram2d.js +129 -153
- package/programs/rings/distancering/paddyflatprogram3d.js +128 -149
- package/programs/rings/index.js +1 -1
- package/{dist/programs → programs}/totems/camerauniformblock.js +10 -3
- package/programs/totems/gpu-selection-uniform-block.js +99 -127
- package/programs/two-d/pixel-circle.js +1 -0
- package/programs/two-d/pixel-padding-for-compass.js +97 -112
- package/programs/util.js +14 -19
- package/programs/vectorfields/index.js +3 -3
- package/programs/vectorfields/logics/drawrectangleparticles.js +58 -78
- package/programs/vectorfields/logics/index.js +2 -4
- package/programs/vectorfields/logics/pixelbased.js +73 -92
- package/programs/vectorfields/logics/ubo.js +51 -57
- package/programs/vectorfields/pingpongbuffermanager.js +73 -80
- package/rangerings/index.js +5 -5
- package/rangerings/plugin.js +543 -644
- package/rangerings/rangeringangletext.js +326 -369
- package/rangerings/ring-account.js +112 -129
- package/shaders/fragment-toy/firework.js +1 -1
- package/shaders/fragment-toy/singularity.js +2 -5
- package/timetracks/adaptors-line-strip.js +65 -80
- package/timetracks/index.js +1 -0
- package/timetracks/plugin-line-strip.js +240 -295
- package/timetracks/program-line-strip.js +411 -491
- package/timetracks/programpoint-line-strip.js +98 -122
- package/util/account/bufferoffsetmanager.js +176 -209
- package/util/account/index.js +3 -6
- package/util/account/util.js +18 -22
- package/util/algorithms/index.js +1 -0
- package/util/algorithms/search-binary.js +25 -26
- package/util/check/index.js +1 -0
- package/util/geometry/index.js +121 -0
- package/util/gl-util/uniform-block/shader.js +1 -0
- package/util/heatwavedatamanager/datamanager.js +149 -168
- package/util/heatwavedatamanager/index.js +2 -2
- package/util/index.js +13 -13
- package/util/interpolation/index.js +1 -0
- package/util/interpolation/timetrack/index.js +2 -9
- package/util/interpolation/timetrack/timetrack-interpolator.js +79 -94
- package/util/interpolation/timetrack/web-worker.js +46 -51
- package/util/jshelpers/data-filler.js +17 -19
- package/util/jshelpers/equality.js +18 -17
- package/util/jshelpers/index.js +2 -1
- package/util/jshelpers/timefilters.js +30 -32
- package/util/picking/fence.js +43 -46
- package/util/picking/picker-displayer.js +136 -177
- package/util/programs/draw-texture-on-canvas.js +66 -82
- package/util/programs/index.js +1 -1
- package/util/programs/shapesonglobe.js +167 -203
- package/util/programs/supersampletotextures.js +99 -132
- package/util/programs/texturetoglobe.js +128 -152
- package/util/shaderfunctions/index.js +2 -2
- package/util/shaderfunctions/nodata.js +2 -4
- package/util/shaderfunctions/noisefunctions.js +7 -10
- package/util/surface-line-data/arcs-to-cuts.js +50 -74
- package/util/surface-line-data/cut-arc.js +1 -0
- package/util/surface-line-data/rbush-manager.js +1 -0
- package/util/surface-line-data/web-worker.js +1 -0
- package/util/webglobe/gldefaultstates.js +4 -5
- package/util/webglobe/index.js +2 -2
- package/util/webglobe/rasteroverlay.js +75 -96
- package/waveparticles/adaptor.js +15 -16
- package/waveparticles/index.js +3 -3
- package/waveparticles/plugin.js +290 -342
- package/wind/imagetovectorfieldandmagnitude.js +56 -71
- package/wind/index.js +5 -5
- package/wind/plugin.js +670 -845
- package/wind/vectorfieldimage.js +23 -27
- package/write-text/attached-text-writer.js +87 -105
- package/{dist/write-text → write-text}/context-text-bulk.js +35 -20
- package/write-text/context-text.js +94 -125
- package/write-text/context-text3old.js +152 -179
- package/{dist/write-text → write-text}/context-text4.js +5 -3
- package/write-text/index.js +1 -1
- package/write-text/writer-plugin.js +8 -7
- package/Math/arc-cdf-points.ts +0 -329
- package/Math/arc-generate-points-exponantial.ts +0 -299
- package/Math/arc.ts +0 -299
- package/Math/circle-cdf-points.ts +0 -143
- package/Math/circle.ts +0 -49
- package/Math/constants.ts +0 -12
- package/Math/juction/arc-plane.ts +0 -129
- package/Math/juction/line-sphere.ts +0 -30
- package/Math/juction/plane-plane.ts +0 -64
- package/Math/line.ts +0 -84
- package/Math/matrix4.ts +0 -0
- package/Math/methods.ts +0 -157
- package/Math/plane.ts +0 -92
- package/Math/quaternion.ts +0 -128
- package/Math/roadmap.md +0 -10
- package/Math/templete-shapes/grid-visually-equal.ts +0 -119
- package/Math/types.ts +0 -66
- package/Math/vec3.ts +0 -180
- package/circle-line-chain/readme.md +0 -57
- package/depth-locator/readme.md +0 -26
- package/dist/Math/angle-calculation.js +0 -13
- package/dist/Math/bounds/line-bbox.js +0 -186
- package/dist/Math/index.js +0 -1
- package/dist/Math/mesh/mapbox-delaunay.js +0 -544
- package/dist/Math/utils.js +0 -2
- package/dist/algorithms/search-binary.js +0 -16
- package/dist/altitude-locator/adaptors.js +0 -1
- package/dist/altitude-locator/keymethod.js +0 -1
- package/dist/altitude-locator/plugin.js +0 -345
- package/dist/altitude-locator/types.js +0 -21
- package/dist/arrowfield/adaptor.js +0 -11
- package/dist/arrowfield/index.js +0 -3
- package/dist/arrowfield/plugin.js +0 -83
- package/dist/bearing-line/index.js +0 -2
- package/dist/bearing-line/plugin.js +0 -444
- package/dist/circle-line-chain/chain-list-map.js +0 -201
- package/dist/circle-line-chain/init.js +0 -1
- package/dist/circle-line-chain/plugin.js +0 -411
- package/dist/circle-line-chain/util.js +0 -1
- package/dist/compass-rose/compass-rose-padding-flat.js +0 -230
- package/dist/compass-rose/compass-text-writer.js +0 -149
- package/dist/compass-rose/index.js +0 -3
- package/dist/compassrose/compassrose.js +0 -293
- package/dist/compassrose/index.js +0 -2
- package/dist/heatwave/index.js +0 -3
- package/dist/heatwave/isobar/objectarraylabels.js +0 -200
- package/dist/heatwave/isobar/plugin.js +0 -302
- package/dist/heatwave/isobar/quadtreecontours.js +0 -298
- package/dist/heatwave/plugins/heatwaveglobeshell.js +0 -204
- package/dist/index.js +0 -12
- package/dist/jest.config.js +0 -7
- package/dist/partialrings/buffer-manager.js +0 -75
- package/dist/partialrings/index.js +0 -2
- package/dist/partialrings/plugin.js +0 -128
- package/dist/partialrings/program.js +0 -279
- package/dist/pin/pin-object-array.js +0 -300
- package/dist/pin/pin-point-totem.js +0 -60
- package/dist/point-heat-map/adaptors/timetracksplugin-format-to-this.js +0 -63
- package/dist/point-heat-map/index.js +0 -1
- package/dist/point-heat-map/plugin-webworker.js +0 -121
- package/dist/point-heat-map/point-to-heat-map-flow.js +0 -124
- package/dist/point-tracks/key-methods.js +0 -2
- package/dist/point-tracks/plugin.js +0 -393
- package/dist/programs/arrowfield/index.js +0 -2
- package/dist/programs/arrowfield/logic.js +0 -254
- package/dist/programs/arrowfield/object.js +0 -60
- package/dist/programs/data2legend/density-to-legend.js +0 -98
- package/dist/programs/data2legend/point-to-density-texture.js +0 -97
- package/dist/programs/float2legendwithratio/index.js +0 -2
- package/dist/programs/float2legendwithratio/logic.js +0 -167
- package/dist/programs/float2legendwithratio/object.js +0 -104
- package/dist/programs/globe-util/is-globe-moved.js +0 -19
- package/dist/programs/globeshell/index.js +0 -2
- package/dist/programs/globeshell/wiggle/index.js +0 -2
- package/dist/programs/globeshell/wiggle/logic.js +0 -342
- package/dist/programs/globeshell/wiggle/object.js +0 -66
- package/dist/programs/helpers/blender/index.js +0 -1
- package/dist/programs/helpers/blender/program.js +0 -76
- package/dist/programs/helpers/fadeaway/index.js +0 -2
- package/dist/programs/helpers/fadeaway/logic.js +0 -69
- package/dist/programs/helpers/fadeaway/object.js +0 -14
- package/dist/programs/helpers/index.js +0 -2
- package/dist/programs/index.js +0 -9
- package/dist/programs/line-on-globe/circle-accurate-3d.js +0 -138
- package/dist/programs/line-on-globe/circle-accurate-flat.js +0 -210
- package/dist/programs/line-on-globe/degree-padding-around-circle-3d.js +0 -156
- package/dist/programs/line-on-globe/index.js +0 -1
- package/dist/programs/line-on-globe/lines-color-instanced-flat.js +0 -131
- package/dist/programs/line-on-globe/util.js +0 -5
- package/dist/programs/picking/pickable-polygon-renderer.js +0 -184
- package/dist/programs/picking/pickable-renderer.js +0 -184
- package/dist/programs/point-on-globe/element-globe-surface-glow.js +0 -138
- package/dist/programs/point-on-globe/element-point-glow.js +0 -150
- package/dist/programs/point-on-globe/square-pixel-point.js +0 -171
- package/dist/programs/rings/distancering/circleflatprogram.js +0 -116
- package/dist/programs/rings/distancering/circlepaddingfreeangleprogram.js +0 -326
- package/dist/programs/rings/distancering/circlepaddysharedbuffer.js +0 -368
- package/dist/programs/rings/distancering/index.js +0 -6
- package/dist/programs/rings/distancering/paddyflatprogram.js +0 -127
- package/dist/programs/rings/distancering/paddyflatprogram2d.js +0 -129
- package/dist/programs/rings/distancering/paddyflatprogram3d.js +0 -128
- package/dist/programs/rings/index.js +0 -1
- package/dist/programs/totems/gpu-selection-uniform-block.js +0 -104
- package/dist/programs/two-d/pixel-circle.js +0 -1
- package/dist/programs/two-d/pixel-padding-for-compass.js +0 -159
- package/dist/programs/util.js +0 -14
- package/dist/programs/vectorfields/index.js +0 -3
- package/dist/programs/vectorfields/logics/drawrectangleparticles.js +0 -113
- package/dist/programs/vectorfields/logics/index.js +0 -2
- package/dist/programs/vectorfields/logics/pixelbased.js +0 -140
- package/dist/programs/vectorfields/logics/ubo.js +0 -60
- package/dist/programs/vectorfields/pingpongbuffermanager.js +0 -73
- package/dist/rangerings/index.js +0 -5
- package/dist/rangerings/plugin.js +0 -543
- package/dist/rangerings/rangeringangletext.js +0 -326
- package/dist/rangerings/ring-account.js +0 -112
- package/dist/shaders/fragment-toy/firework.js +0 -55
- package/dist/shaders/fragment-toy/singularity.js +0 -56
- package/dist/timetracks/adaptors-line-strip.js +0 -65
- package/dist/timetracks/index.js +0 -1
- package/dist/timetracks/plugin-line-strip.js +0 -240
- package/dist/timetracks/program-line-strip.js +0 -608
- package/dist/timetracks/programpoint-line-strip.js +0 -151
- package/dist/util/account/bufferoffsetmanager.js +0 -176
- package/dist/util/account/index.js +0 -3
- package/dist/util/account/util.js +0 -18
- package/dist/util/algorithms/index.js +0 -1
- package/dist/util/algorithms/search-binary.js +0 -25
- package/dist/util/check/index.js +0 -1
- package/dist/util/geometry/index.js +0 -47
- package/dist/util/gl-util/uniform-block/shader.js +0 -1
- package/dist/util/heatwavedatamanager/datamanager.js +0 -149
- package/dist/util/heatwavedatamanager/index.js +0 -2
- package/dist/util/index.js +0 -13
- package/dist/util/interpolation/index.js +0 -1
- package/dist/util/interpolation/timetrack/index.js +0 -2
- package/dist/util/interpolation/timetrack/timetrack-interpolator.js +0 -79
- package/dist/util/interpolation/timetrack/web-worker.js +0 -46
- package/dist/util/jshelpers/data-filler.js +0 -17
- package/dist/util/jshelpers/equality.js +0 -18
- package/dist/util/jshelpers/index.js +0 -2
- package/dist/util/jshelpers/timefilters.js +0 -30
- package/dist/util/picking/fence.js +0 -43
- package/dist/util/picking/picker-displayer.js +0 -136
- package/dist/util/programs/draw-texture-on-canvas.js +0 -86
- package/dist/util/programs/index.js +0 -1
- package/dist/util/programs/shapesonglobe.js +0 -210
- package/dist/util/programs/supersampletotextures.js +0 -109
- package/dist/util/programs/texturetoglobe.js +0 -179
- package/dist/util/shaderfunctions/index.js +0 -2
- package/dist/util/shaderfunctions/nodata.js +0 -8
- package/dist/util/shaderfunctions/noisefunctions.js +0 -41
- package/dist/util/surface-line-data/arcs-to-cuts.js +0 -50
- package/dist/util/surface-line-data/cut-arc.js +0 -1
- package/dist/util/surface-line-data/rbush-manager.js +0 -1
- package/dist/util/surface-line-data/web-worker.js +0 -1
- package/dist/util/webglobe/gldefaultstates.js +0 -4
- package/dist/util/webglobe/index.js +0 -2
- package/dist/util/webglobe/rasteroverlay.js +0 -75
- package/dist/waveparticles/adaptor.js +0 -15
- package/dist/waveparticles/index.js +0 -3
- package/dist/waveparticles/plugin.js +0 -290
- package/dist/wind/imagetovectorfieldandmagnitude.js +0 -56
- package/dist/wind/index.js +0 -5
- package/dist/wind/plugin.js +0 -921
- package/dist/wind/vectorfieldimage.js +0 -23
- package/dist/write-text/attached-text-writer.js +0 -87
- package/dist/write-text/context-text.js +0 -94
- package/dist/write-text/context-text3old.js +0 -152
- package/dist/write-text/index.js +0 -1
- package/dist/write-text/writer-plugin.js +0 -8
- package/partialrings/goals.md +0 -17
- package/point-heat-map/readme.md +0 -15
- package/programs/line-on-globe/linestrip/data.ts +0 -29
- package/programs/line-on-globe/linestrip/linestrip.ts +0 -201
- package/programs/line-on-globe/naive-accurate-flexible.ts +0 -258
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.ts +0 -120
- package/programs/polygon-on-globe/texture-dem-triangles.ts +0 -207
- package/programs/programcache.ts +0 -131
- package/programs/rings/partial-ring/piece-of-pie.ts +0 -323
- package/programs/totems/camerauniformblock.ts +0 -310
- package/programs/totems/canvas-webglobe-info.ts +0 -156
- package/programs/totems/globe-changes.ts +0 -79
- package/programs/totems/index.ts +0 -2
- package/programs/vectorfields/logics/constants.ts +0 -5
- package/programs/vectorfields/logics/ubo-new.ts +0 -37
- package/publish.bat +0 -62
- package/range-tools-on-terrain/bearing-line/adapters.ts +0 -154
- package/range-tools-on-terrain/bearing-line/plugin.ts +0 -569
- package/range-tools-on-terrain/bearing-line/types.ts +0 -65
- package/range-tools-on-terrain/circle-line-chain/adapters.ts +0 -109
- package/range-tools-on-terrain/circle-line-chain/chain-list-map.ts +0 -446
- package/range-tools-on-terrain/circle-line-chain/plugin.ts +0 -607
- package/range-tools-on-terrain/circle-line-chain/types.ts +0 -43
- package/range-tools-on-terrain/range-ring/adapters.ts +0 -114
- package/range-tools-on-terrain/range-ring/enum.ts +0 -2
- package/range-tools-on-terrain/range-ring/plugin.ts +0 -447
- package/range-tools-on-terrain/range-ring/rangeringangletext.ts +0 -396
- package/range-tools-on-terrain/range-ring/types.ts +0 -30
- package/rangerings/enum.ts +0 -2
- package/semiplugins/interface.ts +0 -14
- package/semiplugins/lightweight/line-plugin.ts +0 -343
- package/semiplugins/lightweight/piece-of-pie-plugin.ts +0 -275
- package/semiplugins/shape-on-terrain/arc-plugin.ts +0 -602
- package/semiplugins/shape-on-terrain/circle-plugin.ts +0 -588
- package/semiplugins/shape-on-terrain/goal.md +0 -12
- package/semiplugins/shape-on-terrain/padding-1-degree.ts +0 -714
- package/semiplugins/shape-on-terrain/terrain-cover/notes.md +0 -90
- package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.ts +0 -0
- package/semiplugins/type.ts +0 -8
- package/tests/Math/arc-sampling-test.js +0 -367
- package/tests/Math/arc-sampling-test.ts +0 -429
- package/tests/Math/arc.test.ts +0 -102
- package/tests/Math/junction/arc-plane.test.ts +0 -163
- package/tests/Math/junction/plane-plane.test.ts +0 -91
- package/tests/Math/plane-test.ts +0 -17
- package/tests/Math/plane.test.ts +0 -43
- package/tests/Math/vec3.test.ts +0 -14
- package/timetracks/readme.md +0 -1
- package/tsconfig.json +0 -22
- package/types.ts +0 -265
- package/util/account/create-buffermap-orchastration.ts +0 -85
- package/util/account/single-attribute-buffer-management/buffer-manager.ts +0 -149
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.ts +0 -332
- package/util/account/single-attribute-buffer-management/buffer-orchestrator1.ts +0 -184
- package/util/account/single-attribute-buffer-management/index.ts +0 -11
- package/util/account/single-attribute-buffer-management/object-store.ts +0 -76
- package/util/account/single-attribute-buffer-management/types.ts +0 -43
- package/util/build-strategy/general-strategy.ts +0 -99
- package/util/build-strategy/static-dynamic.ts +0 -50
- package/util/check/typecheck.ts +0 -74
- package/util/frame-counter-trigger.ts +0 -99
- package/util/geometry/index.ts +0 -64
- package/util/gl-util/buffer/attribute-loader.ts +0 -84
- package/util/gl-util/buffer/index.ts +0 -6
- package/util/gl-util/draw-options/methods.ts +0 -47
- package/util/gl-util/uniform-block/manager.ts +0 -210
- package/util/gl-util/uniform-block/roadmap.md +0 -70
- package/util/gl-util/uniform-block/types.ts +0 -20
- package/util/heatwavedatamanager/pointcoordsmeta.ts +0 -28
- package/util/heatwavedatamanager/texture-point-sampler.ts +0 -198
- package/util/shaderfunctions/geometrytransformations.ts +0 -388
- package/util/surface-line-data/arc-bboxes.ts +0 -42
- package/util/surface-line-data/flow.ts +0 -52
- package/util/surface-line-data/types.ts +0 -27
- package/util/webglobjectbuilders.ts +0 -446
- package/write-text/context-text-bulk.ts +0 -268
- package/write-text/context-text3.ts +0 -253
- package/write-text/context-text4.ts +0 -243
- /package/{dist/Math → Math}/arc-cdf-points.js +0 -0
- /package/{dist/Math → Math}/arc-generate-points-exponantial.js +0 -0
- /package/{dist/Math → Math}/arc.js +0 -0
- /package/{dist/Math → Math}/circle-cdf-points.js +0 -0
- /package/{dist/Math → Math}/circle.js +0 -0
- /package/{dist/Math → Math}/constants.js +0 -0
- /package/{dist/Math → Math}/juction/arc-plane.js +0 -0
- /package/{dist/Math → Math}/juction/line-sphere.js +0 -0
- /package/{dist/Math → Math}/juction/plane-plane.js +0 -0
- /package/{dist/Math → Math}/line.js +0 -0
- /package/{dist/Math → Math}/matrix4.js +0 -0
- /package/{dist/Math → Math}/methods.js +0 -0
- /package/{dist/Math → Math}/plane.js +0 -0
- /package/{dist/Math → Math}/quaternion.js +0 -0
- /package/{dist/Math → Math}/templete-shapes/grid-visually-equal.js +0 -0
- /package/{dist/Math → Math}/types.js +0 -0
- /package/{dist/Math → Math}/vec3.js +0 -0
- /package/{dist/programs → programs}/line-on-globe/linestrip/data.js +0 -0
- /package/{dist/programs → programs}/line-on-globe/linestrip/linestrip.js +0 -0
- /package/{dist/programs → programs}/line-on-globe/naive-accurate-flexible.js +0 -0
- /package/{dist/programs → programs}/polygon-on-globe/texture-dem-triangle-test-plugin.js +0 -0
- /package/{dist/programs → programs}/polygon-on-globe/texture-dem-triangles.js +0 -0
- /package/{dist/programs → programs}/programcache.js +0 -0
- /package/{dist/programs → programs}/rings/partial-ring/piece-of-pie.js +0 -0
- /package/{dist/programs → programs}/totems/canvas-webglobe-info.js +0 -0
- /package/{dist/programs → programs}/totems/globe-changes.js +0 -0
- /package/{dist/programs → programs}/totems/index.js +0 -0
- /package/{dist/programs → programs}/vectorfields/logics/constants.js +0 -0
- /package/{dist/programs → programs}/vectorfields/logics/ubo-new.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/bearing-line/adapters.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/bearing-line/plugin.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/bearing-line/types.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/circle-line-chain/adapters.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/circle-line-chain/chain-list-map.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/circle-line-chain/plugin.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/circle-line-chain/types.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/range-ring/adapters.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/range-ring/enum.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/range-ring/plugin.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/range-ring/rangeringangletext.js +0 -0
- /package/{dist/range-tools-on-terrain → range-tools-on-terrain}/range-ring/types.js +0 -0
- /package/{dist/rangerings → rangerings}/enum.js +0 -0
- /package/{dist/semiplugins → semiplugins}/interface.js +0 -0
- /package/{dist/semiplugins → semiplugins}/lightweight/line-plugin.js +0 -0
- /package/{dist/semiplugins → semiplugins}/lightweight/piece-of-pie-plugin.js +0 -0
- /package/{dist/semiplugins → semiplugins}/shape-on-terrain/arc-plugin.js +0 -0
- /package/{dist/semiplugins → semiplugins}/shape-on-terrain/circle-plugin.js +0 -0
- /package/{dist/semiplugins → semiplugins}/shape-on-terrain/padding-1-degree.js +0 -0
- /package/{dist/semiplugins → semiplugins}/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -0
- /package/{dist/semiplugins → semiplugins}/type.js +0 -0
- /package/{dist/types.js → types.js} +0 -0
- /package/{dist/util → util}/account/create-buffermap-orchastration.js +0 -0
- /package/{dist/util → util}/account/single-attribute-buffer-management/buffer-manager.js +0 -0
- /package/{dist/util → util}/account/single-attribute-buffer-management/buffer-orchestrator.js +0 -0
- /package/{dist/util → util}/account/single-attribute-buffer-management/buffer-orchestrator1.js +0 -0
- /package/{dist/util → util}/account/single-attribute-buffer-management/index.js +0 -0
- /package/{dist/util → util}/account/single-attribute-buffer-management/object-store.js +0 -0
- /package/{dist/util → util}/account/single-attribute-buffer-management/types.js +0 -0
- /package/{dist/util → util}/build-strategy/general-strategy.js +0 -0
- /package/{dist/util → util}/build-strategy/static-dynamic.js +0 -0
- /package/{dist/util → util}/check/typecheck.js +0 -0
- /package/{dist/util → util}/frame-counter-trigger.js +0 -0
- /package/{dist/util → util}/gl-util/buffer/attribute-loader.js +0 -0
- /package/{dist/util → util}/gl-util/buffer/index.js +0 -0
- /package/{dist/util → util}/gl-util/draw-options/methods.js +0 -0
- /package/{dist/util → util}/gl-util/uniform-block/manager.js +0 -0
- /package/{dist/util → util}/gl-util/uniform-block/types.js +0 -0
- /package/{dist/util → util}/heatwavedatamanager/pointcoordsmeta.js +0 -0
- /package/{dist/util → util}/heatwavedatamanager/texture-point-sampler.js +0 -0
- /package/{dist/util → util}/shaderfunctions/geometrytransformations.js +0 -0
- /package/{dist/util → util}/surface-line-data/arc-bboxes.js +0 -0
- /package/{dist/util → util}/surface-line-data/flow.js +0 -0
- /package/{dist/util → util}/surface-line-data/types.js +0 -0
- /package/{dist/util → util}/webglobjectbuilders.js +0 -0
- /package/{dist/write-text → write-text}/context-text3.js +0 -0
package/Math/arc.ts
DELETED
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
import { Vec3, Plane, Arc, LongLat, Radians } from "./types";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
create as vec3create,
|
|
5
|
-
set as vec3set,
|
|
6
|
-
cross,
|
|
7
|
-
dot,
|
|
8
|
-
normalize,
|
|
9
|
-
clone as vec3clone,
|
|
10
|
-
copy as vec3copy,
|
|
11
|
-
equals as vec3equals,
|
|
12
|
-
lengthSquared,
|
|
13
|
-
fromLongLatToUnitVector,
|
|
14
|
-
subtract,
|
|
15
|
-
applyQuaternion,
|
|
16
|
-
fromUnitVectorToLongLat
|
|
17
|
-
} from "./vec3";
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
create as planeCreate,
|
|
21
|
-
fromPoints as planeFromPoints,
|
|
22
|
-
distanceToPoint as planeDistanceToPoint,
|
|
23
|
-
projectPoint as planeProjectPoint
|
|
24
|
-
} from "./plane";
|
|
25
|
-
|
|
26
|
-
import { create as quaternionCreate, fromAxisAngle } from "./quaternion";
|
|
27
|
-
|
|
28
|
-
import { EPSILON } from "./constants";
|
|
29
|
-
|
|
30
|
-
import * as vec3 from "./vec3";
|
|
31
|
-
import * as quat from "./quaternion";
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const _0vector = /*@__PURE__*/ vec3create(0, 0, 0);
|
|
35
|
-
const _closestPoint = /*@__PURE__*/ vec3create();
|
|
36
|
-
|
|
37
|
-
const _originPlane = /*@__PURE__*/ planeCreate(vec3create(0, 0, 1), 0);
|
|
38
|
-
// dont change distance of _originPlane
|
|
39
|
-
const _rotationQuaternion = /*@__PURE__*/ quaternionCreate();
|
|
40
|
-
const _longLat = /*@__PURE__*/[0, 0] as LongLat;
|
|
41
|
-
|
|
42
|
-
function create(p0: Vec3, p1: Vec3): Arc {
|
|
43
|
-
const normal = vec3create(0, 0, 0);
|
|
44
|
-
cross(normal, p0, p1);
|
|
45
|
-
normalize(normal, normal);
|
|
46
|
-
const coverPlaneNormal = vec3create(p0[0] + p1[0], p0[1] + p1[1], p0[2] + p1[2]);
|
|
47
|
-
|
|
48
|
-
let distance: number;
|
|
49
|
-
const ls = lengthSquared(coverPlaneNormal);
|
|
50
|
-
|
|
51
|
-
if (ls > EPSILON) {
|
|
52
|
-
normalize(coverPlaneNormal, coverPlaneNormal);
|
|
53
|
-
distance = dot(coverPlaneNormal, p0);
|
|
54
|
-
} else {
|
|
55
|
-
// Handle opposite points case
|
|
56
|
-
const tempPlane = planeCreate(vec3create(), 0);
|
|
57
|
-
_oppositePointsHandle(p0, p1, normal, tempPlane);
|
|
58
|
-
vec3copy(coverPlaneNormal, tempPlane.normal);
|
|
59
|
-
distance = tempPlane.distance;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
p0: vec3clone(p0),
|
|
64
|
-
p1: vec3clone(p1),
|
|
65
|
-
normal: vec3clone(normal),
|
|
66
|
-
coverPlane: {
|
|
67
|
-
normal: coverPlaneNormal,
|
|
68
|
-
distance: distance
|
|
69
|
-
} as Plane,
|
|
70
|
-
coverAngle: Math.acos(dot(p0, p1)) as Radians
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function set(out: Arc, p0: Vec3, p1: Vec3) {
|
|
75
|
-
vec3copy(out.p0, p0);
|
|
76
|
-
vec3copy(out.p1, p1);
|
|
77
|
-
cross(out.normal, p0, p1);
|
|
78
|
-
vec3set(_0vector, p0[0] + p1[0], p0[1] + p1[1], p0[2] + p1[2]);
|
|
79
|
-
const ls = lengthSquared(_0vector);
|
|
80
|
-
if (ls > EPSILON) {
|
|
81
|
-
normalize(out.coverPlane.normal, _0vector);
|
|
82
|
-
out.coverPlane.distance = dot(out.coverPlane.normal, p0);
|
|
83
|
-
} else {
|
|
84
|
-
_oppositePointsHandle(p0, p1, out.normal, out.coverPlane);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function copy(out: Arc, a: Arc) {
|
|
89
|
-
vec3copy(out.p0, a.p0);
|
|
90
|
-
vec3copy(out.p1, a.p1);
|
|
91
|
-
vec3copy(out.normal, a.normal);
|
|
92
|
-
out.coverPlane.normal = vec3clone(a.coverPlane.normal);
|
|
93
|
-
out.coverPlane.distance = a.coverPlane.distance;
|
|
94
|
-
out.coverAngle = a.coverAngle; // Copy coverAngle if it exists
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function clone(a: Arc): Arc {
|
|
98
|
-
return {
|
|
99
|
-
p0: vec3clone(a.p0),
|
|
100
|
-
p1: vec3clone(a.p1),
|
|
101
|
-
normal: vec3clone(a.normal),
|
|
102
|
-
coverPlane: {
|
|
103
|
-
normal: vec3clone(a.coverPlane.normal),
|
|
104
|
-
distance: a.coverPlane.distance
|
|
105
|
-
} as Plane,
|
|
106
|
-
coverAngle: a.coverAngle // Clone coverAngle if it exists
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
function isPointOn(arc: Arc, point: Vec3): boolean {
|
|
113
|
-
const alignment = Math.abs(dot(point, arc.normal)) < EPSILON;
|
|
114
|
-
const distance = Math.abs(lengthSquared(point) - 1) < EPSILON;
|
|
115
|
-
const cover = dot(arc.coverPlane.normal, point) >= arc.coverPlane.distance;
|
|
116
|
-
return alignment || distance || cover;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
function equals(a: Arc, b: Arc): boolean {
|
|
121
|
-
return (vec3equals(a.p0, b.p0) && vec3equals(a.p1, b.p1))
|
|
122
|
-
|| (vec3equals(a.p0, b.p1) && vec3equals(a.p1, b.p0))
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
function closestPoint(out: Vec3, inArc: Arc, point: Vec3): boolean {
|
|
128
|
-
// 1. calculate the projection of the point onto the plane definned by the arc.normal, distance 0
|
|
129
|
-
// 2. calculate projection distance to the arc.coverPlane.
|
|
130
|
-
// * if the distance is negative, the point is outside the arc
|
|
131
|
-
// * copy (the closest of [inArc.p0, inArc.p1] to the point) to the output
|
|
132
|
-
// * return false that indicates the point is outside the arc
|
|
133
|
-
// * if the distance is positive, the point is inside the arc
|
|
134
|
-
// * normalize the projection and copy it to out
|
|
135
|
-
// * return true that indicates the point is inside the arc
|
|
136
|
-
const distance = planeDistanceToPoint(inArc.coverPlane, point);
|
|
137
|
-
if (distance < -EPSILON) {
|
|
138
|
-
// point is outside the arc
|
|
139
|
-
// this case also covers point is on center shaft line of the arc
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
vec3copy(_originPlane.normal, inArc.normal);
|
|
144
|
-
planeProjectPoint(_0vector, _originPlane, point);
|
|
145
|
-
// point is inside the arc
|
|
146
|
-
normalize(out, _0vector);
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
function populatePoints(out: Float32Array, arc: Arc, count: number, pointOfProjection: Vec3 | void = undefined): void {
|
|
152
|
-
// rotate p0 around normal vector with a quaternion
|
|
153
|
-
// calculate angle
|
|
154
|
-
_distanceSampling(out, count, arc, pointOfProjection || [0, 0, 0] as Vec3, 1);
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
function _oppositePointsHandle(p0: Vec3, p1: Vec3, outNormal: Vec3, outCoverPlane: Plane) {
|
|
162
|
-
// first choice pass through Anitkabir
|
|
163
|
-
const radians = Math.PI / 180;
|
|
164
|
-
fromLongLatToUnitVector(_0vector, [39.9334 * radians, 32.8597 * radians] as LongLat); // Anitkabir
|
|
165
|
-
if (vec3equals(p0, _0vector) || vec3equals(p1, _0vector)) {
|
|
166
|
-
// if Anitkabir is too close to p0 or p1, use Selanic
|
|
167
|
-
fromLongLatToUnitVector(_0vector, [37.0016 * radians, 35.3213 * radians] as LongLat); // Selanic
|
|
168
|
-
}
|
|
169
|
-
planeFromPoints({ normal: outNormal, distance: 0 } as Plane, p0, _0vector, p1);
|
|
170
|
-
|
|
171
|
-
cross(outCoverPlane.normal, outNormal, p0);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
function _populatePointsWithClosestPointInsideArc(
|
|
178
|
-
out: Float32Array,
|
|
179
|
-
arc: Arc,
|
|
180
|
-
count: number,
|
|
181
|
-
closestPoint: Vec3
|
|
182
|
-
): void {
|
|
183
|
-
|
|
184
|
-
// two parts divided by closest point will be populated seperately
|
|
185
|
-
// pop1 + pop2 = count
|
|
186
|
-
|
|
187
|
-
// angular distance between [arc.p0, closestPoint] and [arc.p1, closestPoint]
|
|
188
|
-
// will be used to decide ratio between pop1 and pop2
|
|
189
|
-
const angleP0 = Math.acos(dot(arc.p0, closestPoint));
|
|
190
|
-
const angleP1 = Math.acos(dot(arc.p1, closestPoint));
|
|
191
|
-
|
|
192
|
-
const pop1 = Math.floor(count * (angleP0 / (angleP0 + angleP1)));
|
|
193
|
-
const pop2 = count - pop1;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const angleStep1 = angleP0 / pop1;
|
|
197
|
-
const angleStep2 = angleP1 / pop2;
|
|
198
|
-
|
|
199
|
-
fromAxisAngle(_rotationQuaternion, arc.normal, angleStep1);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Samples points along an arc with density biased by the camera's distance,
|
|
209
|
-
* reusing the rotation quaternion to improve performance.
|
|
210
|
-
*
|
|
211
|
-
* @param {Float32Array} out - The output array to store longitude and latitude pairs.
|
|
212
|
-
* @param {number} count - The total number of points to sample.
|
|
213
|
-
* @param {Arc} inArc - The arc to sample from, containing p0, p1, and normal.
|
|
214
|
-
* @param {Vec3} cameraPosition - The position of the camera.
|
|
215
|
-
* @param {number} quaternionReuseCount - The number of times to apply the same rotation before recalculating. Higher is faster but less accurate.
|
|
216
|
-
*/
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
function _distanceSampling(
|
|
222
|
-
out: Float32Array,
|
|
223
|
-
count: number,
|
|
224
|
-
inArc: Arc,
|
|
225
|
-
cameraPosition: Vec3 = vec3create(0, 0, 0),
|
|
226
|
-
quaternionReuseCount: number = 1,
|
|
227
|
-
): void {
|
|
228
|
-
if (count === 0) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const _0vector = vec3.create();
|
|
233
|
-
const _longLat = [0, 0] as LongLat;
|
|
234
|
-
const _rotationQuaternion = quat.create();
|
|
235
|
-
|
|
236
|
-
// Ensure reuse count is at least 1 to prevent division by zero or infinite loops.
|
|
237
|
-
const reuseCount = Math.max(1, quaternionReuseCount);
|
|
238
|
-
|
|
239
|
-
subtract(_0vector, inArc.p0, cameraPosition);
|
|
240
|
-
const d2_0 = lengthSquared(_0vector);
|
|
241
|
-
subtract(_0vector, inArc.p1, cameraPosition);
|
|
242
|
-
const d2_1 = lengthSquared(_0vector);
|
|
243
|
-
|
|
244
|
-
const total = d2_0 + d2_1;
|
|
245
|
-
const ratio0 = Math.min(0.995, Math.max(0.005, d2_0 / total));
|
|
246
|
-
|
|
247
|
-
const is0Closer = d2_0 < d2_1;
|
|
248
|
-
|
|
249
|
-
const totalAngle = Math.acos(dot(inArc.p0, inArc.p1));
|
|
250
|
-
let accumulatedAngle = 0;
|
|
251
|
-
|
|
252
|
-
// This variable will hold the step angle for the current "chunk" of reused rotations.
|
|
253
|
-
let chunkStepAngle = 0;
|
|
254
|
-
|
|
255
|
-
let currentPoint = vec3.clone(is0Closer ? inArc.p0 : inArc.p1);
|
|
256
|
-
const angleSign = is0Closer ? 1 : -1;
|
|
257
|
-
|
|
258
|
-
// The loop generates all points *except* the very last one.
|
|
259
|
-
for (let i = 0; i < count - 1; i++) {
|
|
260
|
-
// First, store the longitude/latitude of the current point.
|
|
261
|
-
fromUnitVectorToLongLat(_longLat, currentPoint);
|
|
262
|
-
out[i * 2] = _longLat[0];
|
|
263
|
-
out[i * 2 + 1] = _longLat[1];
|
|
264
|
-
|
|
265
|
-
// --- OPTIMIZATION LOGIC ---
|
|
266
|
-
// We only update the quaternion and step angle periodically.
|
|
267
|
-
if (i % reuseCount === 0) {
|
|
268
|
-
// This is the start of a new chunk. Calculate the step angle that will be
|
|
269
|
-
// reused for the next `reuseCount` iterations.
|
|
270
|
-
const t = (i + 1) / (count - 1);
|
|
271
|
-
const biasedT = Math.sin(t * Math.PI / 2);
|
|
272
|
-
const targetAngleForNextStep = (is0Closer ? biasedT : 1.0 - biasedT) * totalAngle;
|
|
273
|
-
|
|
274
|
-
// Calculate the single step angle based on the progress at the start of the chunk.
|
|
275
|
-
chunkStepAngle = targetAngleForNextStep - accumulatedAngle;
|
|
276
|
-
|
|
277
|
-
// Update the quaternion. This expensive call now runs much less frequently.
|
|
278
|
-
fromAxisAngle(_rotationQuaternion, inArc.normal, chunkStepAngle * angleSign);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// Apply the rotation. This happens on every iteration, but uses the
|
|
282
|
-
// same quaternion for `reuseCount` steps.
|
|
283
|
-
applyQuaternion(currentPoint, currentPoint, _rotationQuaternion);
|
|
284
|
-
|
|
285
|
-
// We must still update the accumulated angle on every step to track our progress.
|
|
286
|
-
accumulatedAngle += chunkStepAngle;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// Set the final point directly to the endpoint to guarantee precision.
|
|
290
|
-
if (count > 0) {
|
|
291
|
-
const finalIndex = count - 1;
|
|
292
|
-
const endPoint = is0Closer ? inArc.p1 : inArc.p0;
|
|
293
|
-
fromUnitVectorToLongLat(_longLat, endPoint);
|
|
294
|
-
out[finalIndex * 2] = _longLat[0];
|
|
295
|
-
out[finalIndex * 2 + 1] = _longLat[1];
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export { create, set, copy, clone, isPointOn, equals, closestPoint, populatePoints };
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { Globe, CentigradeDegree } from "../types";
|
|
2
|
-
import { RADIANS } from "./methods";
|
|
3
|
-
import { Meter } from "./types";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
function createCummulativeTemplate(
|
|
8
|
-
numberOfPoints: number,
|
|
9
|
-
strength: number,
|
|
10
|
-
denseRatio: number = 0.5 // Ratio of points to be densely packed at the start.
|
|
11
|
-
|
|
12
|
-
): Float64Array {
|
|
13
|
-
// Handle edge cases for the number of points.
|
|
14
|
-
if (numberOfPoints <= 0) {
|
|
15
|
-
// If zero or a negative number of points is requested, return an empty array.
|
|
16
|
-
return new Float64Array([]);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Create the array to hold the results. Float64Array is used for high-precision floating-point numbers.
|
|
20
|
-
const distribution = new Float64Array(numberOfPoints);
|
|
21
|
-
|
|
22
|
-
if (numberOfPoints === 1) {
|
|
23
|
-
// If only one point is requested, it represents the entire range [0, 1].
|
|
24
|
-
// We place it at the start (0.0).
|
|
25
|
-
distribution[0] = 0.0;
|
|
26
|
-
return distribution;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// The exponent determines the curve of the distribution.
|
|
30
|
-
// We add 1 to the strength so that a strength of 0 results in an exponent of 1 (linear).
|
|
31
|
-
// We use Math.max(0, strength) to ensure the strength is not negative.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// The last index is used to normalize the position to a 0-1 range.
|
|
35
|
-
const lastIndex = numberOfPoints - 1;
|
|
36
|
-
distribution[0] = 0.0; // The first point is always at 0.0.
|
|
37
|
-
let totalWeight = 0;
|
|
38
|
-
let i = 1
|
|
39
|
-
const denseCount = numberOfPoints * denseRatio;
|
|
40
|
-
for (i; i < denseCount; i++) {
|
|
41
|
-
// Calculate the ratio of the current index to the last index.
|
|
42
|
-
// The ratio is adjusted to create a non-linear distribution.
|
|
43
|
-
totalWeight += 1;
|
|
44
|
-
distribution[i] = totalWeight; // Store the raw value in the distribution array.
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
for (i; i < numberOfPoints; i++) {
|
|
48
|
-
// Calculate the ratio of the current index to the last index.
|
|
49
|
-
|
|
50
|
-
const ratio = 1 + ((i - denseCount) / lastIndex) / (1 - denseRatio) * 2;
|
|
51
|
-
const step = Math.pow(ratio, strength);
|
|
52
|
-
|
|
53
|
-
totalWeight += step;
|
|
54
|
-
distribution[i] = totalWeight; // Store the raw value in the distribution array.
|
|
55
|
-
|
|
56
|
-
// Apply the power function to create a non-linear distribution.
|
|
57
|
-
// The result is normalized to the range [0, 1].
|
|
58
|
-
}
|
|
59
|
-
for (let i = 1; i < numberOfPoints; i++) {
|
|
60
|
-
// Normalize the values to ensure they sum up to 1.
|
|
61
|
-
distribution[i] = distribution[i] / totalWeight;
|
|
62
|
-
}
|
|
63
|
-
return distribution;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
function createCummulativeTemplateStash(
|
|
69
|
-
levels: number,
|
|
70
|
-
numberOfPoints: number,
|
|
71
|
-
denseRatio: number = 0.5,
|
|
72
|
-
strengthMultiplier: number = 2.4,
|
|
73
|
-
): Float64Array[] {
|
|
74
|
-
const stash: Float64Array[] = [];
|
|
75
|
-
for (let i = 0; i < levels; i++) {
|
|
76
|
-
const template = createCummulativeTemplate(numberOfPoints, i * strengthMultiplier, denseRatio);
|
|
77
|
-
stash.push(template);
|
|
78
|
-
}
|
|
79
|
-
return stash;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function globeFindPointByPolar(
|
|
83
|
-
out: number[] | Float64Array,
|
|
84
|
-
globe: Globe,
|
|
85
|
-
centerLong: CentigradeDegree,
|
|
86
|
-
centerLat: CentigradeDegree,
|
|
87
|
-
radius: Meter,
|
|
88
|
-
ratios: number[]) {
|
|
89
|
-
for (let i = 0; i < ratios.length; i++) {
|
|
90
|
-
const point = globe.Math.FindPointByPolar(
|
|
91
|
-
centerLong,
|
|
92
|
-
centerLat,
|
|
93
|
-
radius,
|
|
94
|
-
ratios[i]
|
|
95
|
-
);
|
|
96
|
-
out[i * 2] = point.long;
|
|
97
|
-
out[i * 2 + 1] = point.lat;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function globeFindPointByPolarHalfCircle(
|
|
102
|
-
out: Float64Array,
|
|
103
|
-
globe: Globe,
|
|
104
|
-
centerLong: CentigradeDegree,
|
|
105
|
-
centerLat: CentigradeDegree,
|
|
106
|
-
radius: Meter,
|
|
107
|
-
rotation: number,
|
|
108
|
-
ratios: Float64Array) {
|
|
109
|
-
|
|
110
|
-
const rotCentigrade = rotation / RADIANS + 720;
|
|
111
|
-
for (let i = 0; i < ratios.length; i++) {
|
|
112
|
-
const point = globe.Math.FindPointByPolar(
|
|
113
|
-
centerLong,
|
|
114
|
-
centerLat,
|
|
115
|
-
radius,
|
|
116
|
-
(ratios[i] * 180 + rotCentigrade) % 360
|
|
117
|
-
);
|
|
118
|
-
out[i * 2] = point.long;
|
|
119
|
-
out[i * 2 + 1] = point.lat;
|
|
120
|
-
}
|
|
121
|
-
// fill reflection
|
|
122
|
-
let offset = out.length;
|
|
123
|
-
for (let i = 0; i < ratios.length - 1; i++) {
|
|
124
|
-
const point = globe.Math.FindPointByPolar(
|
|
125
|
-
centerLong,
|
|
126
|
-
centerLat,
|
|
127
|
-
radius,
|
|
128
|
-
((- ratios[i]) * 180 + rotCentigrade) % 360,
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
out[offset - 2] = point.long;
|
|
132
|
-
out[offset - 1] = point.lat;
|
|
133
|
-
offset -= 2;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
export {
|
|
140
|
-
createCummulativeTemplateStash,
|
|
141
|
-
globeFindPointByPolar,
|
|
142
|
-
globeFindPointByPolarHalfCircle
|
|
143
|
-
}
|
package/Math/circle.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Circle, CircleClosestAzimuthAngleProperties, LongLat, Plane, Vec3 } from '../Math/types.js';
|
|
2
|
-
import { RADIANS } from './methods';
|
|
3
|
-
import { subtract, normalize, dot, fromLongLatToUnitVector, copy, multiplyScalar, clone, add } from './vec3';
|
|
4
|
-
|
|
5
|
-
const _0vec3: Vec3 = [0, 0, 0];
|
|
6
|
-
|
|
7
|
-
function closestAzimuthAngle(
|
|
8
|
-
circleProperties: CircleClosestAzimuthAngleProperties,
|
|
9
|
-
point: Vec3
|
|
10
|
-
): number {
|
|
11
|
-
const distance = dot(circleProperties.normal, point);
|
|
12
|
-
copy(_0vec3, circleProperties.normal)
|
|
13
|
-
multiplyScalar(_0vec3, _0vec3, distance);
|
|
14
|
-
subtract(_0vec3, point, _0vec3);
|
|
15
|
-
normalize(_0vec3, _0vec3);
|
|
16
|
-
const N = circleProperties.northPointProjectedToOriginPlaneNormalized
|
|
17
|
-
const _dot = dot(_0vec3, N);
|
|
18
|
-
let angle = Math.acos(_dot);
|
|
19
|
-
const z = (_0vec3[0] * N[1] - _0vec3[1] * N[0]) * circleProperties.normal[2];
|
|
20
|
-
return z < 0 ? -angle : angle;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
function createCircleClosestAzimuthAngleProperties(
|
|
25
|
-
circle: Circle,
|
|
26
|
-
|
|
27
|
-
): CircleClosestAzimuthAngleProperties {
|
|
28
|
-
const normal: Vec3 = Array(3) as Vec3;
|
|
29
|
-
fromLongLatToUnitVector(normal,
|
|
30
|
-
[circle.center[0] * RADIANS, circle.center[1] * RADIANS]);
|
|
31
|
-
const N: Vec3 = clone(normal);
|
|
32
|
-
|
|
33
|
-
const distance = dot([0, 0, 1], normal);
|
|
34
|
-
multiplyScalar(N, N, distance);
|
|
35
|
-
// if (N[2] >= 0) {
|
|
36
|
-
subtract(N, [0, 0, 1], N);
|
|
37
|
-
// } else {
|
|
38
|
-
// subtract(N, [0, 0, -1], N);
|
|
39
|
-
// }
|
|
40
|
-
normalize(N, N);
|
|
41
|
-
return {
|
|
42
|
-
normal: normal,
|
|
43
|
-
northPointProjectedToOriginPlaneNormalized: N,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
export { closestAzimuthAngle, createCircleClosestAzimuthAngleProperties };
|
package/Math/constants.ts
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { Vec3, Plane, Line, Sphere, Arc } from "../types";
|
|
2
|
-
import { EPSILON } from "../constants";
|
|
3
|
-
import {
|
|
4
|
-
create as vec3create,
|
|
5
|
-
copy as vec3copy,
|
|
6
|
-
dot,
|
|
7
|
-
distanceSquared,
|
|
8
|
-
} from "../vec3";
|
|
9
|
-
import { create as lineCreate, at as lineAt } from "../line";
|
|
10
|
-
import {
|
|
11
|
-
create as planeCreate,
|
|
12
|
-
distanceToPoint,
|
|
13
|
-
getUnitSphereRadiusAngle
|
|
14
|
-
} from "../plane";
|
|
15
|
-
import { copy as arcCopy, set as arcSet } from "../arc"
|
|
16
|
-
import { planePlaneJuction } from "./plane-plane";
|
|
17
|
-
import { lineSphereIntersection } from "./line-sphere";
|
|
18
|
-
|
|
19
|
-
const _intersectionLine = /*@__PURE__*/ lineCreate();
|
|
20
|
-
const _originPlane = /*@__PURE__*/ planeCreate();
|
|
21
|
-
_originPlane.distance = 0;
|
|
22
|
-
const _originSphere = /*@__PURE__*/ { center: vec3create(0, 0, 0), radius: 1 } as Sphere;
|
|
23
|
-
|
|
24
|
-
const _intersectionPoints: [Vec3, Vec3] = /*@__PURE__*/[vec3create(), vec3create()];
|
|
25
|
-
|
|
26
|
-
// TODO: out must be [Arc, Arc] there is a case where split into three arcs, visible by points or arcs but middle is not visible
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* @param out \
|
|
33
|
-
* @param inArc
|
|
34
|
-
* @param junctionPlane
|
|
35
|
-
* @returns number of arcs segments in the junction divided by the junction plane.
|
|
36
|
-
*/
|
|
37
|
-
export function arcSlice(out: [Arc, Arc], inArc: Arc, junctionPlane: Plane): number {
|
|
38
|
-
|
|
39
|
-
if (junctionPlane.distance < -1 + EPSILON) {
|
|
40
|
-
arcCopy(out[0], inArc);
|
|
41
|
-
return 1;
|
|
42
|
-
}
|
|
43
|
-
// arc coverPlane and junctionPlane intersection exist in the range of unit sphere
|
|
44
|
-
const coverRadiusAngle = getUnitSphereRadiusAngle(inArc.coverPlane);
|
|
45
|
-
const visibleRadiusAngle = getUnitSphereRadiusAngle(junctionPlane);
|
|
46
|
-
// TODO: RESEARCH efficient approach --
|
|
47
|
-
const angleBetween_Cover_Visible = Math.acos(dot(inArc.coverPlane.normal, junctionPlane.normal));
|
|
48
|
-
|
|
49
|
-
if (coverRadiusAngle + visibleRadiusAngle < angleBetween_Cover_Visible - EPSILON) { // case A: out of range
|
|
50
|
-
return 0; // No intersection
|
|
51
|
-
}
|
|
52
|
-
// ------------------------------------
|
|
53
|
-
|
|
54
|
-
// the case when the arc is completely covered by the juction plane
|
|
55
|
-
|
|
56
|
-
if (visibleRadiusAngle + EPSILON >= angleBetween_Cover_Visible + coverRadiusAngle) { // case B: fully visible
|
|
57
|
-
arcCopy(out[0], inArc);
|
|
58
|
-
return 1;
|
|
59
|
-
}
|
|
60
|
-
// plane-plane intersection line should be calculated for the rest of the calculations
|
|
61
|
-
|
|
62
|
-
vec3copy(_originPlane.normal, inArc.normal);
|
|
63
|
-
const isPlaneJunctions = planePlaneJuction(_intersectionLine, _originPlane, junctionPlane);
|
|
64
|
-
|
|
65
|
-
if (!isPlaneJunctions) { // case C: planes are parallel.
|
|
66
|
-
if (junctionPlane.distance <= 0) {
|
|
67
|
-
arcCopy(out[0], inArc);
|
|
68
|
-
return 1; // No intersection
|
|
69
|
-
} else {
|
|
70
|
-
return 0; // No intersection
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// --- read until here ---
|
|
74
|
-
|
|
75
|
-
// calculate the intersection points
|
|
76
|
-
|
|
77
|
-
const isSphereIntersection = lineSphereIntersection(_intersectionPoints, _intersectionLine, _originSphere);
|
|
78
|
-
if (!isSphereIntersection) {
|
|
79
|
-
// other edge caes should be covered by now
|
|
80
|
-
return 0; // No intersection
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const i0IsCovered = distanceToPoint(inArc.coverPlane, _intersectionPoints[0]) > -EPSILON;
|
|
85
|
-
const i1IsCovered = distanceToPoint(inArc.coverPlane, _intersectionPoints[1]) > -EPSILON;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const p0IsVisible = distanceToPoint(junctionPlane, inArc.p0) > -EPSILON;
|
|
89
|
-
const p1IsVisible = distanceToPoint(junctionPlane, inArc.p1) > -EPSILON;
|
|
90
|
-
|
|
91
|
-
if (!p0IsVisible && !p1IsVisible && !i0IsCovered && !i1IsCovered) {
|
|
92
|
-
return 0; // No intersection
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (i0IsCovered && i1IsCovered && p0IsVisible && p1IsVisible) {
|
|
96
|
-
// calculate which points are closer
|
|
97
|
-
const p0i0DistanceSquared = distanceSquared(inArc.p0, _intersectionPoints[0]);
|
|
98
|
-
const p0i1DistanceSquared = distanceSquared(inArc.p0, _intersectionPoints[1]);
|
|
99
|
-
const case0 = p0i0DistanceSquared < p0i1DistanceSquared;
|
|
100
|
-
arcSet(out[0], inArc.p0, case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
|
|
101
|
-
arcSet(out[1], inArc.p1, !case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
|
|
102
|
-
return 2;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (i0IsCovered && i1IsCovered) {
|
|
107
|
-
arcSet(out[0], _intersectionPoints[0], _intersectionPoints[1]);
|
|
108
|
-
return 1;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if (p0IsVisible && p1IsVisible) {
|
|
113
|
-
arcCopy(out[0], inArc);
|
|
114
|
-
return 1;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if ((p0IsVisible || p1IsVisible) !== (i0IsCovered || i1IsCovered)) {
|
|
118
|
-
throw new Error("Unexpected case: one covered and one visible point must be present");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
arcSet(
|
|
122
|
-
out[0],
|
|
123
|
-
p0IsVisible ? inArc.p0 : inArc.p1,
|
|
124
|
-
i0IsCovered ? _intersectionPoints[0] : _intersectionPoints[1]
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
return 1;
|
|
128
|
-
}
|
|
129
|
-
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Vec3, Line, Sphere } from "../types";
|
|
2
|
-
|
|
3
|
-
import { create, dot, lengthSquared, subtract } from "../vec3";
|
|
4
|
-
import { at } from "../line";
|
|
5
|
-
|
|
6
|
-
const _0vector = /*@__PURE__*/ create(0, 0, 0);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export function lineSphereIntersection(out: [Vec3, Vec3], inLine: Line, inSphere: Sphere): boolean {
|
|
10
|
-
|
|
11
|
-
subtract(_0vector, inLine.origin, inSphere.center);
|
|
12
|
-
const distanceSquared = lengthSquared(_0vector);
|
|
13
|
-
const radiusSquared = inSphere.radius * inSphere.radius;
|
|
14
|
-
const dot_ = dot(_0vector, inLine.direction);
|
|
15
|
-
const dotSquared = dot_ * dot_;
|
|
16
|
-
|
|
17
|
-
const discriminant = dotSquared + radiusSquared - distanceSquared;
|
|
18
|
-
if (discriminant < 0) {
|
|
19
|
-
return false; // no intersection
|
|
20
|
-
} else {
|
|
21
|
-
const a = Math.sqrt(discriminant);
|
|
22
|
-
const t1 = -dot_ - a;
|
|
23
|
-
const t2 = -dot_ + a;
|
|
24
|
-
|
|
25
|
-
at(out[0], inLine, t1);
|
|
26
|
-
at(out[1], inLine, t2);
|
|
27
|
-
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
}
|