@pirireis/webglobeplugins 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/Math/{angle-calculation.ts → angle-calculation.js} +14 -18
  2. package/Math/{arc-cdf-points.ts → arc-cdf-points.js} +272 -329
  3. package/Math/{arc-generate-points-exponantial.ts → arc-generate-points-exponantial.js} +254 -299
  4. package/Math/{arc.ts → arc.js} +292 -421
  5. package/Math/bounds/line-bbox.js +186 -225
  6. package/Math/{circle-cdf-points.ts → circle-cdf-points.js} +78 -143
  7. package/Math/{circle.ts → circle.js} +33 -49
  8. package/Math/{constants.ts → constants.js} +4 -12
  9. package/Math/contour/{quadtreecontours.ts → quadtreecontours.js} +300 -371
  10. package/Math/contour/quadtreecontours1.js +298 -336
  11. package/Math/{finite-line-2d.ts → finite-line-2d.js} +58 -68
  12. package/Math/{haversine.ts → haversine.js} +22 -33
  13. package/Math/index.js +1 -0
  14. package/Math/juction/{arc-plane.ts → arc-plane.js} +143 -203
  15. package/Math/juction/{line-sphere.ts → line-sphere.js} +22 -32
  16. package/Math/juction/{plane-plane.ts → plane-plane.js} +53 -62
  17. package/Math/{line.ts → line.js} +52 -84
  18. package/Math/matrix4.js +1 -0
  19. package/Math/{methods.ts → methods.js} +126 -182
  20. package/Math/{plane.ts → plane.js} +56 -92
  21. package/Math/{quaternion.ts → quaternion.js} +106 -128
  22. package/Math/templete-shapes/{grid-visually-equal.ts → grid-visually-equal.js} +65 -118
  23. package/Math/tessellation/constants.js +1 -0
  24. package/Math/tessellation/{methods.ts → methods.js} +49 -79
  25. package/Math/tessellation/{nearest-value-padding.ts → nearest-value-padding.js} +112 -147
  26. package/Math/tessellation/{spherical-triangle-area.ts → spherical-triangle-area.js} +99 -127
  27. package/Math/tessellation/{tile-merger.ts → tile-merger.js} +429 -578
  28. package/Math/tessellation/{triangle-tessellation.ts → triangle-tessellation.js} +386 -533
  29. package/Math/tessellation/types.js +1 -0
  30. package/Math/types.js +1 -0
  31. package/Math/utils.js +2 -3
  32. package/Math/{vec3.ts → vec3.js} +155 -227
  33. package/Math/{xyz-tile.ts → xyz-tile.js} +18 -26
  34. package/algorithms/search-binary.js +16 -14
  35. package/altitude-locator/adaptors.js +1 -0
  36. package/altitude-locator/keymethod.js +1 -0
  37. package/altitude-locator/plugin.js +344 -445
  38. package/altitude-locator/types.js +21 -26
  39. package/compass-rose/compass-rose-padding-flat.js +230 -274
  40. package/compass-rose/{compass-text-writer.ts → compass-text-writer.js} +155 -210
  41. package/compass-rose/index.js +3 -3
  42. package/{constants.ts → constants.js} +6 -8
  43. package/heatwave/datamanager.js +149 -168
  44. package/heatwave/heatwave.js +206 -261
  45. package/heatwave/index.js +5 -5
  46. package/heatwave/isobar.js +303 -340
  47. package/heatwave/{texture-point-sampler.ts → texture-point-sampler.js} +187 -220
  48. package/investigation-tools/draw/tiles/adapters.js +67 -0
  49. package/investigation-tools/draw/tiles/{tiles.ts → tiles.js} +128 -162
  50. package/jest.config.js +7 -6
  51. package/package.json +1 -1
  52. package/pin/pin-object-array1.js +300 -381
  53. package/pin/pin-point-totem1.js +60 -77
  54. package/programs/arrowfield/arrow-field.js +60 -89
  55. package/programs/arrowfield/logic.js +141 -173
  56. package/programs/data2legend/density-to-legend.js +68 -86
  57. package/programs/data2legend/point-to-density-texture.js +67 -84
  58. package/programs/float2legendwithratio/index.js +2 -3
  59. package/programs/float2legendwithratio/logic.js +118 -144
  60. package/programs/float2legendwithratio/object.js +104 -141
  61. package/programs/helpers/blender.js +58 -73
  62. package/programs/helpers/{fadeaway.ts → fadeaway.js} +60 -73
  63. package/programs/index.js +20 -19
  64. package/programs/line-on-globe/circle-accurate-3d.js +85 -112
  65. package/programs/line-on-globe/circle-accurate-flat.js +148 -200
  66. package/programs/line-on-globe/degree-padding-around-circle-3d.js +102 -134
  67. package/programs/line-on-globe/index.js +1 -0
  68. package/programs/line-on-globe/lines-color-instanced-flat.js +80 -99
  69. package/programs/line-on-globe/linestrip/data.js +4 -0
  70. package/programs/line-on-globe/linestrip/{linestrip.ts → linestrip.js} +93 -152
  71. package/programs/line-on-globe/{naive-accurate-flexible.ts → naive-accurate-flexible.js} +126 -175
  72. package/programs/line-on-globe/util.js +5 -8
  73. package/programs/picking/pickable-polygon-renderer.js +98 -129
  74. package/programs/picking/pickable-renderer.js +98 -130
  75. package/programs/point-on-globe/element-globe-surface-glow.js +93 -122
  76. package/programs/point-on-globe/element-point-glow.js +80 -114
  77. package/programs/point-on-globe/square-pixel-point.js +121 -139
  78. package/programs/polygon-on-globe/{texture-dem-triangles.ts → texture-dem-triangles.js} +163 -207
  79. package/programs/{programcache.ts → programcache.js} +126 -134
  80. package/programs/rings/index.js +1 -1
  81. package/programs/rings/partial-ring/{piece-of-pie.ts → piece-of-pie.js} +152 -222
  82. package/programs/totems/camera-totem-attactment-interface.js +1 -0
  83. package/programs/totems/{camerauniformblock.ts → camerauniformblock.js} +225 -310
  84. package/programs/totems/{canvas-webglobe-info.ts → canvas-webglobe-info.js} +132 -147
  85. package/programs/totems/{dem-textures-manager.ts → dem-textures-manager.js} +257 -360
  86. package/programs/totems/{globe-changes.ts → globe-changes.js} +59 -79
  87. package/programs/totems/gpu-selection-uniform-block.js +99 -127
  88. package/programs/totems/{index.ts → index.js} +2 -2
  89. package/programs/two-d/pixel-padding-for-compass.js +87 -101
  90. package/programs/util.js +14 -19
  91. package/programs/vectorfields/logics/{constants.ts → constants.js} +4 -5
  92. package/programs/vectorfields/logics/{drawrectangleparticles.ts → drawrectangleparticles.js} +80 -115
  93. package/programs/vectorfields/logics/index.js +2 -4
  94. package/programs/vectorfields/logics/particle-ubo.js +16 -0
  95. package/programs/vectorfields/logics/{pixelbased.ts → pixelbased.js} +86 -115
  96. package/programs/vectorfields/logics/ubo.js +51 -57
  97. package/programs/vectorfields/{pingpongbuffermanager.ts → pingpongbuffermanager.js} +99 -113
  98. package/range-tools-on-terrain/bearing-line/{adapters.ts → adapters.js} +114 -154
  99. package/range-tools-on-terrain/bearing-line/{plugin.ts → plugin.js} +457 -569
  100. package/range-tools-on-terrain/bearing-line/types.js +1 -0
  101. package/range-tools-on-terrain/circle-line-chain/{adapters.ts → adapters.js} +85 -104
  102. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.ts → chain-list-map.js} +382 -446
  103. package/range-tools-on-terrain/circle-line-chain/{plugin.ts → plugin.js} +464 -607
  104. package/range-tools-on-terrain/circle-line-chain/types.js +1 -0
  105. package/range-tools-on-terrain/range-ring/{adapters.ts → adapters.js} +93 -114
  106. package/range-tools-on-terrain/range-ring/{enum.ts → enum.js} +2 -2
  107. package/range-tools-on-terrain/range-ring/{plugin.ts → plugin.js} +377 -444
  108. package/range-tools-on-terrain/range-ring/rangeringangletext.js +331 -0
  109. package/range-tools-on-terrain/range-ring/types.js +9 -0
  110. package/semiplugins/interface.js +1 -0
  111. package/semiplugins/lightweight/{line-plugin.ts → line-plugin.js} +221 -342
  112. package/semiplugins/lightweight/{piece-of-pie-plugin.ts → piece-of-pie-plugin.js} +200 -275
  113. package/semiplugins/shape-on-terrain/{arc-plugin.ts → arc-plugin.js} +481 -616
  114. package/semiplugins/shape-on-terrain/{circle-plugin.ts → circle-plugin.js} +444 -588
  115. package/semiplugins/shape-on-terrain/{padding-1-degree.ts → padding-1-degree.js} +539 -713
  116. package/semiplugins/shape-on-terrain/terrain-polygon/{adapters.ts → adapters.js} +55 -69
  117. package/semiplugins/shape-on-terrain/terrain-polygon/data/{cache.ts → cache.js} +102 -149
  118. package/semiplugins/shape-on-terrain/terrain-polygon/data/{index-polygon-map.ts → index-polygon-map.js} +45 -58
  119. package/semiplugins/shape-on-terrain/terrain-polygon/data/{manager.ts → manager.js} +4 -4
  120. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +177 -196
  121. package/semiplugins/shape-on-terrain/terrain-polygon/data/{polygon-to-triangles.ts → polygon-to-triangles.js} +100 -144
  122. package/semiplugins/shape-on-terrain/terrain-polygon/data/{random.ts → random.js} +121 -165
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.js +1 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/{worker-contact.ts → worker-contact.js} +63 -81
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +125 -146
  126. package/semiplugins/shape-on-terrain/terrain-polygon/{terrain-polygon.ts → terrain-polygon.js} +219 -265
  127. package/semiplugins/shape-on-terrain/terrain-polygon/types.js +8 -0
  128. package/semiplugins/shell/bbox-renderer/index.js +2 -0
  129. package/semiplugins/shell/bbox-renderer/{logic.ts → logic.js} +209 -273
  130. package/semiplugins/shell/bbox-renderer/object.js +75 -0
  131. package/semiplugins/type.js +1 -0
  132. package/semiplugins/utility/{container-plugin.ts → container-plugin.js} +94 -126
  133. package/semiplugins/utility/{object-pass-container-plugin.ts → object-pass-container-plugin.js} +80 -101
  134. package/shaders/fragment-toy/firework.js +1 -1
  135. package/shaders/fragment-toy/singularity.js +2 -5
  136. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +63 -78
  137. package/tracks/point-heat-map/index.js +1 -0
  138. package/tracks/point-heat-map/plugin-webworker.js +121 -148
  139. package/tracks/point-heat-map/point-to-heat-map-flow.js +121 -150
  140. package/tracks/point-tracks/key-methods.js +2 -3
  141. package/tracks/point-tracks/plugin.js +401 -487
  142. package/tracks/timetracks/adaptors-line-strip.js +65 -79
  143. package/tracks/timetracks/plugin-line-strip.js +240 -295
  144. package/tracks/timetracks/program-line-strip.js +411 -495
  145. package/tracks/timetracks/programpoint-line-strip.js +109 -137
  146. package/types.js +19 -0
  147. package/util/account/bufferoffsetmanager.js +176 -209
  148. package/util/account/create-buffermap-orchastration.js +39 -0
  149. package/util/account/index.js +3 -6
  150. package/util/account/single-attribute-buffer-management/{buffer-manager.ts → buffer-manager.js} +119 -151
  151. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.ts → buffer-orchestrator.js} +212 -238
  152. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.ts → buffer-orchestrator1.js} +159 -184
  153. package/util/account/single-attribute-buffer-management/{index.ts → index.js} +4 -11
  154. package/util/account/single-attribute-buffer-management/{object-store.ts → object-store.js} +55 -76
  155. package/util/account/single-attribute-buffer-management/types.js +1 -0
  156. package/util/account/util.js +18 -22
  157. package/util/algorithms/index.js +1 -0
  158. package/util/algorithms/search-binary.js +25 -26
  159. package/util/build-strategy/{static-dynamic.ts → static-dynamic.js} +41 -50
  160. package/util/check/index.js +1 -0
  161. package/util/check/typecheck.js +66 -0
  162. package/util/{frame-counter-trigger.ts → frame-counter-trigger.js} +84 -99
  163. package/util/geometry/{index.ts → index.js} +121 -155
  164. package/util/gl-util/buffer/{attribute-loader.ts → attribute-loader.js} +62 -84
  165. package/util/gl-util/buffer/{index.ts → index.js} +3 -6
  166. package/util/gl-util/draw-options/{methods.ts → methods.js} +32 -47
  167. package/util/gl-util/uniform-block/{manager.ts → manager.js} +200 -232
  168. package/util/{globe-default-gl-states.ts → globe-default-gl-states.js} +4 -5
  169. package/util/{helper-methods.ts → helper-methods.js} +8 -9
  170. package/util/index.js +10 -9
  171. package/util/interpolation/index.js +1 -0
  172. package/util/interpolation/timetrack/index.js +2 -9
  173. package/util/interpolation/timetrack/timetrack-interpolator.js +79 -94
  174. package/util/interpolation/timetrack/web-worker.js +46 -51
  175. package/util/picking/{fence.ts → fence.js} +43 -47
  176. package/util/picking/{picker-displayer.ts → picker-displayer.js} +176 -226
  177. package/util/programs/draw-from-pixel-coords.js +164 -201
  178. package/util/programs/{draw-texture-on-canvas.ts → draw-texture-on-canvas.js} +69 -91
  179. package/util/programs/supersampletotextures.js +97 -130
  180. package/util/programs/texturetoglobe.js +128 -153
  181. package/util/shaderfunctions/{geometrytransformations.ts → geometrytransformations.js} +44 -106
  182. package/util/shaderfunctions/index.js +2 -2
  183. package/util/shaderfunctions/nodata.js +2 -4
  184. package/util/shaderfunctions/noisefunctions.js +7 -10
  185. package/util/{webglobjectbuilders.ts → webglobjectbuilders.js} +358 -446
  186. package/vectorfield/arrowfield/adaptor.js +11 -11
  187. package/vectorfield/arrowfield/index.js +3 -3
  188. package/vectorfield/arrowfield/plugin.js +83 -128
  189. package/vectorfield/waveparticles/adaptor.js +15 -16
  190. package/vectorfield/waveparticles/index.js +3 -3
  191. package/vectorfield/waveparticles/{plugin.ts → plugin.js} +415 -506
  192. package/vectorfield/wind/adapters/{image-to-fields.ts → image-to-fields.js} +61 -74
  193. package/vectorfield/wind/adapters/types.js +1 -0
  194. package/vectorfield/wind/{imagetovectorfieldandmagnitude.ts → imagetovectorfieldandmagnitude.js} +53 -78
  195. package/vectorfield/wind/index.js +5 -5
  196. package/vectorfield/wind/{plugin-persistant copy.ts → plugin-persistant copy.js } +364 -461
  197. package/vectorfield/wind/{plugin-persistant.ts → plugin-persistant.js} +375 -483
  198. package/vectorfield/wind/plugin.js +685 -883
  199. package/vectorfield/wind/vectorfieldimage.js +23 -27
  200. package/write-text/{context-text-bulk.ts → context-text-bulk.js} +200 -285
  201. package/write-text/context-text3.js +167 -0
  202. package/write-text/{context-text4.ts → context-text4.js} +146 -231
  203. package/write-text/context-textDELETE.js +94 -125
  204. package/write-text/objectarraylabels/{index.ts → index.js} +2 -2
  205. package/write-text/objectarraylabels/objectarraylabels.js +200 -247
  206. package/Math/matrix4.ts +0 -0
  207. package/Math/mesh/mapbox-delaunay.d.ts +0 -74
  208. package/Math/roadmap.md +0 -10
  209. package/Math/tessellation/constants.ts +0 -1
  210. package/Math/tessellation/roadmap.md +0 -48
  211. package/Math/tessellation/types.ts +0 -1
  212. package/Math/types.ts +0 -68
  213. package/investigation-tools/draw/tiles/adapters.ts +0 -133
  214. package/programs/line-on-globe/linestrip/data.ts +0 -29
  215. package/programs/polygon-on-globe/roadmap.md +0 -8
  216. package/programs/totems/camera-totem-attactment-interface.ts +0 -4
  217. package/programs/vectorfields/logics/particle-ubo.ts +0 -23
  218. package/publish.bat +0 -62
  219. package/range-tools-on-terrain/bearing-line/types.ts +0 -65
  220. package/range-tools-on-terrain/circle-line-chain/types.ts +0 -43
  221. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +0 -396
  222. package/range-tools-on-terrain/range-ring/types.ts +0 -30
  223. package/semiplugins/interface.ts +0 -14
  224. package/semiplugins/shape-on-terrain/goal.md +0 -12
  225. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +0 -20
  226. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +0 -209
  227. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +0 -5
  228. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +0 -37
  229. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +0 -90
  230. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +0 -69
  231. package/semiplugins/shell/bbox-renderer/index.ts +0 -2
  232. package/semiplugins/shell/bbox-renderer/object.ts +0 -129
  233. package/semiplugins/type.ts +0 -8
  234. package/terrain-plugin.mmd +0 -83
  235. package/tests/Math/arc-sampling-test.js +0 -367
  236. package/tests/Math/arc-sampling-test.ts +0 -429
  237. package/tests/Math/arc.test.ts +0 -77
  238. package/tests/Math/junction/arc-limit.test.ts +0 -7
  239. package/tests/Math/junction/arc-plane-points.test.ts +0 -196
  240. package/tests/Math/junction/arc-plane.test.ts +0 -172
  241. package/tests/Math/junction/line-sphere.test.ts +0 -127
  242. package/tests/Math/junction/plane-plane.test.ts +0 -91
  243. package/tests/Math/plane-test.ts +0 -17
  244. package/tests/Math/plane.test.ts +0 -43
  245. package/tests/Math/vec3.test.ts +0 -33
  246. package/tracks/point-heat-map/readme.md +0 -15
  247. package/tracks/timetracks/readme.md +0 -1
  248. package/tsconfig.json +0 -22
  249. package/types/@pirireis/webglobe.d.ts +0 -102
  250. package/types/delaunator.d.ts +0 -40
  251. package/types/earcut.d.ts +0 -11
  252. package/types/rbush.d.ts +0 -57
  253. package/types.ts +0 -319
  254. package/util/account/create-buffermap-orchastration.ts +0 -85
  255. package/util/account/single-attribute-buffer-management/types.ts +0 -43
  256. package/util/check/typecheck.ts +0 -74
  257. package/vectorfield/wind/adapters/types.ts +0 -12
  258. package/write-text/context-text3.ts +0 -252
  259. package/write-text/objectarraylabels/objectarraylabels.d.ts +0 -72
@@ -1,196 +0,0 @@
1
- import { Plane, Arc, Vec3, Sphere, Quaternion } from '../../../Math/types';
2
- import * as plane from '../../../Math/plane';
3
- import * as arc from '../../../Math/arc';
4
- import * as vec3 from '../../../Math/vec3';
5
- import * as quateernion from '../../../Math/quaternion';
6
- import { pointsOnArc } from '../../../Math/juction/arc-plane';
7
- import { EPSILON } from '../../../Math/constants';
8
-
9
- describe('pointsOnArc', () => {
10
- const inArc = arc.create(vec3.create(1, 0, 0), vec3.create(0, 1, 0));
11
- const junctionPlane = plane.create(vec3.create(0, 0, 1), 0);
12
- const outPoints: [Vec3, Vec3] = [vec3.create(), vec3.create()];
13
-
14
- beforeEach(() => {
15
- // Reset arc and plane before each test
16
- arc.set(inArc, vec3.create(1, 0, 0), vec3.create(0, 1, 0)); // 90-degree arc on XY plane
17
- plane.set(junctionPlane, vec3.create(0, 0, 1), 0); // XY plane
18
- vec3.set(outPoints[0], 0, 0, 0);
19
- vec3.set(outPoints[1], 0, 0, 0);
20
- });
21
-
22
- test('should return 0 if junction plane is too far', () => {
23
- plane.set(junctionPlane, vec3.create(0, 0, 1), 1.1);
24
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
25
- expect(count).toBe(0);
26
- });
27
-
28
- test('should return 0 if junction plane is too far (negative distance)', () => {
29
- plane.set(junctionPlane, vec3.create(0, 0, 1), -1.1);
30
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
31
- expect(count).toBe(0);
32
- });
33
-
34
- test('should return 0 if planes are parallel and distinct', () => {
35
- plane.set(junctionPlane, vec3.create(0, 0, 1), 0.5); // Plane parallel to the arc's plane
36
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
37
- expect(count).toBe(0);
38
- });
39
-
40
- test('should return 1 point for a tangent junction plane at an arc endpoint', () => {
41
- plane.set(junctionPlane, vec3.create(1, 0, 0), 1); // Tangent at (1,0,0)
42
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
43
- expect(count).toBe(1);
44
- expect(vec3.equals(outPoints[0], vec3.create(1, 0, 0))).toBe(true);
45
- });
46
-
47
- test('should return 2 intersection points when arc endpoints are the intersection points', () => {
48
- const r2 = Math.sqrt(2) / 2;
49
- plane.set(junctionPlane, vec3.create(r2, r2, 0), r2); // Plane whose intersection with the unit sphere includes the arc endpoints
50
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
51
- expect(count).toBe(2);
52
- const p0Found = vec3.equals(outPoints[0], inArc.p0) || vec3.equals(outPoints[1], inArc.p0);
53
- const p1Found = vec3.equals(outPoints[0], inArc.p1) || vec3.equals(outPoints[1], inArc.p1);
54
- expect(p0Found).toBe(true);
55
- expect(p1Found).toBe(true);
56
- });
57
-
58
- test('should return 2 intersection points for a 90-degree arc', () => {
59
- arc.set(inArc, vec3.create(1, 0, 0), vec3.create(0, 1, 0)); // 90-degree arc on XY plane
60
- const r2 = Math.sqrt(2) / 2;
61
- plane.set(junctionPlane, vec3.create(r2, -r2, 0), 0); // Plane intersecting at (r2, r2, 0) and (-r2, -r2, 0)
62
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
63
- expect(count).toBe(1);
64
- expect(vec3.equals(outPoints[0], vec3.create(r2, r2, 0))).toBe(true);
65
- });
66
-
67
- test('should return 1 intersection point if only one is on the arc', () => {
68
- const r2 = Math.sqrt(2) / 2;
69
- arc.set(inArc, vec3.create(1, 0, 0), vec3.create(r2, r2, 0)); // 45-degree arc
70
- plane.set(junctionPlane, vec3.create(0, 1, 0), 0); // XZ plane, intersects circle at (1,0,0) and (-1,0,0)
71
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
72
- expect(count).toBe(1);
73
- expect(vec3.equals(outPoints[0], vec3.create(1, 0, 0))).toBe(true);
74
- });
75
-
76
- test('should return 1 if intersection point is on the arc segment', () => {
77
- const r2 = Math.sqrt(2) / 2;
78
- arc.set(inArc, vec3.create(r2, r2, 0), vec3.create(-r2, r2, 0)); // Arc in the upper XY quadrant
79
- plane.set(junctionPlane, vec3.create(1, 0, 0), 0); // YZ plane, intersects circle at (0,1,0) and (0,-1,0)
80
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
81
- expect(count).toBe(1);
82
- expect(vec3.equals(outPoints[0], vec3.create(0, 1, 0))).toBe(true);
83
- });
84
-
85
- test('should return 1 intersection point when plane cuts through middle of 90-degree arc', () => {
86
- const r2 = Math.sqrt(2) / 2;
87
- arc.set(inArc, vec3.create(1, 0, 0), vec3.create(0, 1, 0)); // 90-degree arc
88
- plane.set(junctionPlane, vec3.create(1, -1, 0), 0); // Plane intersecting at (r2, r2, 0) and (-r2, -r2, 0)
89
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
90
- expect(count).toBe(1);
91
- const expectedPoint = vec3.create(r2, r2, 0);
92
- expect(vec3.equals(outPoints[0], expectedPoint)).toBe(true);
93
- });
94
-
95
- test('long 10 lat 10, long -10 lat 10, cut from 0 long meridian', () => {
96
- const r2 = Math.sqrt(2) / 2;
97
-
98
- const long10lat10 = vec3.create()
99
- const long_10lat10 = vec3.create()
100
- vec3.fromLongLatToUnitVector(long10lat10,[10 * Math.PI / 180, 10 * Math.PI / 180]);
101
- vec3.fromLongLatToUnitVector(long_10lat10,[-10 * Math.PI / 180, 10 * Math.PI / 180]);
102
- arc.set(inArc, long10lat10, long_10lat10); // Arc in the upper XY quadrant
103
-
104
- plane.set(junctionPlane, vec3.createUnitVectorFromLongLat([Math.PI/2,0]),0); // YZ plane, intersects circle at (1,0,0) and (-1,0,0)
105
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
106
- expect(count).toBe(1);
107
-
108
- // calculate expected point with quaternion rotation. rotate long10Lat10 by half the angle between the two arc endpoints
109
- const angle = Math.acos(vec3.dot(long10lat10, long_10lat10));
110
- const halfAngle = angle / 2;
111
- const axis = vec3.clone(inArc.normal);
112
-
113
- const q1 = quateernion.create();
114
- quateernion.fromAxisAngle(q1, axis, halfAngle);
115
- const expectedPoint = vec3.create();
116
- vec3.applyQuaternion(expectedPoint, long10lat10, q1);
117
- const isEqual = vec3.equals(outPoints[0], expectedPoint);
118
- if ( !isEqual ) {
119
- console.log('angle', long10lat10, long_10lat10, angle);
120
- console.log('outPoints[0]', outPoints[0]);
121
- console.log('expectedPoint', expectedPoint);
122
- }
123
- expect(isEqual).toBe(true);
124
- });
125
-
126
- test('should return 1 point for arc from (10,10) to (10,-10) long/lat, cut by lat 0 plane', () => {
127
- const deg2rad = Math.PI / 180;
128
- const p0 = vec3.create();
129
- const p1 = vec3.create();
130
- vec3.fromLongLatToUnitVector(p0, [10 * deg2rad, 10 * deg2rad]);
131
- vec3.fromLongLatToUnitVector(p1, [10 * deg2rad, -10 * deg2rad]);
132
- arc.set(inArc, p0, p1);
133
-
134
- // Equatorial plane (lat 0)
135
- plane.set(junctionPlane, vec3.create(0, 0, 1), 0);
136
-
137
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
138
- expect(count).toBe(1);
139
-
140
- const expectedPoint = vec3.create();
141
- vec3.fromLongLatToUnitVector(expectedPoint, [10 * deg2rad, 0 * deg2rad]);
142
-
143
- const isEqual = vec3.equals(outPoints[0], expectedPoint);
144
- if (!isEqual) {
145
- console.log('outPoints[0]', outPoints[0]);
146
- console.log('expectedPoint', expectedPoint);
147
- }
148
- expect(isEqual).toBe(true);
149
- });
150
-
151
-
152
- test('should return 1 point for arc from (10,10) to (0,-10) long/lat, cut by lat 0 plane', () => {
153
- const deg2rad = Math.PI / 180;
154
- const p0 = vec3.create();
155
- const p1 = vec3.create();
156
- vec3.fromLongLatToUnitVector(p0, [10 * deg2rad, 10 * deg2rad]);
157
- vec3.fromLongLatToUnitVector(p1, [0 * deg2rad, -10 * deg2rad]);
158
- arc.set(inArc, p0, p1);
159
-
160
- // Equatorial plane (lat 0)
161
- plane.set(junctionPlane, vec3.create(0, 0, 1), 0);
162
-
163
- const count = pointsOnArc(inArc, junctionPlane, outPoints);
164
- expect(count).toBe(1);
165
-
166
- // The intersection point must lie on the great circle defined by p0 and p1,
167
- // and also on the equator (z=0).
168
- // The line of intersection of the two great circle planes is given by the cross product of their normals.
169
- const arcNormal = vec3.clone(inArc.normal);
170
- const equatorNormal = vec3.create(0, 0, 1);
171
- const intersectionDir = vec3.create();
172
- vec3.cross(intersectionDir, arcNormal, equatorNormal);
173
- vec3.normalize(intersectionDir, intersectionDir);
174
-
175
- // The two intersection points are intersectionDir and -intersectionDir.
176
- // We need to find which one is on the arc.
177
- // The correct point should have a positive dot product with both p0 and p1.
178
- const dot0 = vec3.dot(intersectionDir, p0);
179
- const intersectionDirNeg = vec3.clone(intersectionDir);
180
- vec3.negate(intersectionDirNeg);
181
- const dot1 = vec3.dot(intersectionDirNeg, p0);
182
-
183
- const expectedPoint = dot0 > dot1 ? intersectionDir : intersectionDirNeg;
184
-
185
- const isEqual = vec3.equals(outPoints[0], expectedPoint);
186
- if (!isEqual) {
187
- console.log('outPoints[0]', outPoints[0]);
188
- console.log('expectedPoint', expectedPoint);
189
- }
190
- expect(isEqual).toBe(true);
191
- });
192
-
193
- });
194
-
195
-
196
-
@@ -1,172 +0,0 @@
1
- import { Plane, Line, Vec3, Quaternion, Arc, Sphere } from '../../../Math/types';
2
- import * as plane from '../../../Math/plane';
3
- import * as line from '../../../Math/line';
4
- import * as arc from '../../../Math/arc';
5
- import * as vec3 from '../../../Math/vec3';
6
- import * as quaternion from '../../../Math/quaternion';
7
- import { planePlaneJunction } from '../../../Math/juction/plane-plane';
8
- import { lineSphereIntersection } from '../../../Math/juction/line-sphere';
9
- import { arcSlice } from '../../../Math/juction/arc-plane';
10
- import { EPSILON } from '../../../Math/constants';
11
-
12
-
13
- const arcIn = arc.create(vec3.create(0, 0, 1), vec3.create(1, 0, 0));
14
- const arcOut: [Arc, Arc] = [
15
- arc.create(vec3.create(0, 0, 1), vec3.create(1, 0, 0)),
16
- arc.create(vec3.create(0, 0, 1), vec3.create(1, 0, 0))
17
- ];
18
- const arcExpected = arc.create(vec3.create(0, 0, 1), vec3.create(1, 0, 0));
19
- const junctionPlane = plane.create(vec3.create(0, 0, 1), 0);
20
-
21
- const origin = { center: vec3.create(0, 0, 0), radius: 1 } as Sphere;
22
-
23
- const r2 = Math.sqrt(2) / 2;
24
- const r3 = Math.sqrt(3) / 3;
25
-
26
- beforeAll(() => {
27
- // Initialize any necessary data or state before running the tests
28
- arc.set(arcIn, vec3.create(0, 0, 1), vec3.create(1, 0, 0));
29
- arc.set(arcOut[0], vec3.create(0, 0, 1), vec3.create(1, 0, 0));
30
- arc.set(arcOut[1], vec3.create(0, 0, 1), vec3.create(1, 0, 0));
31
-
32
- plane.set(junctionPlane, vec3.create(0, 0, 1), 0);
33
-
34
- });
35
-
36
-
37
-
38
-
39
-
40
- test('arcSlice - No intersection 1', () => {
41
- junctionPlane.distance = 2; // Set distance to ensure no intersection
42
- const result = arcSlice(arcOut, arcIn, junctionPlane);
43
- expect(result).toBe(0);
44
- });
45
-
46
-
47
-
48
- test('arcSlice - Full intersection 1', () => {
49
- junctionPlane.distance = 0; // Set distance to ensure full intersection
50
- const result = arcSlice(arcOut, arcIn, junctionPlane);
51
- expect(result).toBe(1);
52
- const isEqual = arc.equals(arcOut[0], arcExpected);
53
- expect(isEqual).toBe(true);
54
- });
55
-
56
-
57
- test('arcSlice-1', () => {
58
- // Set up a case where the arc intersects with the plane
59
-
60
-
61
- const r3 = Math.sqrt(3);
62
- const juctionNormal = vec3.create(r3, r3, r3);
63
-
64
- plane.set(junctionPlane, juctionNormal, 0);
65
-
66
- const result = arcSlice(arcOut, arcIn, junctionPlane);
67
- expect(result).toBe(1);
68
- });
69
-
70
-
71
- test('arcSlice - Plane intersection line is out of sphere', () => {
72
- // Set up a case where the arc intersects with the plane
73
-
74
- const point1 = vec3.create(0, 1, 0);
75
- const point2 = vec3.create(0, 0, 1);
76
- arc.set(arcIn, point1, point2);
77
-
78
- const juctionNormal = vec3.create(r3, r3, r3);
79
-
80
- const closestPoint = vec3.create(r2, r2, 0);
81
- const distance = vec3.dot(juctionNormal, closestPoint) + EPSILON;
82
- plane.set(junctionPlane, juctionNormal, distance);
83
-
84
- const result = arcSlice(arcOut, arcIn, junctionPlane);
85
- expect(result).toBe(0);
86
- });
87
-
88
-
89
- test("arcSlice - Planes are parallel", () => {
90
-
91
- const point1 = vec3.create(0, 1, 0);
92
- const point2 = vec3.create(0, 0, 1);
93
- arc.set(arcIn, point1, point2);
94
-
95
- plane.fromValues(junctionPlane, 1, 0, 0, 0.3); // Set a plane parallel to the arc's normal
96
- const result = arcSlice(arcOut, arcIn, junctionPlane);
97
- expect(result).toBe(0); // Expect no intersection
98
-
99
- junctionPlane.distance = -0.3;
100
-
101
- const result2 = arcSlice(arcOut, arcIn, junctionPlane);
102
- expect(result2).toBe(1); // Expect no intersection
103
- const isEqual = arc.equals(arcOut[0], arcIn);
104
- expect(isEqual).toBe(true); // Expect the output arc to be equal to the input arc
105
- });
106
-
107
-
108
- test("arcSlice - Arc sliced in half", () => {
109
-
110
- const point1 = vec3.create(0, 1, 0);
111
- const point2 = vec3.create(0, 0, 1);
112
- arc.set(arcIn, point1, point2);
113
-
114
- expect(vec3.equals(arcIn.normal, vec3.create(1, 0, 0))).toBe(true); // Arc normal should be (1, 0, 0)
115
-
116
- plane.fromValues(junctionPlane, 0, -r2, r2, 0); // Set a plane parallel to the arc's normal
117
-
118
- const result = arcSlice(arcOut, arcIn, junctionPlane);
119
- expect(result).toBe(1); // Expect an intersection
120
- const expectedPoint1 = vec3.create(0, r2, r2);
121
- const expectedPoint2 = vec3.create(0, 0, 1);
122
- arc.set(arcExpected, expectedPoint1, expectedPoint2);
123
- const isEqual = arc.equals(arcOut[0], arcExpected);
124
- expect(isEqual).toBe(true); // Expect the output arc to be equal to the expected arc
125
- });
126
-
127
-
128
- test("arcSlice - Arc sliced in middle", () => {
129
- const point1 = vec3.create(0, 1, 0);
130
- const point2 = vec3.create(0, 0, 1);
131
- arc.set(arcIn, point1, point2);
132
-
133
-
134
- plane.fromValues(junctionPlane, 0, r2, r2, r2);
135
-
136
- const result = arcSlice(arcOut, arcIn, junctionPlane);
137
- expect(result).toBe(1);
138
- expect(arc.equals(arcOut[0], arcIn)).toBe(true);
139
-
140
-
141
- const gap = 1 - r2;
142
- const stepCount = 100;
143
-
144
- const points: [Vec3, Vec3] = [vec3.create(0, 1, 0), vec3.create(0, 0, 1)];
145
- const lineOfPoints = line.create();
146
- vec3.set(lineOfPoints.direction, 0, -r2, r2);
147
- // Add normalization:
148
- vec3.normalize(lineOfPoints.direction, lineOfPoints.direction);
149
-
150
- for (let i = 0; i < stepCount - 1; i++) {
151
- const distance = gap * i / stepCount + r2;
152
- junctionPlane.distance = distance;
153
- const result = arcSlice(arcOut, arcIn, junctionPlane);
154
- expect(result).toBe(1);
155
-
156
- vec3.set(lineOfPoints.origin, 0, r2 * distance, r2 * distance);
157
- const haveIntersections = lineSphereIntersection(points, lineOfPoints, origin);
158
- expect(haveIntersections).toBe(true); // Expect the line to intersect with the sphere
159
-
160
- arc.set(arcExpected, points[0], points[1]);
161
-
162
- const isEqual = arc.equals(arcOut[0], arcExpected);
163
- if (!isEqual) {
164
- console.log('Iteration:', i);
165
- console.log('Expected arc:', arcExpected);
166
- console.log('Actual arc:', arcOut[0]);
167
- console.log('Points from intersection:', points);
168
- }
169
- expect(isEqual).toBe(true); // Expect the output arc to be equal to the expected arc
170
-
171
- }
172
- });
@@ -1,127 +0,0 @@
1
- import { lineSphereIntersection } from '../../../Math/juction/line-sphere';
2
- import { create } from '../../../Math/vec3';
3
- import type { Line, Sphere, Vec3 } from '../../../Math/types';
4
-
5
- describe('lineSphereIntersection', () => {
6
- let intersections: [Vec3, Vec3];
7
-
8
- beforeEach(() => {
9
- intersections = [create(0, 0, 0), create(0, 0, 0)];
10
- });
11
-
12
- test('should return true for a line intersecting the sphere at two points', () => {
13
- const line: Line = { origin: create(-2, 0.5, 0), direction: create(1, 0, 0) };
14
- const sphere: Sphere = { center: create(0, 0, 0), radius: 1 };
15
-
16
- const result = lineSphereIntersection(intersections, line, sphere);
17
-
18
- expect(result).toBe(true);
19
- const t1 = 2 - Math.sqrt(0.75);
20
- const t2 = 2 + Math.sqrt(0.75);
21
-
22
- expect(intersections[0][0]).toBeCloseTo(t1 - 2);
23
- expect(intersections[0][1]).toBeCloseTo(0.5);
24
- expect(intersections[0][2]).toBeCloseTo(0);
25
-
26
- expect(intersections[1][0]).toBeCloseTo(t2 - 2);
27
- expect(intersections[1][1]).toBeCloseTo(0.5);
28
- expect(intersections[1][2]).toBeCloseTo(0);
29
- });
30
-
31
- test('should return true for a line passing through the center of the sphere', () => {
32
- const line: Line = { origin: create(0, 0, 0), direction: create(0, 1, 0) };
33
- const sphere: Sphere = { center: create(0, 0, 0), radius: 5 };
34
-
35
- const result = lineSphereIntersection(intersections, line, sphere);
36
-
37
- expect(result).toBe(true);
38
- // Order might vary, so check both possibilities
39
- const p1 = create(0, -5, 0);
40
- const p2 = create(0, 5, 0);
41
- const receivedP1 = intersections[0];
42
- const receivedP2 = intersections[1];
43
-
44
- const match1 = Math.abs(receivedP1[1] - p1[1]) < 1e-9 && Math.abs(receivedP2[1] - p2[1]) < 1e-9;
45
- const match2 = Math.abs(receivedP1[1] - p2[1]) < 1e-9 && Math.abs(receivedP2[1] - p1[1]) < 1e-9;
46
-
47
- expect(match1 || match2).toBe(true);
48
- });
49
-
50
- test('should return true for a tangent line', () => {
51
- const line: Line = { origin: create(-2, 1, 0), direction: create(1, 0, 0) };
52
- const sphere: Sphere = { center: create(0, 0, 0), radius: 1 };
53
-
54
- const result = lineSphereIntersection(intersections, line, sphere);
55
-
56
- expect(result).toBe(true);
57
- expect(intersections[0][0]).toBeCloseTo(0);
58
- expect(intersections[0][1]).toBeCloseTo(1);
59
- expect(intersections[0][2]).toBeCloseTo(0);
60
- expect(intersections[1][0]).toBeCloseTo(0);
61
- expect(intersections[1][1]).toBeCloseTo(1);
62
- expect(intersections[1][2]).toBeCloseTo(0);
63
- });
64
-
65
- test('should return false for a line that does not intersect the sphere', () => {
66
- const line: Line = { origin: create(-5, 5, 0), direction: create(1, 0, 0) };
67
- const sphere: Sphere = { center: create(0, 0, 0), radius: 1 };
68
-
69
- const result = lineSphereIntersection(intersections, line, sphere);
70
-
71
- expect(result).toBe(false);
72
- });
73
-
74
- test('should handle non-normalized direction vectors', () => {
75
- const line: Line = { origin: create(-10, 0, 0), direction: create(2, 0, 0) };
76
- const sphere: Sphere = { center: create(0, 0, 0), radius: 1 };
77
-
78
- const result = lineSphereIntersection(intersections, line, sphere);
79
-
80
- expect(result).toBe(true);
81
- const p1 = create(-1, 0, 0);
82
- const p2 = create(1, 0, 0);
83
- const receivedP1 = intersections[0];
84
- const receivedP2 = intersections[1];
85
-
86
- const match1 = Math.abs(receivedP1[0] - p1[0]) < 1e-9 && Math.abs(receivedP2[0] - p2[0]) < 1e-9;
87
- const match2 = Math.abs(receivedP1[0] - p2[0]) < 1e-9 && Math.abs(receivedP2[0] - p1[0]) < 1e-9;
88
-
89
- expect(match1 || match2).toBe(true);
90
- });
91
-
92
- test('should handle sphere not at the origin', () => {
93
- const line: Line = { origin: create(8, 5, 5), direction: create(1, 0, 0) };
94
- const sphere: Sphere = { center: create(10, 5, 5), radius: 1 };
95
-
96
- const result = lineSphereIntersection(intersections, line, sphere);
97
-
98
- expect(result).toBe(true);
99
- const p1 = create(9, 5, 5);
100
- const p2 = create(11, 5, 5);
101
- const receivedP1 = intersections[0];
102
- const receivedP2 = intersections[1];
103
-
104
- const match1 = Math.abs(receivedP1[0] - p1[0]) < 1e-9 && Math.abs(receivedP2[0] - p2[0]) < 1e-9;
105
- const match2 = Math.abs(receivedP1[0] - p2[0]) < 1e-9 && Math.abs(receivedP2[0] - p1[0]) < 1e-9;
106
-
107
- expect(match1 || match2).toBe(true);
108
- });
109
-
110
- test('should return true when the line origin is inside the sphere', () => {
111
- const line: Line = { origin: create(0, 0, 0), direction: create(1, 1, 1) };
112
- const sphere: Sphere = { center: create(0, 0, 0), radius: 5 };
113
-
114
- const result = lineSphereIntersection(intersections, line, sphere);
115
-
116
- expect(result).toBe(true);
117
- const t = 5 / Math.sqrt(3);
118
-
119
- expect(intersections[0][0]).toBeCloseTo(-t);
120
- expect(intersections[0][1]).toBeCloseTo(-t);
121
- expect(intersections[0][2]).toBeCloseTo(-t);
122
-
123
- expect(intersections[1][0]).toBeCloseTo(t);
124
- expect(intersections[1][1]).toBeCloseTo(t);
125
- expect(intersections[1][2]).toBeCloseTo(t);
126
- });
127
- });
@@ -1,91 +0,0 @@
1
- import { Plane, Line, Vec3, Quaternion } from '../../../Math/types';
2
- import * as plane from '../../../Math/plane';
3
- import * as line from '../../../Math/line';
4
- import * as vec3 from '../../../Math/vec3';
5
- import * as quaternion from '../../../Math/quaternion';
6
- import { planePlaneJunction } from '../../../Math/juction/plane-plane';
7
-
8
-
9
- let plane1: Plane;
10
- let plane2: Plane;
11
- let intersectionLine: Line;
12
- let quaternion1: Quaternion;
13
-
14
- beforeAll(() => {
15
- plane1 = plane.create();
16
- plane2 = plane.create();
17
- intersectionLine = line.create();
18
- quaternion1 = quaternion.create();
19
- });
20
-
21
-
22
- test('plane-plane intersection - parallel planes', () => {
23
- plane.fromValues(plane1, 0, 0, 1, 5); // Plane: z = 5
24
- plane.fromValues(plane2, 0, 0, 1, 10); // Plane: z = 10
25
- const result = planePlaneJunction(intersectionLine, plane1, plane2);
26
- expect(result).toBe(false);
27
- });
28
-
29
- test('plane-plane intersection - intersecting planes', () => {
30
- plane.fromValues(plane1, 0, 0, 1, 5); // Plane: z = 5
31
- plane.fromValues(plane2, 1, 0, 0, 3); // Plane: x = 3
32
-
33
- const result = planePlaneJunction(intersectionLine, plane1, plane2);
34
- expect(result).toBe(true);
35
- expect(vec3.equals(intersectionLine.direction, vec3.create(0, 1, 0))).toBe(true);
36
- expect(vec3.equals(intersectionLine.origin, vec3.create(3, 0, 5))).toBe(true);
37
- });
38
-
39
-
40
- test('plane-plane intersection - rotating a plane', () => {
41
- // plane1 z = 5
42
- plane.fromValues(plane1, 0, 0, 1, 5);
43
-
44
- // plane2 x = 3, for the start
45
- vec3.randomUnit(plane2.normal);
46
- plane2.distance = 3;
47
-
48
- const result = planePlaneJunction(intersectionLine, plane1, plane2);
49
- expect(result).toBe(true);
50
- const quaRotateLine = line.clone(intersectionLine);
51
-
52
- const step = 90;
53
- quaternion.fromAxisAngle(quaternion1, plane1.normal, Math.PI / step); // Rotate 90 degrees around Y-axis
54
-
55
-
56
- for (let i = 0; i < step; i++) {
57
-
58
- vec3.applyQuaternion(plane2.normal, plane2.normal, quaternion1);
59
-
60
- const result = planePlaneJunction(intersectionLine, plane1, plane2);
61
-
62
-
63
- line.applyQuaternion(quaRotateLine, quaRotateLine, quaternion1);
64
-
65
- expect(result).toBe(true);
66
- expect(vec3.equals(intersectionLine.direction, quaRotateLine.direction)).toBe(true);
67
- expect(line.contains(intersectionLine, quaRotateLine.origin)).toBe(true);
68
- }
69
- });
70
-
71
- test("plane-plane intersection 1", () => {
72
- const r2 = Math.sqrt(2) / 2;
73
- plane.fromValues(plane1, 1, 0, 0, 0);
74
- plane.fromValues(plane2, 0, -r2, r2, 0);
75
- const result = planePlaneJunction(intersectionLine, plane1, plane2);
76
-
77
- expect(result).toBe(true);
78
- console.log(intersectionLine);
79
- expect(vec3.equals(intersectionLine.direction, vec3.create(0, r2, r2)) || vec3.equals(intersectionLine.direction, vec3.create(0, -r2, -r2))
80
- ).toBe(true);
81
- expect(line.contains(intersectionLine, vec3.create(0, 0, 0))).toBe(true);
82
- });
83
-
84
- test("plane-plane intersection 2", () => {
85
- plane.fromValues(plane1, 1, 0, 0, 1);
86
- plane.fromValues(plane2, 0, 1, 0, 1);
87
- const result = planePlaneJunction(intersectionLine, plane1, plane2);
88
- expect(result).toBe(true);
89
- expect(vec3.equals(intersectionLine.direction, vec3.create(0, 0, 1))).toBe(true);
90
- expect(line.contains(intersectionLine, vec3.create(1, 1, 0))).toBe(true);
91
- });
@@ -1,17 +0,0 @@
1
- import { Vec3, Plane } from '../../Math/types';
2
- import * as vec3 from '../../Math/vec3';
3
- import * as plane from '../../Math/plane';
4
-
5
-
6
- const EPSILON = 1e-6;
7
-
8
- const _0plane = plane.create(vec3.create(0, 0, 1), 0);
9
- const _1plane = plane.create(vec3.create(1, 1, 1), 0);
10
-
11
- beforeAll(() => {
12
- // Initialize any necessary data or state before running the tests
13
- plane.set(_0plane, vec3.create(0, 0, 1), 0);
14
- plane.set(_1plane, vec3.create(1, 1, 1), 0);
15
- });
16
-
17
-
@@ -1,43 +0,0 @@
1
- import { Plane, Vec3 } from "../../Math/types";
2
- import * as vec3 from "../../Math/vec3";
3
- import * as plane from "../../Math/plane";
4
-
5
-
6
- const _planeA = /*@__PURE__*/ plane.create(vec3.create(1, 0, 0), 0);
7
- const _planeB = /*@__PURE__*/ plane.create(vec3.create(0, 1, 0), 0);
8
- const _vecA = /*@__PURE__*/ vec3.create(1, 0, 0);
9
-
10
- beforeAll(() => {
11
- vec3.set(_vecA, 1, 0, 0);
12
- plane.set(_planeA, vec3.create(1, 0, 0), 0);
13
- plane.set(_planeB, vec3.create(0, 1, 0), 0);
14
- });
15
-
16
- test("Plane: getUnitSphereRadiusAngle", () => {
17
- const angleA = plane.getUnitSphereRadiusAngle(_planeA);
18
- const angleB = plane.getUnitSphereRadiusAngle(_planeB);
19
-
20
- expect(angleA).toBeCloseTo(Math.PI / 2, 5); // 90 degrees
21
- expect(angleB).toBeCloseTo(Math.PI / 2, 5); // 90 degrees
22
- });
23
-
24
-
25
- test("Plane: getUnitSphereRadiusAngle 1", () => {
26
-
27
- vec3.set(_vecA, 1, 1, 0);
28
- vec3.normalize(_vecA, _vecA);
29
- const distance = Math.sqrt(2) / 2; // Distance from origin to the plane
30
- plane.set(_planeA, _vecA, distance);
31
- const angleA = plane.getUnitSphereRadiusAngle(_planeA);
32
- expect(angleA).toBeCloseTo(Math.PI / 4, 5); // 45 degrees
33
-
34
- for (let i = 0; i < 100; i++) {
35
- const distance = Math.random();
36
-
37
- const angle = Math.acos(distance);
38
- vec3.randomUnit(_vecA)
39
- plane.set(_planeA, _vecA, distance);
40
- const angleA = plane.getUnitSphereRadiusAngle(_planeA);
41
- expect(angleA).toBeCloseTo(angle, 5); // Check if the angle is close to the expected value
42
- }
43
- });
@@ -1,33 +0,0 @@
1
- import { Vec3 } from "../../Math/types";
2
- import * as vec3 from "../../Math/vec3";
3
-
4
- test("vec3.create", () => {
5
- const v = vec3.create(1, 2, 3);
6
- expect(v).toEqual([1, 2, 3]);
7
- });
8
-
9
-
10
- test("vec3.length", () => {
11
- const v = vec3.create(3, 4, 0);
12
- const length = vec3.length(v);
13
- expect(length).toBe(5);
14
- });
15
-
16
-
17
- test("LongLat to Vec3 and back", () => {
18
- const longLat: [number, number] = [0, 0]
19
- const longLatBack: [number, number] = [0, 0]
20
- const v = vec3.create();
21
- for (let lon = -170; lon <= 170; lon += 30) {
22
- for (let lat = -85; lat <= 85; lat += 30) {
23
- longLat[0] = lon * Math.PI / 180;
24
- longLat[1] = lat * Math.PI / 180;
25
- vec3.fromLongLatToUnitVector(v, longLat);
26
- vec3.fromUnitVectorToLongLat(longLatBack, v);
27
- expect(Math.abs(longLatBack[0] - longLat[0]) < 0.00001).toBe(true);
28
- expect(Math.abs(longLatBack[1] - longLat[1]) < 0.00001).toBe(true);
29
- }
30
- }
31
-
32
- });
33
-