@math.gl/core 5.0.0-alpha.10 → 5.0.0-alpha.12

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 (141) hide show
  1. package/LICENSE +7 -0
  2. package/PROJ4-LICENSE.md +29 -0
  3. package/README.md +5 -0
  4. package/dist/classes/base/math-array.js +1 -1
  5. package/dist/classes/base/math-array.js.map +1 -1
  6. package/dist/classes/base/matrix.js +2 -2
  7. package/dist/classes/base/matrix.js.map +1 -1
  8. package/dist/classes/base/vector.js +2 -2
  9. package/dist/classes/base/vector.js.map +1 -1
  10. package/dist/classes/euler-types.js +1 -1
  11. package/dist/classes/euler-types.js.map +1 -1
  12. package/dist/classes/euler.js +2 -2
  13. package/dist/classes/euler.js.map +1 -1
  14. package/dist/classes/matrix3.js +2 -2
  15. package/dist/classes/matrix3.js.map +1 -1
  16. package/dist/classes/matrix4.js +2 -2
  17. package/dist/classes/matrix4.js.map +1 -1
  18. package/dist/classes/pose.js +2 -2
  19. package/dist/classes/pose.js.map +1 -1
  20. package/dist/classes/quaternion.js +2 -2
  21. package/dist/classes/quaternion.js.map +1 -1
  22. package/dist/classes/spherical-coordinates.js +2 -2
  23. package/dist/classes/spherical-coordinates.js.map +1 -1
  24. package/dist/classes/vector2.js +2 -2
  25. package/dist/classes/vector2.js.map +1 -1
  26. package/dist/classes/vector3.js +2 -2
  27. package/dist/classes/vector3.js.map +1 -1
  28. package/dist/classes/vector4.js +2 -2
  29. package/dist/classes/vector4.js.map +1 -1
  30. package/dist/gl-matrix/common.d.ts.map +1 -1
  31. package/dist/gl-matrix/common.js +5 -0
  32. package/dist/gl-matrix/common.js.map +1 -1
  33. package/dist/gl-matrix/mat3.d.ts.map +1 -1
  34. package/dist/gl-matrix/mat3.js +5 -0
  35. package/dist/gl-matrix/mat3.js.map +1 -1
  36. package/dist/gl-matrix/mat4.d.ts.map +1 -1
  37. package/dist/gl-matrix/mat4.js +5 -0
  38. package/dist/gl-matrix/mat4.js.map +1 -1
  39. package/dist/gl-matrix/quat.d.ts.map +1 -1
  40. package/dist/gl-matrix/quat.js +5 -0
  41. package/dist/gl-matrix/quat.js.map +1 -1
  42. package/dist/gl-matrix/vec2.d.ts.map +1 -1
  43. package/dist/gl-matrix/vec2.js +5 -0
  44. package/dist/gl-matrix/vec2.js.map +1 -1
  45. package/dist/gl-matrix/vec3.d.ts.map +1 -1
  46. package/dist/gl-matrix/vec3.js +5 -0
  47. package/dist/gl-matrix/vec3.js.map +1 -1
  48. package/dist/gl-matrix/vec4.d.ts.map +1 -1
  49. package/dist/gl-matrix/vec4.js +5 -0
  50. package/dist/gl-matrix/vec4.js.map +1 -1
  51. package/dist/gl-matrix/wip/index.d.ts.map +1 -1
  52. package/dist/gl-matrix/wip/index.js +3 -1
  53. package/dist/gl-matrix/wip/index.js.map +1 -1
  54. package/dist/gl-matrix/wip/mat2.d.ts.map +1 -1
  55. package/dist/gl-matrix/wip/mat2.js +3 -1
  56. package/dist/gl-matrix/wip/mat2.js.map +1 -1
  57. package/dist/gl-matrix/wip/mat2d.d.ts.map +1 -1
  58. package/dist/gl-matrix/wip/mat2d.js +3 -1
  59. package/dist/gl-matrix/wip/mat2d.js.map +1 -1
  60. package/dist/gl-matrix/wip/quat2.d.ts.map +1 -1
  61. package/dist/gl-matrix/wip/quat2.js +3 -1
  62. package/dist/gl-matrix/wip/quat2.js.map +1 -1
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/lib/assert.js +1 -1
  69. package/dist/lib/assert.js.map +1 -1
  70. package/dist/lib/common.js +1 -1
  71. package/dist/lib/common.js.map +1 -1
  72. package/dist/lib/gl-matrix-extras.js +1 -1
  73. package/dist/lib/gl-matrix-extras.js.map +1 -1
  74. package/dist/lib/math-utils.d.ts.map +1 -1
  75. package/dist/lib/math-utils.js +2 -1
  76. package/dist/lib/math-utils.js.map +1 -1
  77. package/dist/lib/validators.js +1 -1
  78. package/dist/lib/validators.js.map +1 -1
  79. package/dist/mat3.cjs.map +1 -1
  80. package/dist/mat3.js +1 -1
  81. package/dist/mat3.js.map +1 -1
  82. package/dist/mat4.cjs.map +1 -1
  83. package/dist/mat4.js +1 -1
  84. package/dist/mat4.js.map +1 -1
  85. package/dist/quat.cjs.map +1 -1
  86. package/dist/quat.js +1 -1
  87. package/dist/quat.js.map +1 -1
  88. package/dist/spheroid.cjs +106 -0
  89. package/dist/spheroid.cjs.map +6 -0
  90. package/dist/spheroid.d.ts +20 -0
  91. package/dist/spheroid.d.ts.map +1 -0
  92. package/dist/spheroid.js +96 -0
  93. package/dist/spheroid.js.map +1 -0
  94. package/dist/vec2.cjs.map +1 -1
  95. package/dist/vec2.js +1 -1
  96. package/dist/vec2.js.map +1 -1
  97. package/dist/vec3.cjs.map +1 -1
  98. package/dist/vec3.js +1 -1
  99. package/dist/vec3.js.map +1 -1
  100. package/dist/vec4.cjs.map +1 -1
  101. package/dist/vec4.js +1 -1
  102. package/dist/vec4.js.map +1 -1
  103. package/package.json +10 -4
  104. package/src/classes/base/math-array.ts +1 -1
  105. package/src/classes/base/matrix.ts +2 -2
  106. package/src/classes/base/vector.ts +2 -2
  107. package/src/classes/euler-types.ts +1 -1
  108. package/src/classes/euler.ts +2 -2
  109. package/src/classes/matrix3.ts +2 -2
  110. package/src/classes/matrix4.ts +2 -2
  111. package/src/classes/pose.ts +2 -2
  112. package/src/classes/quaternion.ts +2 -2
  113. package/src/classes/spherical-coordinates.ts +2 -2
  114. package/src/classes/vector2.ts +2 -2
  115. package/src/classes/vector3.ts +2 -2
  116. package/src/classes/vector4.ts +2 -2
  117. package/src/gl-matrix/common.js +5 -0
  118. package/src/gl-matrix/mat3.ts +5 -0
  119. package/src/gl-matrix/mat4.ts +5 -0
  120. package/src/gl-matrix/quat.ts +5 -0
  121. package/src/gl-matrix/vec2.ts +5 -0
  122. package/src/gl-matrix/vec3.ts +5 -0
  123. package/src/gl-matrix/vec4.ts +5 -0
  124. package/src/gl-matrix/wip/index.js +3 -1
  125. package/src/gl-matrix/wip/mat2.js +3 -1
  126. package/src/gl-matrix/wip/mat2d.js +3 -1
  127. package/src/gl-matrix/wip/quat2.ts +3 -1
  128. package/src/index.ts +3 -1
  129. package/src/lib/assert.ts +1 -1
  130. package/src/lib/common.ts +1 -1
  131. package/src/lib/gl-matrix-extras.ts +1 -1
  132. package/src/lib/gl-matrix.d.ts +1 -1
  133. package/src/lib/math-utils.ts +2 -1
  134. package/src/lib/validators.ts +1 -1
  135. package/src/mat3.ts +1 -1
  136. package/src/mat4.ts +1 -1
  137. package/src/quat.ts +1 -1
  138. package/src/spheroid.ts +126 -0
  139. package/src/vec2.ts +1 -1
  140. package/src/vec3.ts +1 -1
  141. package/src/vec4.ts +1 -1
@@ -0,0 +1,126 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: 2014 Mike Adair, Richard Greenwood, Didier Richard, Stephen Irons, Olivier Terral and Calvin Metcalf (proj4js)
4
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
+ // SPDX-FileComment: Forward geocentric equations and Hannover inverse moved/adapted from math.gl projection's proj4js 2.22.0 datumUtils.js port. See ../PROJ4-LICENSE.md. Safeguarded exterior inverse and numeric output commit are original math.gl code.
6
+
7
+ /** Numeric leaf: angles in radians, distances in axis units; no CRS, global config or scratch. */
8
+ import type {SpheroidParameters} from '@math.gl/types';
9
+ export type SpheroidGeometry = SpheroidParameters & {readonly eccentricitySquared: number};
10
+ export type SpheroidPoint = {x: number; y: number; z: number};
11
+
12
+ /** Caller supplies validated positive finite axes and eccentricity. No latitude wrapping. */
13
+ export function spheroidToCartesian(
14
+ point: SpheroidPoint,
15
+ geometry: SpheroidGeometry,
16
+ result: SpheroidPoint = point
17
+ ): boolean {
18
+ const longitude = point.x,
19
+ latitude = point.y,
20
+ height = point.z;
21
+ const {semiMajorAxis: a, semiMinorAxis: b, eccentricitySquared: es} = geometry;
22
+ const sin = Math.sin(latitude),
23
+ cos = Math.cos(latitude);
24
+ // Use the axis ratio for very flat shapes: 1 - es*sin² loses polar precision.
25
+ const ratio = b / a;
26
+ const radius = es < 0.9 ? a / Math.sqrt(1 - es * sin * sin) : a / Math.hypot(cos, ratio * sin);
27
+ const x = (radius + height) * cos * Math.cos(longitude);
28
+ const y = (radius + height) * cos * Math.sin(longitude);
29
+ const z = (radius * (es < 0.9 ? 1 - es : ratio * ratio) + height) * sin;
30
+ return commit(result, x, y, z);
31
+ }
32
+
33
+ /**
34
+ * Bounded inverse. Sphere is analytic; ordinary spheroids use the retained Hannover
35
+ * iteration. Very flat/exterior failures use a safeguarded normal-footpoint solve.
36
+ * false leaves output untouched. Interior ambiguity is not resolved by this API.
37
+ * Only exact poles canonicalize longitude; adapters may retain other conventions.
38
+ */
39
+ export function cartesianToSpheroid(
40
+ point: SpheroidPoint,
41
+ geometry: SpheroidGeometry,
42
+ result: SpheroidPoint = point
43
+ ): boolean {
44
+ const x = point.x,
45
+ y = point.y,
46
+ z = point.z;
47
+ const {semiMajorAxis: a, semiMinorAxis: b, eccentricitySquared: es} = geometry;
48
+ const p = Math.hypot(x, y),
49
+ rr = Math.hypot(x, y, z);
50
+ if (!(rr > 0) || !Number.isFinite(rr)) return false;
51
+ if (es === 0) return commit(result, p === 0 ? 0 : Math.atan2(y, x), Math.atan2(z, p), rr - a);
52
+ if (p === 0) return commit(result, 0, (Math.sign(z) * Math.PI) / 2, Math.abs(z) - b);
53
+ if (es >= 0.9) return exteriorInverse(x, y, z, p, a, b, result);
54
+ const ct = z / rr,
55
+ st = p / rr;
56
+ let rx = 1 / Math.sqrt(1 - es * (2 - es) * st * st);
57
+ let cos = st * (1 - es) * rx,
58
+ sin = ct * rx;
59
+ for (let i = 0; i < 30; i++) {
60
+ const rn = a / Math.sqrt(1 - es * sin * sin);
61
+ const height = p * cos + z * sin - rn * (1 - es * sin * sin);
62
+ const rk = (es * rn) / (rn + height);
63
+ rx = 1 / Math.sqrt(1 - rk * (2 - rk) * st * st);
64
+ const nextCos = st * (1 - rk) * rx,
65
+ nextSin = ct * rx;
66
+ if (Math.abs(nextSin * cos - nextCos * sin) <= 1e-12) {
67
+ if (!Number.isFinite(height) || !Number.isFinite(nextSin) || !Number.isFinite(nextCos)) break;
68
+ return commit(result, Math.atan2(y, x), Math.atan2(nextSin, Math.abs(nextCos)), height);
69
+ }
70
+ cos = nextCos;
71
+ sin = nextSin;
72
+ }
73
+ return exteriorInverse(x, y, z, p, a, b, result);
74
+ }
75
+
76
+ /** Original dimensionless Lagrange-multiplier solve, restricted to surface/exterior. */
77
+ function exteriorInverse(
78
+ x: number,
79
+ y: number,
80
+ z: number,
81
+ p: number,
82
+ a: number,
83
+ b: number,
84
+ result: SpheroidPoint
85
+ ): boolean {
86
+ const ratio = b / a,
87
+ ratio2 = ratio * ratio,
88
+ horizontal = p / a,
89
+ vertical = z / a;
90
+ const norm = Math.hypot(horizontal, z / b);
91
+ if (!Number.isFinite(norm) || norm < 1 - 8 * Number.EPSILON || !(ratio2 > 0)) return false;
92
+ let lower = 0,
93
+ upper = Math.hypot(horizontal, vertical * ratio);
94
+ if (!Number.isFinite(upper)) return false;
95
+ let multiplier = norm <= 1 + 8 * Number.EPSILON ? 0 : upper / 2;
96
+ for (let i = 0; i < 96; i++) {
97
+ const equatorial = 1 + multiplier,
98
+ polar = ratio2 + multiplier;
99
+ const u = horizontal / equatorial,
100
+ v = (vertical * ratio) / polar;
101
+ const length = Math.hypot(u, v);
102
+ const residual = length - 1;
103
+ if (Math.abs(residual) <= 4 * Number.EPSILON) {
104
+ const latitude = Math.atan2(vertical / polar, horizontal / equatorial);
105
+ const sin = Math.sin(latitude),
106
+ cos = Math.cos(latitude);
107
+ const height = p * cos + z * sin - a * Math.hypot(cos, ratio * sin);
108
+ return commit(result, Math.atan2(y, x), latitude, height);
109
+ }
110
+ if (residual > 0) lower = multiplier;
111
+ else upper = multiplier;
112
+ const derivative = -((u * u) / equatorial + (v * v) / polar) / length;
113
+ const next = multiplier - residual / derivative;
114
+ multiplier = Number.isFinite(next) && next > lower && next < upper ? next : (lower + upper) / 2;
115
+ }
116
+ return false;
117
+ }
118
+
119
+ /** Values are captured before invoking application setters; recursive writes are safe. */
120
+ function commit(result: SpheroidPoint, x: number, y: number, z: number): boolean {
121
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return false;
122
+ result.x = x;
123
+ result.y = y;
124
+ result.z = z;
125
+ return true;
126
+ }
package/src/vec2.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  export * from './gl-matrix/vec2';
package/src/vec3.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  export * from './gl-matrix/vec3';
package/src/vec4.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  // math.gl
2
2
  // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
 
5
5
  export * from './gl-matrix/vec4';