@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/types.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
type Radians = number;
|
|
2
|
-
type Degrees = number;
|
|
3
|
-
type Meter = number;
|
|
4
|
-
type Fraction = number; // between 0 and 1
|
|
5
|
-
type WGS84 = [number, number]; // [longitude, latitude]
|
|
6
|
-
type Vec2 = [number, number]; // [x, y] or [longitude, latitude] in Mercator projection
|
|
7
|
-
type Vec3 = [number, number, number];
|
|
8
|
-
type Vec4 = [number, number, number, number];
|
|
9
|
-
|
|
10
|
-
type Line = {
|
|
11
|
-
origin: Vec3;
|
|
12
|
-
direction: Vec3;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
type Plane = {
|
|
18
|
-
normal: Vec3;
|
|
19
|
-
distance: number;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
type LongLat = [number, number]; // [longitude, latitude]
|
|
23
|
-
|
|
24
|
-
type Quaternion = [number, number, number, number];
|
|
25
|
-
|
|
26
|
-
type Arc = {
|
|
27
|
-
p0: Vec3;
|
|
28
|
-
p1: Vec3;
|
|
29
|
-
normal: Vec3;
|
|
30
|
-
coverPlane: Plane;
|
|
31
|
-
coverAngle?: Radians;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
type Sphere = {
|
|
35
|
-
center: Vec3;
|
|
36
|
-
radius: number;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
type Circle = {
|
|
40
|
-
center: LongLat;
|
|
41
|
-
radius: Meter; // in meters
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
type CircleClosestAzimuthAngleProperties = {
|
|
45
|
-
normal: Vec3;
|
|
46
|
-
northPointProjectedToOriginPlaneNormalized: Vec3;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export {
|
|
50
|
-
Vec2,
|
|
51
|
-
Vec3,
|
|
52
|
-
Vec4,
|
|
53
|
-
Line,
|
|
54
|
-
Plane,
|
|
55
|
-
Quaternion,
|
|
56
|
-
Fraction,
|
|
57
|
-
WGS84,
|
|
58
|
-
Arc,
|
|
59
|
-
Sphere,
|
|
60
|
-
Radians,
|
|
61
|
-
Degrees,
|
|
62
|
-
Meter,
|
|
63
|
-
LongLat,
|
|
64
|
-
Circle,
|
|
65
|
-
CircleClosestAzimuthAngleProperties
|
|
66
|
-
}
|
package/Math/vec3.ts
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { Vec3, LongLat, Quaternion } from './types';
|
|
2
|
-
import { EPSILON } from './constants';
|
|
3
|
-
|
|
4
|
-
function create(x = 0, y = 0, z = 1): Vec3 {
|
|
5
|
-
return [x, y, z];
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function set(out: Vec3, x: number, y: number, z: number) {
|
|
9
|
-
out[0] = x;
|
|
10
|
-
out[1] = y;
|
|
11
|
-
out[2] = z;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function clone(a: Vec3): Vec3 {
|
|
15
|
-
return [a[0], a[1], a[2]];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function copy(out: Vec3, a: Vec3): Vec3 {
|
|
19
|
-
out[0] = a[0];
|
|
20
|
-
out[1] = a[1];
|
|
21
|
-
out[2] = a[2];
|
|
22
|
-
return out;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function add(out: Vec3, a: Vec3, b: Vec3): Vec3 {
|
|
26
|
-
out[0] = a[0] + b[0];
|
|
27
|
-
out[1] = a[1] + b[1];
|
|
28
|
-
out[2] = a[2] + b[2];
|
|
29
|
-
return out;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function subtract(out: Vec3, a: Vec3, b: Vec3) {
|
|
33
|
-
out[0] = a[0] - b[0];
|
|
34
|
-
out[1] = a[1] - b[1];
|
|
35
|
-
out[2] = a[2] - b[2];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function dot(a: Vec3, b: Vec3): number {
|
|
39
|
-
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function cross(out: Vec3, a: Vec3, b: Vec3) {
|
|
43
|
-
const x = a[1] * b[2] - a[2] * b[1];
|
|
44
|
-
const y = a[2] * b[0] - a[0] * b[2];
|
|
45
|
-
const z = a[0] * b[1] - a[1] * b[0];
|
|
46
|
-
out[0] = x;
|
|
47
|
-
out[1] = y;
|
|
48
|
-
out[2] = z;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
function multiplyScalar(out: Vec3, a: Vec3, b: number) {
|
|
53
|
-
out[0] = a[0] * b;
|
|
54
|
-
out[1] = a[1] * b;
|
|
55
|
-
out[2] = a[2] * b;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function divideScalar(out: Vec3, a: Vec3, b: number) {
|
|
59
|
-
if (b === 0) {
|
|
60
|
-
throw new Error('Division by zero');
|
|
61
|
-
}
|
|
62
|
-
out[0] = a[0] / b;
|
|
63
|
-
out[1] = a[1] / b;
|
|
64
|
-
out[2] = a[2] / b;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function lengthSquared(a: Vec3): number {
|
|
68
|
-
return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function length(a: Vec3): number {
|
|
72
|
-
return Math.sqrt(lengthSquared(a));
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function normalize(outVec: Vec3, inVec: Vec3): void {
|
|
76
|
-
const len = length(inVec);
|
|
77
|
-
if (len === 0) {
|
|
78
|
-
// console.warn('Cannot normalize a zero vector');
|
|
79
|
-
outVec[0] = 0;
|
|
80
|
-
outVec[1] = 0;
|
|
81
|
-
outVec[2] = 0;
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
outVec[0] = inVec[0] / len;
|
|
85
|
-
outVec[1] = inVec[1] / len;
|
|
86
|
-
outVec[2] = inVec[2] / len;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
function distanceSquared(a: Vec3, b: Vec3): number {
|
|
91
|
-
const dx = a[0] - b[0];
|
|
92
|
-
const dy = a[1] - b[1];
|
|
93
|
-
const dz = a[2] - b[2];
|
|
94
|
-
return dx * dx + dy * dy + dz * dz;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
function distance(a: Vec3, b: Vec3): number {
|
|
99
|
-
return Math.sqrt(distanceSquared(a, b));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function equals(a: Vec3, b: Vec3): boolean {
|
|
103
|
-
return (
|
|
104
|
-
Math.abs(a[0] - b[0]) < EPSILON &&
|
|
105
|
-
Math.abs(a[1] - b[1]) < EPSILON &&
|
|
106
|
-
Math.abs(a[2] - b[2]) < EPSILON
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
function fromUnitVectorToLongLat(out: LongLat, a: Vec3) {
|
|
112
|
-
const len = length(a);
|
|
113
|
-
if (len === 0) {
|
|
114
|
-
throw new Error('Cannot convert a zero vector to unit vector');
|
|
115
|
-
}
|
|
116
|
-
out[0] = Math.atan2(a[1], a[0]); // Longitude
|
|
117
|
-
out[1] = Math.asin(a[2] / len); // Latitude
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function fromLongLatToUnitVector(out: Vec3, longLat: LongLat) {
|
|
121
|
-
const longitude = longLat[0];
|
|
122
|
-
const latitude = longLat[1];
|
|
123
|
-
const cosLat = Math.cos(latitude);
|
|
124
|
-
out[0] = cosLat * Math.cos(longitude);
|
|
125
|
-
out[1] = cosLat * Math.sin(longitude);
|
|
126
|
-
out[2] = Math.sin(latitude);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function applyQuaternion(out: Vec3, a: Vec3, q: Quaternion) {
|
|
130
|
-
const x = a[0], y = a[1], z = a[2];
|
|
131
|
-
const qx = q[0], qy = q[1], qz = q[2], qw = q[3];
|
|
132
|
-
// Calculate the quaternion multiplication
|
|
133
|
-
const ix = qw * x + qy * z - qz * y;
|
|
134
|
-
const iy = qw * y + qz * x - qx * z;
|
|
135
|
-
const iz = qw * z + qx * y - qy * x;
|
|
136
|
-
const iw = -qx * x - qy * y - qz * z;
|
|
137
|
-
// Apply the quaternion to the vector
|
|
138
|
-
out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
|
|
139
|
-
out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
|
|
140
|
-
out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
function randomUnit(out: Vec3) {
|
|
145
|
-
const theta = Math.random() * 2 * Math.PI;
|
|
146
|
-
const phi = Math.acos(2 * Math.random() - 1);
|
|
147
|
-
out[0] = Math.sin(phi) * Math.cos(theta);
|
|
148
|
-
out[1] = Math.sin(phi) * Math.sin(theta);
|
|
149
|
-
out[2] = Math.cos(phi);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
function str(a: Vec3): string {
|
|
154
|
-
return `Vec3(${a[0].toFixed(2)}, ${a[1].toFixed(2)}, ${a[2].toFixed(2)})`;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
export {
|
|
159
|
-
create,
|
|
160
|
-
set,
|
|
161
|
-
clone,
|
|
162
|
-
copy,
|
|
163
|
-
add,
|
|
164
|
-
subtract,
|
|
165
|
-
dot,
|
|
166
|
-
cross,
|
|
167
|
-
multiplyScalar,
|
|
168
|
-
divideScalar,
|
|
169
|
-
lengthSquared,
|
|
170
|
-
length,
|
|
171
|
-
normalize,
|
|
172
|
-
distanceSquared,
|
|
173
|
-
distance,
|
|
174
|
-
equals,
|
|
175
|
-
fromUnitVectorToLongLat,
|
|
176
|
-
fromLongLatToUnitVector,
|
|
177
|
-
applyQuaternion,
|
|
178
|
-
randomUnit,
|
|
179
|
-
str
|
|
180
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# Road Map
|
|
2
|
-
|
|
3
|
-
## CircleLine
|
|
4
|
-
Atomic unit is the circle-line constructed from a circle and a line with start and end point which indicates the radius.
|
|
5
|
-
|
|
6
|
-
### Attributes
|
|
7
|
-
Main attributes: StartPoint, EndPoint, Radius
|
|
8
|
-
Other attributes: Color, opacity, dash opacity, dash ratio
|
|
9
|
-
|
|
10
|
-
### API
|
|
11
|
-
API is the manipulation of above attributes
|
|
12
|
-
|
|
13
|
-
### Implementation
|
|
14
|
-
|
|
15
|
-
Buffer Orchestrater is enough.
|
|
16
|
-
|
|
17
|
-
## ChainOfCircleLines
|
|
18
|
-
Composit unit is a chain of circle-lines.
|
|
19
|
-
|
|
20
|
-
### Attributes
|
|
21
|
-
|
|
22
|
-
Main attributes: one to many relation of a chain and its circle-lines
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# API
|
|
26
|
-
- startChain(chainID) //
|
|
27
|
-
- addPointToChain(chainID)
|
|
28
|
-
- editPointOfChain(chainID, pointID) //
|
|
29
|
-
- divideChain(chainID, )
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# Concept Formation
|
|
34
|
-
|
|
35
|
-
Circle-Line has ( startPoint, endPoint )
|
|
36
|
-
|
|
37
|
-
Chain Has [...circle-line] -> [ c0, c1, c2 ...] -> c0.endPoint == c1.startPoint, c1.endPoint == c2.startPoint
|
|
38
|
-
|
|
39
|
-
## Modes
|
|
40
|
-
|
|
41
|
-
Focus Mod
|
|
42
|
-
- mouse icon hides and edge point icon is displayed
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## interaction points ( this can be a new module)
|
|
46
|
-
changes the mouse icon
|
|
47
|
-
plugin creates them.
|
|
48
|
-
interaction points carryin carries information about how to interact with the plugin.
|
|
49
|
-
|
|
50
|
-
- On Edges
|
|
51
|
-
Updates coordinates on right click and carry
|
|
52
|
-
deletes on right
|
|
53
|
-
- on mid point of a radius line (+)
|
|
54
|
-
Addes an edge to mid points. ( deletes the old one and inserts 2)
|
|
55
|
-
|
|
56
|
-
UserInterface
|
|
57
|
-
- drawNewMethod
|
package/depth-locator/readme.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Programs
|
|
2
|
-
|
|
3
|
-
1) points with depth (3d/2d), draw to framebuffer and use this until projection or data changes, has picking
|
|
4
|
-
2) glow hearth-beat effect points on the target point
|
|
5
|
-
3) glow plane effect on surface projection of target point
|
|
6
|
-
4) a line from the target point to the surface
|
|
7
|
-
5) info box on the target point
|
|
8
|
-
|
|
9
|
-
all except 1 are optional
|
|
10
|
-
|
|
11
|
-
# Inputs
|
|
12
|
-
|
|
13
|
-
1) Target point ( long, lat, depth in meter)
|
|
14
|
-
2) info box content
|
|
15
|
-
|
|
16
|
-
# Derived Cases
|
|
17
|
-
|
|
18
|
-
## Time dimension
|
|
19
|
-
|
|
20
|
-
Either:
|
|
21
|
-
1) load all points at once ordered by time. Draw range of points
|
|
22
|
-
2) Select points on time window and load them. Draw them
|
|
23
|
-
|
|
24
|
-
Approach 1 is simple yet it needs time series as input.
|
|
25
|
-
Approach 2 flexible, memory efficient. Client side is complex.
|
|
26
|
-
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
function bearingRealAngle(long, lat, endLong, endLat) {
|
|
2
|
-
const rLong = Radians * long;
|
|
3
|
-
const rLat = Radians * lat;
|
|
4
|
-
const rEndLong = Radians * endLong;
|
|
5
|
-
const rEndLat = Radians * endLat;
|
|
6
|
-
const delta_long = rEndLong - rLong;
|
|
7
|
-
const x = Math.sin(delta_long) * Math.cos(rEndLat);
|
|
8
|
-
const y = Math.cos(rLat) * Math.sin(rEndLat) - Math.sin(rLat) * Math.cos(rEndLat) * Math.cos(delta_long);
|
|
9
|
-
let initialBearing = Math.atan2(x, y) / Radians;
|
|
10
|
-
initialBearing = (initialBearing + 360) % 360;
|
|
11
|
-
return initialBearing;
|
|
12
|
-
}
|
|
13
|
-
export { bearingRealAngle };
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
function isClose(a, b, rtol = 1e-5, atol = 1e-8) {
|
|
2
|
-
// JavaScript equivalent of NumPy's isclose
|
|
3
|
-
return Math.abs(a - b) <= (atol + rtol * Math.abs(b));
|
|
4
|
-
}
|
|
5
|
-
function mod(n, m) {
|
|
6
|
-
// Proper modulo operation that handles negative numbers
|
|
7
|
-
return ((n % m) + m) % m;
|
|
8
|
-
}
|
|
9
|
-
function calculateInitialBearing(phi1, lambda1, phi2, lambda2) {
|
|
10
|
-
// Calculates the initial bearing (forward azimuth) from point 1 to point 2
|
|
11
|
-
if (isClose(Math.cos(phi1), 0)) { // Starting from a pole
|
|
12
|
-
if (phi1 > 0) { // North pole
|
|
13
|
-
return Math.PI; // Bearing is South
|
|
14
|
-
}
|
|
15
|
-
else { // South pole
|
|
16
|
-
return 0; // Bearing is North
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
const deltaLambda = lambda2 - lambda1;
|
|
20
|
-
const y = Math.sin(deltaLambda) * Math.cos(phi2);
|
|
21
|
-
const x = Math.cos(phi1) * Math.sin(phi2) - Math.sin(phi1) * Math.cos(phi2) * Math.cos(deltaLambda);
|
|
22
|
-
const theta = Math.atan2(y, x);
|
|
23
|
-
return theta;
|
|
24
|
-
}
|
|
25
|
-
function getGreatCircleArcBBox(phi1Rad, lambda1Rad, phi2Rad, lambda2Rad) {
|
|
26
|
-
// Calculates the bounding box around the great circle arc between two points
|
|
27
|
-
// on a spherical surface, handling edge cases like poles and antimeridian crossing.
|
|
28
|
-
// Args: Latitudes and longitudes in radians
|
|
29
|
-
// Returns: [phiMin, phiMax, lambdaMin, lambdaMax] in radians
|
|
30
|
-
// === Edge Case: Same Points ===
|
|
31
|
-
if (isClose(phi1Rad, phi2Rad) && isClose(lambda1Rad, lambda2Rad)) {
|
|
32
|
-
return [phi1Rad, phi1Rad, lambda1Rad, lambda1Rad];
|
|
33
|
-
}
|
|
34
|
-
// === Edge Case: Antipodal Points ===
|
|
35
|
-
const deltaLambdaNorm = mod(lambda1Rad - lambda2Rad + Math.PI, 2 * Math.PI) - Math.PI;
|
|
36
|
-
if (isClose(phi1Rad, -phi2Rad) && isClose(Math.abs(deltaLambdaNorm), Math.PI)) {
|
|
37
|
-
// Path covers all longitudes and passes through poles
|
|
38
|
-
return [-Math.PI / 2, Math.PI / 2, -Math.PI, Math.PI];
|
|
39
|
-
}
|
|
40
|
-
// === Longitude Bounds ===
|
|
41
|
-
let lambda1Adj = lambda1Rad;
|
|
42
|
-
let lambda2Adj = lambda2Rad;
|
|
43
|
-
// Handle antimeridian crossing
|
|
44
|
-
let deltaLambda = lambda2Rad - lambda1Rad;
|
|
45
|
-
if (deltaLambda > Math.PI) {
|
|
46
|
-
deltaLambda -= 2 * Math.PI;
|
|
47
|
-
}
|
|
48
|
-
else if (deltaLambda <= -Math.PI) {
|
|
49
|
-
deltaLambda += 2 * Math.PI;
|
|
50
|
-
}
|
|
51
|
-
const crossesAntimeridian = Math.abs(lambda2Rad - lambda1Rad) > Math.PI;
|
|
52
|
-
if (crossesAntimeridian) {
|
|
53
|
-
// Add 2*pi to the smaller longitude
|
|
54
|
-
if (lambda1Rad < lambda2Rad) {
|
|
55
|
-
lambda1Adj += 2 * Math.PI;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
lambda2Adj += 2 * Math.PI;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
const lambdaMin = Math.min(lambda1Adj, lambda2Adj);
|
|
62
|
-
const lambdaMax = Math.max(lambda1Adj, lambda2Adj);
|
|
63
|
-
// === Latitude Bounds ===
|
|
64
|
-
let phiMin = Math.min(phi1Rad, phi2Rad);
|
|
65
|
-
let phiMax = Math.max(phi1Rad, phi2Rad);
|
|
66
|
-
// === Vertex Check ===
|
|
67
|
-
// Check the maximum/minimum latitude reached by the great circle
|
|
68
|
-
const theta12 = calculateInitialBearing(phi1Rad, lambda1Rad, phi2Rad, lambda2Rad);
|
|
69
|
-
const theta21 = calculateInitialBearing(phi2Rad, lambda2Rad, phi1Rad, lambda1Rad);
|
|
70
|
-
const cosPhi1 = Math.cos(phi1Rad);
|
|
71
|
-
if (!isClose(cosPhi1, 0)) { // Starting point is not a pole
|
|
72
|
-
// Compute the absolute latitude of the vertex
|
|
73
|
-
const argAcos = Math.abs(Math.sin(theta12) * cosPhi1);
|
|
74
|
-
const phiVtxAbs = Math.acos(Math.min(Math.max(argAcos, -1.0), 1.0));
|
|
75
|
-
// Check if the path crosses the northern vertex
|
|
76
|
-
if (isClose(theta12, 0) && phiVtxAbs > phiMax) { // Starting due north
|
|
77
|
-
phiMax = phiVtxAbs;
|
|
78
|
-
}
|
|
79
|
-
else if (isClose(Math.abs(theta12), Math.PI) && -phiVtxAbs < phiMin) { // Starting due south
|
|
80
|
-
phiMin = -phiVtxAbs;
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
// General case: Check if the path crosses the vertex
|
|
84
|
-
const finalBearingAtP2 = mod(theta21 + Math.PI + Math.PI, 2 * Math.PI) - Math.PI;
|
|
85
|
-
// Northern vertex check
|
|
86
|
-
if ((-Math.PI / 2 < theta12 && theta12 < Math.PI / 2) &&
|
|
87
|
-
!(finalBearingAtP2 >= -Math.PI / 2 && finalBearingAtP2 <= Math.PI / 2)) {
|
|
88
|
-
if (phiVtxAbs > phiMax) {
|
|
89
|
-
phiMax = phiVtxAbs;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Southern vertex check
|
|
93
|
-
if (!(theta12 >= -Math.PI / 2 && theta12 <= Math.PI / 2) &&
|
|
94
|
-
(-Math.PI / 2 < finalBearingAtP2 && finalBearingAtP2 < Math.PI / 2)) {
|
|
95
|
-
if (-phiVtxAbs < phiMin) {
|
|
96
|
-
phiMin = -phiVtxAbs;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return [phiMin, phiMax, lambdaMin, lambdaMax];
|
|
102
|
-
}
|
|
103
|
-
// --- Example Usage ---
|
|
104
|
-
function degreesToRadians(deg) {
|
|
105
|
-
return deg * Math.PI / 180;
|
|
106
|
-
}
|
|
107
|
-
function radiansToDegrees(rad) {
|
|
108
|
-
return rad * 180 / Math.PI;
|
|
109
|
-
}
|
|
110
|
-
export { getGreatCircleArcBBox };
|
|
111
|
-
// Test Case 1: London to Tokyo
|
|
112
|
-
const lat1Deg = 51.5, lon1Deg = -0.1;
|
|
113
|
-
const lat2Deg = 35.7, lon2Deg = 139.7;
|
|
114
|
-
const phi1 = degreesToRadians(lat1Deg);
|
|
115
|
-
const lambda1 = degreesToRadians(lon1Deg);
|
|
116
|
-
const phi2 = degreesToRadians(lat2Deg);
|
|
117
|
-
const lambda2 = degreesToRadians(lon2Deg);
|
|
118
|
-
const [phiMinRad, phiMaxRad, lambdaMinRad, lambdaMaxRad] = getGreatCircleArcBBox(phi1, lambda1, phi2, lambda2);
|
|
119
|
-
const phiMinDeg = radiansToDegrees(phiMinRad);
|
|
120
|
-
const phiMaxDeg = radiansToDegrees(phiMaxRad);
|
|
121
|
-
const lambdaMinDeg = radiansToDegrees(lambdaMinRad);
|
|
122
|
-
const lambdaMaxDeg = radiansToDegrees(lambdaMaxRad);
|
|
123
|
-
console.log("Input Points (Radians):");
|
|
124
|
-
console.log(` P1: Latitude=${lat1Deg}, Longitude=${lon1Deg}`);
|
|
125
|
-
console.log(` P2: Latitude=${lat2Deg}, Longitude=${lon2Deg}`);
|
|
126
|
-
console.log(` P1: Latitude=${phi1.toFixed(4)}, Longitude=${lambda1.toFixed(4)}`);
|
|
127
|
-
console.log(` P2: Latitude=${phi2.toFixed(4)}, Longitude=${lambda2.toFixed(4)}`);
|
|
128
|
-
console.log("-".repeat(20));
|
|
129
|
-
console.log("Bounding Box (Radians):");
|
|
130
|
-
// console phys://console.log(` Minimum Latitude (phi_min): ${phiMinRad.toFixed(4)}`);
|
|
131
|
-
console.log(` Maximum Latitude (phi_max): ${phiMaxRad.toFixed(4)}`);
|
|
132
|
-
console.log(` Minimum Longitude (lambda_min): ${lambdaMinRad.toFixed(4)}`);
|
|
133
|
-
console.log(` Maximum Longitude (lambda_max): ${lambdaMaxRad.toFixed(4)}`);
|
|
134
|
-
console.log("-".repeat(20));
|
|
135
|
-
console.log("Bounding Box (Degrees):");
|
|
136
|
-
console.log(` Minimum Latitude: ${phiMinDeg.toFixed(2)}°`);
|
|
137
|
-
console.log(` Maximum Latitude: ${phiMaxDeg.toFixed(2)}°`);
|
|
138
|
-
console.log(` Minimum Longitude: ${lambdaMinDeg.toFixed(2)}°`);
|
|
139
|
-
console.log(` Maximum Longitude: ${lambdaMaxDeg.toFixed(2)}°`);
|
|
140
|
-
// --- Antimeridian Crossing Test ---
|
|
141
|
-
console.log("\n" + "=".repeat(30));
|
|
142
|
-
console.log("Antimeridian Crossing Test");
|
|
143
|
-
const lat1DegAm = -18, lon1DegAm = 178;
|
|
144
|
-
const lat2DegAm = -14, lon2DegAm = -172;
|
|
145
|
-
const phi1Am = degreesToRadians(lat1DegAm);
|
|
146
|
-
const lambda1Am = degreesToRadians(lon1DegAm);
|
|
147
|
-
const phi2Am = degreesToRadians(lat2DegAm);
|
|
148
|
-
const lambda2Am = degreesToRadians(lon2DegAm);
|
|
149
|
-
const [phiMinRadAm, phiMaxRadAm, lambdaMinRadAm, lambdaMaxRadAm] = getGreatCircleArcBBox(phi1Am, lambda1Am, phi2Am, lambda2Am);
|
|
150
|
-
const phiMinDegAm = radiansToDegrees(phiMinRadAm);
|
|
151
|
-
const phiMaxDegAm = radiansToDegrees(phiMaxRadAm);
|
|
152
|
-
const lambdaMinDegAm = radiansToDegrees(lambdaMinRadAm);
|
|
153
|
-
const lambdaMaxDegAm = radiansToDegrees(lambdaMaxRadAm);
|
|
154
|
-
console.log(`Input Points (Degrees): P1=(${lat1DegAm}, ${lon1DegAm}), P2=(${lat2DegAm}, ${lon2DegAm})`);
|
|
155
|
-
console.log("Bounding Box (Radians):");
|
|
156
|
-
console.log(` phi_min=${phiMinRadAm.toFixed(4)}, phi_max=${phiMaxRadAm.toFixed(4)}`);
|
|
157
|
-
console.log(` lambda_min=${lambdaMinRadAm.toFixed(4)}, lambda_max=${lambdaMaxRadAm.toFixed(4)}`);
|
|
158
|
-
console.log("Bounding Box (Degrees):");
|
|
159
|
-
console.log(` Min Latitude: ${phiMinDegAm.toFixed(2)}°`);
|
|
160
|
-
console.log(` Max Latitude: ${phiMaxDegAm.toFixed(2)}°`);
|
|
161
|
-
console.log(` Min Longitude: ${lambdaMinDegAm.toFixed(2)}° (178° expected)`);
|
|
162
|
-
console.log(` Max Longitude: ${lambdaMaxDegAm.toFixed(2)}° (188° expected, which is -172° + 360°)`);
|
|
163
|
-
// --- Polar Crossing Test ---
|
|
164
|
-
console.log("\n" + "=".repeat(30));
|
|
165
|
-
console.log("Polar Crossing Test");
|
|
166
|
-
const lat1DegP = 80, lon1DegP = 20;
|
|
167
|
-
const lat2DegP = 80, lon2DegP = -100;
|
|
168
|
-
const phi1P = degreesToRadians(lat1DegP);
|
|
169
|
-
const lambda1P = degreesToRadians(lon1DegP);
|
|
170
|
-
const phi2P = degreesToRadians(lat2DegP);
|
|
171
|
-
const lambda2P = degreesToRadians(lon2DegP);
|
|
172
|
-
const [phiMinRadP, phiMaxRadP, lambdaMinRadP, lambdaMaxRadP] = getGreatCircleArcBBox(phi1P, lambda1P, phi2P, lambda2P);
|
|
173
|
-
const phiMinDegP = radiansToDegrees(phiMinRadP);
|
|
174
|
-
const phiMaxDegP = radiansToDegrees(phiMaxRadP);
|
|
175
|
-
const lambdaMinDegP = radiansToDegrees(lambdaMinRadP);
|
|
176
|
-
const lambdaMaxDegP = radiansToDegrees(lambdaMaxRadP);
|
|
177
|
-
console.log(`Input Points (Degrees): P1=(${lat1DegP}, ${lon1DegP}), P2=(${lat2DegP}, ${lon2DegP})`);
|
|
178
|
-
console.log("Bounding Box (Radians):");
|
|
179
|
-
console.log(` phi_min=${phiMinRadP.toFixed(4)}, phi_max=${phiMaxRadP.toFixed(4)}`);
|
|
180
|
-
console.log(` lambda_min=${lambdaMinRadP.toFixed(4)}, lambda_max=${lambdaMaxRadP.toFixed(4)}`);
|
|
181
|
-
console.log("Bounding Box (Degrees):");
|
|
182
|
-
console.log(` Min Latitude: ${phiMinDegP.toFixed(2)}°`);
|
|
183
|
-
console.log(` Max Latitude: ${phiMaxDegP.toFixed(2)}° (Should be close to North Pole > 80°)`);
|
|
184
|
-
console.log(` Min Longitude: ${lambdaMinDegP.toFixed(2)}°`);
|
|
185
|
-
console.log(` Max Longitude: ${lambdaMaxDegP.toFixed(2)}°`);
|
|
186
|
-
// --- line points intersection with bbox ---
|
package/dist/Math/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|