@vived/core 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/esm/Utilities/addAlphaToHex.js +13 -0
  2. package/dist/esm/Utilities/addAlphaToHex.js.map +1 -0
  3. package/dist/esm/Utilities/addAlphaToHex.test.js +32 -0
  4. package/dist/esm/Utilities/addAlphaToHex.test.js.map +1 -0
  5. package/dist/esm/Utilities/alphaToHex.js +17 -0
  6. package/dist/esm/Utilities/alphaToHex.js.map +1 -0
  7. package/dist/esm/Utilities/alphaToHex.test.js +73 -0
  8. package/dist/esm/Utilities/alphaToHex.test.js.map +1 -0
  9. package/dist/esm/Utilities/downloadFile.js +11 -0
  10. package/dist/esm/Utilities/downloadFile.js.map +1 -0
  11. package/dist/esm/Utilities/index.js +3 -0
  12. package/dist/esm/Utilities/index.js.map +1 -1
  13. package/dist/types/Utilities/addAlphaToHex.d.ts +2 -0
  14. package/dist/types/Utilities/addAlphaToHex.d.ts.map +1 -0
  15. package/dist/types/Utilities/addAlphaToHex.test.d.ts +2 -0
  16. package/dist/types/Utilities/addAlphaToHex.test.d.ts.map +1 -0
  17. package/dist/types/Utilities/alphaToHex.d.ts +3 -0
  18. package/dist/types/Utilities/alphaToHex.d.ts.map +1 -0
  19. package/dist/types/Utilities/alphaToHex.test.d.ts +2 -0
  20. package/dist/types/Utilities/alphaToHex.test.d.ts.map +1 -0
  21. package/dist/types/Utilities/downloadFile.d.ts +2 -0
  22. package/dist/types/Utilities/downloadFile.d.ts.map +1 -0
  23. package/dist/types/Utilities/index.d.ts +3 -0
  24. package/dist/types/Utilities/index.d.ts.map +1 -1
  25. package/package.json +3 -6
  26. package/dist/cjs/AppObject/AppObject.js +0 -59
  27. package/dist/cjs/AppObject/AppObject.js.map +0 -1
  28. package/dist/cjs/AppObject/AppObject.test.js +0 -113
  29. package/dist/cjs/AppObject/AppObject.test.js.map +0 -1
  30. package/dist/cjs/AppObject/AppObjectComponent.js +0 -82
  31. package/dist/cjs/AppObject/AppObjectComponent.js.map +0 -1
  32. package/dist/cjs/AppObject/AppObjectComponent.test.js +0 -132
  33. package/dist/cjs/AppObject/AppObjectComponent.test.js.map +0 -1
  34. package/dist/cjs/AppObject/AppObjectController.js +0 -12
  35. package/dist/cjs/AppObject/AppObjectController.js.map +0 -1
  36. package/dist/cjs/AppObject/AppObjectEntity.js +0 -38
  37. package/dist/cjs/AppObject/AppObjectEntity.js.map +0 -1
  38. package/dist/cjs/AppObject/AppObjectEntity.test.js +0 -108
  39. package/dist/cjs/AppObject/AppObjectEntity.test.js.map +0 -1
  40. package/dist/cjs/AppObject/AppObjectEntityRepo.js +0 -56
  41. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +0 -1
  42. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +0 -149
  43. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  44. package/dist/cjs/AppObject/AppObjectPM.js +0 -40
  45. package/dist/cjs/AppObject/AppObjectPM.js.map +0 -1
  46. package/dist/cjs/AppObject/AppObjectPM.test.js +0 -103
  47. package/dist/cjs/AppObject/AppObjectPM.test.js.map +0 -1
  48. package/dist/cjs/AppObject/AppObjectRepo.js +0 -133
  49. package/dist/cjs/AppObject/AppObjectRepo.js.map +0 -1
  50. package/dist/cjs/AppObject/AppObjectRepo.test.js +0 -213
  51. package/dist/cjs/AppObject/AppObjectRepo.test.js.map +0 -1
  52. package/dist/cjs/AppObject/AppObjectUC.js +0 -12
  53. package/dist/cjs/AppObject/AppObjectUC.js.map +0 -1
  54. package/dist/cjs/AppObject/AppObjectView.js +0 -12
  55. package/dist/cjs/AppObject/AppObjectView.js.map +0 -1
  56. package/dist/cjs/AppObject/getSingletonComponent.js +0 -7
  57. package/dist/cjs/AppObject/getSingletonComponent.js.map +0 -1
  58. package/dist/cjs/AppObject/getSingletonComponent.test.js +0 -13
  59. package/dist/cjs/AppObject/getSingletonComponent.test.js.map +0 -1
  60. package/dist/cjs/AppObject/index.js +0 -27
  61. package/dist/cjs/AppObject/index.js.map +0 -1
  62. package/dist/cjs/AppObject/printAppObjectDetails.js +0 -18
  63. package/dist/cjs/AppObject/printAppObjectDetails.js.map +0 -1
  64. package/dist/cjs/Entities/MemoizedAngle.js +0 -23
  65. package/dist/cjs/Entities/MemoizedAngle.js.map +0 -1
  66. package/dist/cjs/Entities/MemoizedAngle.test.js +0 -30
  67. package/dist/cjs/Entities/MemoizedAngle.test.js.map +0 -1
  68. package/dist/cjs/Entities/MemoizedBoolean.js +0 -23
  69. package/dist/cjs/Entities/MemoizedBoolean.js.map +0 -1
  70. package/dist/cjs/Entities/MemoizedBoolean.test.js +0 -34
  71. package/dist/cjs/Entities/MemoizedBoolean.test.js.map +0 -1
  72. package/dist/cjs/Entities/MemoizedColor.js +0 -24
  73. package/dist/cjs/Entities/MemoizedColor.js.map +0 -1
  74. package/dist/cjs/Entities/MemoizedColor.test.js +0 -32
  75. package/dist/cjs/Entities/MemoizedColor.test.js.map +0 -1
  76. package/dist/cjs/Entities/MemoizedNumber.js +0 -23
  77. package/dist/cjs/Entities/MemoizedNumber.js.map +0 -1
  78. package/dist/cjs/Entities/MemoizedNumber.test.js +0 -29
  79. package/dist/cjs/Entities/MemoizedNumber.test.js.map +0 -1
  80. package/dist/cjs/Entities/MemoizedQuaternion.js +0 -24
  81. package/dist/cjs/Entities/MemoizedQuaternion.js.map +0 -1
  82. package/dist/cjs/Entities/MemoizedQuaternion.test.js +0 -32
  83. package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +0 -1
  84. package/dist/cjs/Entities/MemoizedString.js +0 -23
  85. package/dist/cjs/Entities/MemoizedString.js.map +0 -1
  86. package/dist/cjs/Entities/MemoizedString.test.js +0 -29
  87. package/dist/cjs/Entities/MemoizedString.test.js.map +0 -1
  88. package/dist/cjs/Entities/MemoizedVector2.js +0 -24
  89. package/dist/cjs/Entities/MemoizedVector2.js.map +0 -1
  90. package/dist/cjs/Entities/MemoizedVector2.test.js +0 -32
  91. package/dist/cjs/Entities/MemoizedVector2.test.js.map +0 -1
  92. package/dist/cjs/Entities/MemoizedVector3.js +0 -24
  93. package/dist/cjs/Entities/MemoizedVector3.js.map +0 -1
  94. package/dist/cjs/Entities/MemoizedVector3.test.js +0 -32
  95. package/dist/cjs/Entities/MemoizedVector3.test.js.map +0 -1
  96. package/dist/cjs/Entities/ObservableEntity.js +0 -20
  97. package/dist/cjs/Entities/ObservableEntity.js.map +0 -1
  98. package/dist/cjs/Entities/ObservableEntity.test.js +0 -25
  99. package/dist/cjs/Entities/ObservableEntity.test.js.map +0 -1
  100. package/dist/cjs/Entities/ObserverList.js +0 -27
  101. package/dist/cjs/Entities/ObserverList.js.map +0 -1
  102. package/dist/cjs/Entities/ObserverList.test.js +0 -44
  103. package/dist/cjs/Entities/ObserverList.test.js.map +0 -1
  104. package/dist/cjs/Entities/RangedNumber.js +0 -36
  105. package/dist/cjs/Entities/RangedNumber.js.map +0 -1
  106. package/dist/cjs/Entities/RangedNumber.test.js +0 -96
  107. package/dist/cjs/Entities/RangedNumber.test.js.map +0 -1
  108. package/dist/cjs/Entities/index.js +0 -28
  109. package/dist/cjs/Entities/index.js.map +0 -1
  110. package/dist/cjs/Types/AppBoundary.js +0 -3
  111. package/dist/cjs/Types/AppBoundary.js.map +0 -1
  112. package/dist/cjs/Types/EaseFn.js +0 -3
  113. package/dist/cjs/Types/EaseFn.js.map +0 -1
  114. package/dist/cjs/Types/PmAdapter.js +0 -3
  115. package/dist/cjs/Types/PmAdapter.js.map +0 -1
  116. package/dist/cjs/Types/SingletonPmAdapter.js +0 -3
  117. package/dist/cjs/Types/SingletonPmAdapter.js.map +0 -1
  118. package/dist/cjs/Types/index.js +0 -21
  119. package/dist/cjs/Types/index.js.map +0 -1
  120. package/dist/cjs/Utilities/LengthConverters.js +0 -21
  121. package/dist/cjs/Utilities/LengthConverters.js.map +0 -1
  122. package/dist/cjs/Utilities/LengthConverters.test.js +0 -24
  123. package/dist/cjs/Utilities/LengthConverters.test.js.map +0 -1
  124. package/dist/cjs/Utilities/LerpNumber.js +0 -85
  125. package/dist/cjs/Utilities/LerpNumber.js.map +0 -1
  126. package/dist/cjs/Utilities/LerpNumber.test.js +0 -90
  127. package/dist/cjs/Utilities/LerpNumber.test.js.map +0 -1
  128. package/dist/cjs/Utilities/degreesToRadians.js +0 -7
  129. package/dist/cjs/Utilities/degreesToRadians.js.map +0 -1
  130. package/dist/cjs/Utilities/degreesToRadians.test.js +0 -9
  131. package/dist/cjs/Utilities/degreesToRadians.test.js.map +0 -1
  132. package/dist/cjs/Utilities/easeFunctions.js +0 -208
  133. package/dist/cjs/Utilities/easeFunctions.js.map +0 -1
  134. package/dist/cjs/Utilities/easeFunctions.test.js +0 -209
  135. package/dist/cjs/Utilities/easeFunctions.test.js.map +0 -1
  136. package/dist/cjs/Utilities/generateUniqueID.js +0 -8
  137. package/dist/cjs/Utilities/generateUniqueID.js.map +0 -1
  138. package/dist/cjs/Utilities/index.js +0 -22
  139. package/dist/cjs/Utilities/index.js.map +0 -1
  140. package/dist/cjs/Utilities/interpolateNumber.js +0 -18
  141. package/dist/cjs/Utilities/interpolateNumber.js.map +0 -1
  142. package/dist/cjs/Utilities/interpolateNumber.test.js +0 -26
  143. package/dist/cjs/Utilities/interpolateNumber.test.js.map +0 -1
  144. package/dist/cjs/ValueObjects/Angle.js +0 -47
  145. package/dist/cjs/ValueObjects/Angle.js.map +0 -1
  146. package/dist/cjs/ValueObjects/Angle.test.js +0 -28
  147. package/dist/cjs/ValueObjects/Angle.test.js.map +0 -1
  148. package/dist/cjs/ValueObjects/Color.js +0 -859
  149. package/dist/cjs/ValueObjects/Color.js.map +0 -1
  150. package/dist/cjs/ValueObjects/Color.test.js +0 -147
  151. package/dist/cjs/ValueObjects/Color.test.js.map +0 -1
  152. package/dist/cjs/ValueObjects/LineSegment2D.js +0 -72
  153. package/dist/cjs/ValueObjects/LineSegment2D.js.map +0 -1
  154. package/dist/cjs/ValueObjects/LineSegment2D.test.js +0 -102
  155. package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +0 -1
  156. package/dist/cjs/ValueObjects/Matrix.js +0 -466
  157. package/dist/cjs/ValueObjects/Matrix.js.map +0 -1
  158. package/dist/cjs/ValueObjects/Matrix.test.js +0 -385
  159. package/dist/cjs/ValueObjects/Matrix.test.js.map +0 -1
  160. package/dist/cjs/ValueObjects/ParametricLine.js +0 -77
  161. package/dist/cjs/ValueObjects/ParametricLine.js.map +0 -1
  162. package/dist/cjs/ValueObjects/ParametricLine.test.js +0 -126
  163. package/dist/cjs/ValueObjects/ParametricLine.test.js.map +0 -1
  164. package/dist/cjs/ValueObjects/ParametricPlane.js +0 -65
  165. package/dist/cjs/ValueObjects/ParametricPlane.js.map +0 -1
  166. package/dist/cjs/ValueObjects/ParametricPlane.test.js +0 -101
  167. package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +0 -1
  168. package/dist/cjs/ValueObjects/Quaternion.js +0 -290
  169. package/dist/cjs/ValueObjects/Quaternion.js.map +0 -1
  170. package/dist/cjs/ValueObjects/Quaternion.test.js +0 -240
  171. package/dist/cjs/ValueObjects/Quaternion.test.js.map +0 -1
  172. package/dist/cjs/ValueObjects/Rectangle.js +0 -24
  173. package/dist/cjs/ValueObjects/Rectangle.js.map +0 -1
  174. package/dist/cjs/ValueObjects/Rectangle.test.js +0 -32
  175. package/dist/cjs/ValueObjects/Rectangle.test.js.map +0 -1
  176. package/dist/cjs/ValueObjects/Vector2.js +0 -184
  177. package/dist/cjs/ValueObjects/Vector2.js.map +0 -1
  178. package/dist/cjs/ValueObjects/Vector2.test.js +0 -136
  179. package/dist/cjs/ValueObjects/Vector2.test.js.map +0 -1
  180. package/dist/cjs/ValueObjects/Vector3.js +0 -231
  181. package/dist/cjs/ValueObjects/Vector3.js.map +0 -1
  182. package/dist/cjs/ValueObjects/Vector3.test.js +0 -188
  183. package/dist/cjs/ValueObjects/Vector3.test.js.map +0 -1
  184. package/dist/cjs/ValueObjects/Version.js +0 -171
  185. package/dist/cjs/ValueObjects/Version.js.map +0 -1
  186. package/dist/cjs/ValueObjects/Version.test.js +0 -310
  187. package/dist/cjs/ValueObjects/Version.test.js.map +0 -1
  188. package/dist/cjs/ValueObjects/index.js +0 -28
  189. package/dist/cjs/ValueObjects/index.js.map +0 -1
  190. package/dist/cjs/index.js +0 -22
  191. package/dist/cjs/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParametricLine.test.js","sourceRoot":"","sources":["../../../src/ValueObjects/ParametricLine.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3 } from \".\";\r\nimport { LineParameters, ParametricLine } from \"./ParametricLine\";\r\n\r\ntest(\"Setting and getting the parameters\", () => {\r\n const inputParameters: LineParameters = {\r\n x0: 1,\r\n y0: 2,\r\n z0: 3,\r\n a: 4,\r\n b: 5,\r\n c: 6,\r\n };\r\n const line = new ParametricLine(inputParameters);\r\n\r\n const dirUnit = new Vector3(4, 5, 6).unit;\r\n\r\n expect(line.x0).toEqual(inputParameters.x0);\r\n expect(line.y0).toEqual(inputParameters.y0);\r\n expect(line.z0).toEqual(inputParameters.z0);\r\n expect(line.a).toBeCloseTo(dirUnit.x);\r\n expect(line.b).toBeCloseTo(dirUnit.y);\r\n expect(line.c).toBeCloseTo(dirUnit.z);\r\n});\r\n\r\ntest(\"Line from point and direction\", () => {\r\n const point = new Vector3(1, 2, 3);\r\n const dir = new Vector3(10, 20, 30).unit;\r\n\r\n const line = ParametricLine.FromPointDirection(point, dir);\r\n\r\n expect(line.x0).toEqual(1);\r\n expect(line.y0).toEqual(2);\r\n expect(line.z0).toEqual(3);\r\n expect(line.a).toBeCloseTo(dir.x);\r\n expect(line.b).toBeCloseTo(dir.y);\r\n expect(line.c).toBeCloseTo(dir.z);\r\n});\r\n\r\ntest(\"From two points\", () => {\r\n const p1 = new Vector3(1, 2, 3);\r\n const p2 = new Vector3(4, 5, 6);\r\n\r\n const line = ParametricLine.FromTwoPoint(p1, p2);\r\n\r\n const dir = Vector3.Subtract(p2, p1).unit;\r\n\r\n expect(line.x0).toEqual(1);\r\n expect(line.y0).toEqual(2);\r\n expect(line.z0).toEqual(3);\r\n expect(line.a).toEqual(dir.x);\r\n expect(line.b).toEqual(dir.y);\r\n expect(line.c).toEqual(dir.z);\r\n});\r\n\r\ntest(\"Get point\", () => {\r\n const p1 = new Vector3(1, 2, 3);\r\n const p2 = new Vector3(4, 5, 6);\r\n\r\n let dir = Vector3.Subtract(p2, p1).unit;\r\n\r\n const distance = 11;\r\n dir = Vector3.NewVectorOfLength(dir, distance);\r\n const expectedPoint = Vector3.Add(p1, dir);\r\n\r\n const line = ParametricLine.FromTwoPoint(p1, p2);\r\n const point = ParametricLine.GetPointAtDistance(line, distance);\r\n expect(point.array).toEqual(expectedPoint.array);\r\n});\r\n\r\ntest(\"Get point along forward\", () => {\r\n const line = ParametricLine.Forward();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, 0, 11]);\r\n});\r\n\r\ntest(\"Get point along backwards\", () => {\r\n const line = ParametricLine.Backward();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, 0, -11]);\r\n});\r\n\r\ntest(\"Get point along up\", () => {\r\n const line = ParametricLine.Up();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, 11, 0]);\r\n});\r\n\r\ntest(\"Get point along down\", () => {\r\n const line = ParametricLine.Down();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, -11, 0]);\r\n});\r\n\r\ntest(\"Get point along left\", () => {\r\n const line = ParametricLine.Left();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([-11, 0, 0]);\r\n});\r\n\r\ntest(\"Get point along right\", () => {\r\n const line = ParametricLine.Right();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([11, 0, 0]);\r\n});\r\n\r\ntest(\"Check for equality\", () => {\r\n const inputParameters: LineParameters = {\r\n x0: 1,\r\n y0: 2,\r\n z0: 3,\r\n a: 4,\r\n b: 5,\r\n c: 6,\r\n };\r\n const line1 = new ParametricLine(inputParameters);\r\n const line2 = new ParametricLine(inputParameters);\r\n\r\n expect(line1).toEqual(line2);\r\n});\r\n\r\ntest(\"Geting the origin\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6).unit;\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n expect(line.origin).toEqual(origin);\r\n});\r\n\r\ntest(\"Getting the direction\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6).unit;\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n expect(Vector3.Close(line.direction, direction)).toEqual(true);\r\n});\r\n\r\ntest(\"Ensures the direction is unit\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6);\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n expect(line.direction).toEqual(direction.unit);\r\n});\r\n\r\ntest(\"Get distance to point\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6);\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n const point = new Vector3(10, 20, 30);\r\n\r\n const expected = Vector3.Subtract(point, origin).magnitude;\r\n\r\n expect(ParametricLine.GetDistanceToPoint(line, point)).toEqual(expected);\r\n});\r\n"]}
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ParametricPlane = void 0;
4
- const ParametricLine_1 = require("./ParametricLine");
5
- const Vector3_1 = require("../ValueObjects/Vector3");
6
- class ParametricPlane {
7
- static FromPointNormal(point, normal) {
8
- return new ParametricPlane(point, normal);
9
- }
10
- static FromThreePoints(A, B, C) {
11
- const point = A;
12
- const AB = Vector3_1.Vector3.Subtract(B, A);
13
- const AC = Vector3_1.Vector3.Subtract(C, A);
14
- const normal = Vector3_1.Vector3.Cross(AB, AC);
15
- return new ParametricPlane(point, normal);
16
- }
17
- static XY() {
18
- const p = Vector3_1.Vector3.Zero();
19
- const n = new Vector3_1.Vector3(0, 0, 1);
20
- return new ParametricPlane(p, n);
21
- }
22
- static ZX() {
23
- const p = Vector3_1.Vector3.Zero();
24
- const n = new Vector3_1.Vector3(0, 1, 0);
25
- return new ParametricPlane(p, n);
26
- }
27
- static YZ() {
28
- const p = Vector3_1.Vector3.Zero();
29
- const n = new Vector3_1.Vector3(1, 0, 0);
30
- return new ParametricPlane(p, n);
31
- }
32
- GetParameters() {
33
- const a = this.normal.x;
34
- const b = this.normal.y;
35
- const c = this.normal.z;
36
- let d = Vector3_1.Vector3.Dot(this.point, this.normal);
37
- if (d !== 0) {
38
- d *= -1;
39
- }
40
- return {
41
- a,
42
- b,
43
- c,
44
- d,
45
- };
46
- }
47
- intersectLine(line) {
48
- const { x0, y0, z0, a, b, c } = line;
49
- const { a: A, b: B, c: C, d: D } = this.GetParameters();
50
- const tNumerator = -(A * x0 + B * y0 + C * z0 + D);
51
- const tDenominator = A * a + B * b + C * c;
52
- if (tDenominator === 0) {
53
- return undefined;
54
- }
55
- const t = tNumerator / tDenominator;
56
- const intersect = ParametricLine_1.ParametricLine.GetPointAtDistance(line, t);
57
- return intersect;
58
- }
59
- constructor(point, normal) {
60
- this.point = point;
61
- this.normal = normal;
62
- }
63
- }
64
- exports.ParametricPlane = ParametricPlane;
65
- //# sourceMappingURL=ParametricPlane.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParametricPlane.js","sourceRoot":"","sources":["../../../src/ValueObjects/ParametricPlane.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParametricLine } from \"./ParametricLine\";\r\nimport { Vector3 } from \"../ValueObjects/Vector3\";\r\n\r\n// Plane equation: a*x + b*y + c*x + d = 0;\r\n\r\nexport interface PlaneParameters {\r\n a: number;\r\n b: number;\r\n c: number;\r\n d: number;\r\n}\r\n\r\nexport class ParametricPlane {\r\n static FromPointNormal(point: Vector3, normal: Vector3): ParametricPlane {\r\n return new ParametricPlane(point, normal);\r\n }\r\n\r\n static FromThreePoints(A: Vector3, B: Vector3, C: Vector3): ParametricPlane {\r\n const point = A;\r\n const AB = Vector3.Subtract(B, A);\r\n const AC = Vector3.Subtract(C, A);\r\n const normal = Vector3.Cross(AB, AC);\r\n\r\n return new ParametricPlane(point, normal);\r\n }\r\n\r\n static XY(): ParametricPlane {\r\n const p = Vector3.Zero();\r\n const n = new Vector3(0, 0, 1);\r\n return new ParametricPlane(p, n);\r\n }\r\n\r\n static ZX(): ParametricPlane {\r\n const p = Vector3.Zero();\r\n const n = new Vector3(0, 1, 0);\r\n return new ParametricPlane(p, n);\r\n }\r\n\r\n static YZ(): ParametricPlane {\r\n const p = Vector3.Zero();\r\n const n = new Vector3(1, 0, 0);\r\n return new ParametricPlane(p, n);\r\n }\r\n\r\n GetParameters(): PlaneParameters {\r\n const a = this.normal.x;\r\n const b = this.normal.y;\r\n const c = this.normal.z;\r\n let d = Vector3.Dot(this.point, this.normal);\r\n\r\n if (d !== 0) {\r\n d *= -1;\r\n }\r\n\r\n return {\r\n a,\r\n b,\r\n c,\r\n d,\r\n };\r\n }\r\n\r\n public intersectLine(line: ParametricLine): Vector3 | undefined {\r\n const { x0, y0, z0, a, b, c } = line;\r\n const { a: A, b: B, c: C, d: D } = this.GetParameters();\r\n\r\n const tNumerator = -(A * x0 + B * y0 + C * z0 + D);\r\n const tDenominator = A * a + B * b + C * c;\r\n\r\n if (tDenominator === 0) {\r\n return undefined;\r\n }\r\n\r\n const t = tNumerator / tDenominator;\r\n\r\n const intersect = ParametricLine.GetPointAtDistance(line, t);\r\n\r\n return intersect;\r\n }\r\n\r\n constructor(private point: Vector3, private normal: Vector3) {}\r\n}\r\n"]}
@@ -1,101 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const ParametricLine_1 = require("./ParametricLine");
4
- const ParametricPlane_1 = require("./ParametricPlane");
5
- const ValueObjects_1 = require("../ValueObjects");
6
- test("Setting from point and normal", () => {
7
- const point = new ValueObjects_1.Vector3(1, 2, 3);
8
- const normal = new ValueObjects_1.Vector3(4, 5, 6);
9
- const plane = ParametricPlane_1.ParametricPlane.FromPointNormal(point, normal);
10
- const parameters = plane.GetParameters();
11
- const dot = ValueObjects_1.Vector3.Dot(point, normal);
12
- expect(parameters.a).toEqual(normal.x);
13
- expect(parameters.b).toEqual(normal.y);
14
- expect(parameters.c).toEqual(normal.z);
15
- expect(parameters.d).toEqual(-dot);
16
- });
17
- test("From three points", () => {
18
- // From https://keisan.casio.com/exec/system/1223596129
19
- const A = new ValueObjects_1.Vector3(1, 2, -2);
20
- const B = new ValueObjects_1.Vector3(3, -2, 1);
21
- const C = new ValueObjects_1.Vector3(5, 1, -4);
22
- const plane = ParametricPlane_1.ParametricPlane.FromThreePoints(A, B, C);
23
- const parameters = plane.GetParameters();
24
- expect(parameters.a).toEqual(11);
25
- expect(parameters.b).toEqual(16);
26
- expect(parameters.c).toEqual(14);
27
- expect(parameters.d).toEqual(-15);
28
- });
29
- test("Intersection", () => {
30
- const point = new ValueObjects_1.Vector3(1, 1, 1);
31
- const dir = new ValueObjects_1.Vector3(1, 0, 0);
32
- const line = ParametricLine_1.ParametricLine.FromPointDirection(point, dir);
33
- const plane1 = new ValueObjects_1.Vector3(-1, 0, 0);
34
- const plane2 = new ValueObjects_1.Vector3(-1, 1, 0);
35
- const plane3 = new ValueObjects_1.Vector3(-1, 0, 1);
36
- const plane = ParametricPlane_1.ParametricPlane.FromThreePoints(plane1, plane2, plane3);
37
- const intersect = plane.intersectLine(line);
38
- expect(intersect?.x).toBeCloseTo(-1);
39
- expect(intersect?.y).toBeCloseTo(1);
40
- expect(intersect?.z).toBeCloseTo(1);
41
- });
42
- test("Intersection", () => {
43
- // From http://www.ambrsoft.com/TrigoCalc/Plan3D/PlaneLineIntersection_.htm
44
- const line1 = new ValueObjects_1.Vector3(4, 1, 1);
45
- const line2 = new ValueObjects_1.Vector3(8, -2, -2);
46
- const line = ParametricLine_1.ParametricLine.FromTwoPoint(line1, line2);
47
- const plane1 = new ValueObjects_1.Vector3(-1, 2, 4);
48
- const plane2 = new ValueObjects_1.Vector3(2, 1, 3);
49
- const plane3 = new ValueObjects_1.Vector3(1, 3, 2);
50
- const plane = ParametricPlane_1.ParametricPlane.FromThreePoints(plane1, plane2, plane3);
51
- const intersect = plane.intersectLine(line);
52
- expect(intersect?.x).toBeCloseTo(2.93);
53
- expect(intersect?.y).toBeCloseTo(1.8);
54
- expect(intersect?.z).toBeCloseTo(1.8);
55
- });
56
- test("If parallel, intersect should come back undefined", () => {
57
- const line1 = new ValueObjects_1.Vector3(0, 1, 0);
58
- const line2 = new ValueObjects_1.Vector3(0, -1, 0);
59
- const line = ParametricLine_1.ParametricLine.FromTwoPoint(line1, line2); // Vertical line going through the origin
60
- const plane1 = new ValueObjects_1.Vector3(0, 0, 0);
61
- const plane2 = new ValueObjects_1.Vector3(0, 1, 0);
62
- const plane3 = new ValueObjects_1.Vector3(0, 0, 1);
63
- const plane = ParametricPlane_1.ParametricPlane.FromThreePoints(plane1, plane2, plane3); // y-z plane
64
- const intersect = plane.intersectLine(line);
65
- expect(intersect).toBeUndefined();
66
- });
67
- test("XY Plane", () => {
68
- const plane = ParametricPlane_1.ParametricPlane.XY();
69
- expect(plane.GetParameters()).toEqual({
70
- a: 0,
71
- b: 0,
72
- c: 1,
73
- d: 0,
74
- });
75
- });
76
- test("ZX Plane", () => {
77
- const plane = ParametricPlane_1.ParametricPlane.ZX();
78
- expect(plane.GetParameters()).toEqual({
79
- a: 0,
80
- b: 1,
81
- c: 0,
82
- d: 0,
83
- });
84
- });
85
- test("YZ Plane", () => {
86
- const plane = ParametricPlane_1.ParametricPlane.YZ();
87
- expect(plane.GetParameters()).toEqual({
88
- a: 1,
89
- b: 0,
90
- c: 0,
91
- d: 0,
92
- });
93
- });
94
- test("Check for equality", () => {
95
- const point = new ValueObjects_1.Vector3(1, 2, 3);
96
- const normal = new ValueObjects_1.Vector3(4, 5, 6);
97
- const plane1 = ParametricPlane_1.ParametricPlane.FromPointNormal(point, normal);
98
- const plane2 = ParametricPlane_1.ParametricPlane.FromPointNormal(point, normal);
99
- expect(plane1).toEqual(plane2);
100
- });
101
- //# sourceMappingURL=ParametricPlane.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParametricPlane.test.js","sourceRoot":"","sources":["../../../src/ValueObjects/ParametricPlane.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParametricLine } from \"./ParametricLine\";\r\nimport { ParametricPlane } from \"./ParametricPlane\";\r\nimport { Vector3 } from \"../ValueObjects\";\r\n\r\ntest(\"Setting from point and normal\", () => {\r\n const point = new Vector3(1, 2, 3);\r\n const normal = new Vector3(4, 5, 6);\r\n const plane = ParametricPlane.FromPointNormal(point, normal);\r\n\r\n const parameters = plane.GetParameters();\r\n\r\n const dot = Vector3.Dot(point, normal);\r\n expect(parameters.a).toEqual(normal.x);\r\n expect(parameters.b).toEqual(normal.y);\r\n expect(parameters.c).toEqual(normal.z);\r\n expect(parameters.d).toEqual(-dot);\r\n});\r\n\r\ntest(\"From three points\", () => {\r\n // From https://keisan.casio.com/exec/system/1223596129\r\n const A = new Vector3(1, 2, -2);\r\n const B = new Vector3(3, -2, 1);\r\n const C = new Vector3(5, 1, -4);\r\n\r\n const plane = ParametricPlane.FromThreePoints(A, B, C);\r\n const parameters = plane.GetParameters();\r\n\r\n expect(parameters.a).toEqual(11);\r\n expect(parameters.b).toEqual(16);\r\n expect(parameters.c).toEqual(14);\r\n expect(parameters.d).toEqual(-15);\r\n});\r\n\r\ntest(\"Intersection\", () => {\r\n const point = new Vector3(1, 1, 1);\r\n const dir = new Vector3(1, 0, 0);\r\n const line = ParametricLine.FromPointDirection(point, dir);\r\n\r\n const plane1 = new Vector3(-1, 0, 0);\r\n const plane2 = new Vector3(-1, 1, 0);\r\n const plane3 = new Vector3(-1, 0, 1);\r\n const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3);\r\n\r\n const intersect = plane.intersectLine(line);\r\n\r\n expect(intersect?.x).toBeCloseTo(-1);\r\n expect(intersect?.y).toBeCloseTo(1);\r\n expect(intersect?.z).toBeCloseTo(1);\r\n});\r\n\r\ntest(\"Intersection\", () => {\r\n // From http://www.ambrsoft.com/TrigoCalc/Plan3D/PlaneLineIntersection_.htm\r\n\r\n const line1 = new Vector3(4, 1, 1);\r\n const line2 = new Vector3(8, -2, -2);\r\n const line = ParametricLine.FromTwoPoint(line1, line2);\r\n\r\n const plane1 = new Vector3(-1, 2, 4);\r\n const plane2 = new Vector3(2, 1, 3);\r\n const plane3 = new Vector3(1, 3, 2);\r\n const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3);\r\n\r\n const intersect = plane.intersectLine(line);\r\n\r\n expect(intersect?.x).toBeCloseTo(2.93);\r\n expect(intersect?.y).toBeCloseTo(1.8);\r\n expect(intersect?.z).toBeCloseTo(1.8);\r\n});\r\n\r\ntest(\"If parallel, intersect should come back undefined\", () => {\r\n const line1 = new Vector3(0, 1, 0);\r\n const line2 = new Vector3(0, -1, 0);\r\n const line = ParametricLine.FromTwoPoint(line1, line2); // Vertical line going through the origin\r\n\r\n const plane1 = new Vector3(0, 0, 0);\r\n const plane2 = new Vector3(0, 1, 0);\r\n const plane3 = new Vector3(0, 0, 1);\r\n const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3); // y-z plane\r\n\r\n const intersect = plane.intersectLine(line);\r\n\r\n expect(intersect).toBeUndefined();\r\n});\r\n\r\ntest(\"XY Plane\", () => {\r\n const plane = ParametricPlane.XY();\r\n expect(plane.GetParameters()).toEqual({\r\n a: 0,\r\n b: 0,\r\n c: 1,\r\n d: 0,\r\n });\r\n});\r\n\r\ntest(\"ZX Plane\", () => {\r\n const plane = ParametricPlane.ZX();\r\n expect(plane.GetParameters()).toEqual({\r\n a: 0,\r\n b: 1,\r\n c: 0,\r\n d: 0,\r\n });\r\n});\r\n\r\ntest(\"YZ Plane\", () => {\r\n const plane = ParametricPlane.YZ();\r\n expect(plane.GetParameters()).toEqual({\r\n a: 1,\r\n b: 0,\r\n c: 0,\r\n d: 0,\r\n });\r\n});\r\n\r\ntest(\"Check for equality\", () => {\r\n const point = new Vector3(1, 2, 3);\r\n const normal = new Vector3(4, 5, 6);\r\n const plane1 = ParametricPlane.FromPointNormal(point, normal);\r\n const plane2 = ParametricPlane.FromPointNormal(point, normal);\r\n\r\n expect(plane1).toEqual(plane2);\r\n});\r\n"]}
@@ -1,290 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Quaternion = void 0;
4
- const Angle_1 = require("./Angle");
5
- const Matrix_1 = require("./Matrix");
6
- const Vector3_1 = require("./Vector3");
7
- class Quaternion {
8
- /**
9
- * Checks to see if two Quaternions are equal
10
- * @param a Quaternion A
11
- * @param b Quaternion B
12
- * @returns True if they are equal, otherwise false
13
- */
14
- static Equal(a, b) {
15
- if (a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w) {
16
- return true;
17
- }
18
- else {
19
- return false;
20
- }
21
- }
22
- /**
23
- * Checks two quaternions to see if they are close
24
- * @param a Quaterion A
25
- * @param b Quaterion B
26
- * @param threshold "Close" threshold. Defaults to 0.001
27
- * @returns True if each of Quaterion's components are within the threshold of each other
28
- */
29
- static Close(a, b, threshold = 0.001) {
30
- const aArray = a.toArray();
31
- const bArray = b.toArray();
32
- let areClose = true;
33
- for (let i = 0; i < 4; i++) {
34
- let diff = aArray[i] - bArray[i];
35
- if (diff < 0) {
36
- diff = -diff;
37
- }
38
- if (diff > threshold) {
39
- areClose = false;
40
- break;
41
- }
42
- }
43
- return areClose;
44
- }
45
- /**
46
- * Multiplies A*B
47
- * @param a Quaterion A
48
- * @param b Quaternion B
49
- * @returns The result of A*B
50
- */
51
- static Multiply(a, b) {
52
- const x = a.x * b.w + a.y * b.z - a.z * b.y + a.w * b.x;
53
- const y = -a.x * b.z + a.y * b.w + a.z * b.x + a.w * b.y;
54
- const z = a.x * b.y - a.y * b.x + a.z * b.w + a.w * b.z;
55
- const w = -a.x * b.x - a.y * b.y - a.z * b.z + a.w * b.w;
56
- return Quaternion.FromArray([x, y, z, w]);
57
- }
58
- /**
59
- * Creates a new Quaterion from an array of values
60
- * @param values The four values of the Quaterion: [x,y,z,w]
61
- * @returns A Quaterion
62
- */
63
- static FromArray(values) {
64
- return new Quaternion(values[0], values[1], values[2], values[3]);
65
- }
66
- /**
67
- * Creates a Quaterion from a Data Transfer Object
68
- * @param dto The Data Transfer Object
69
- * @returns The Quaternion
70
- */
71
- static FromDTO(dto) {
72
- return new Quaternion(dto.x, dto.y, dto.z, dto.w);
73
- }
74
- /**
75
- * Creates an Identity Quaternion
76
- * @returns An Identity Quaternion
77
- */
78
- static Identity() {
79
- return new Quaternion(0, 0, 0, 1);
80
- }
81
- /**
82
- * Creates an quaterion about an axis for a given angle
83
- * @param axis The rotation axis
84
- * @param angle The rotation angle
85
- * @returns The resulting Quaterion
86
- */
87
- static FromAngleAxis(axis, angle) {
88
- const sin = Math.sin(angle.radians / 2);
89
- const axisUnit = axis.unit;
90
- const w = Math.cos(angle.radians / 2);
91
- const x = axisUnit.x * sin;
92
- const y = axisUnit.y * sin;
93
- const z = axisUnit.z * sin;
94
- return new Quaternion(x, y, z, w);
95
- }
96
- static FromDirectionVector(direction) {
97
- if (direction.magnitude === 0) {
98
- return Quaternion.Identity();
99
- }
100
- const dirUnit = direction.unit;
101
- if (dirUnit.x === 0 && dirUnit.z === 0) {
102
- if (dirUnit.y > 0) {
103
- return Quaternion.FromYawPitchRoll(Angle_1.Angle.FromDegrees(0), Angle_1.Angle.FromDegrees(-90), Angle_1.Angle.FromDegrees(0));
104
- }
105
- else {
106
- return Quaternion.FromYawPitchRoll(Angle_1.Angle.FromDegrees(0), Angle_1.Angle.FromDegrees(90), Angle_1.Angle.FromDegrees(0));
107
- }
108
- }
109
- const yawRadians = -Math.atan2(dirUnit.z, dirUnit.x) + Math.PI / 2;
110
- const len = Math.sqrt(dirUnit.x * dirUnit.x + dirUnit.z * dirUnit.z);
111
- const pitchRadians = -Math.atan2(dirUnit.y, len);
112
- const yaw = Angle_1.Angle.FromRadians(yawRadians);
113
- const pitch = Angle_1.Angle.FromRadians(pitchRadians);
114
- const roll = Angle_1.Angle.FromRadians(0);
115
- return Quaternion.FromYawPitchRoll(yaw, pitch, roll);
116
- }
117
- /**
118
- * Froms up a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convetion
119
- * @param yaw defines the rotation around the y axis
120
- * @param pitch defines the rotation around the x axis
121
- * @param roll defines the rotation around the z axis
122
- * @returns the resulting quaterion
123
- */
124
- static FromYawPitchRoll(yaw, pitch, roll) {
125
- const halfRoll = roll.radians * 0.5;
126
- const halfPitch = pitch.radians * 0.5;
127
- const halfYaw = yaw.radians * 0.5;
128
- const sinRoll = Math.sin(halfRoll);
129
- const cosRoll = Math.cos(halfRoll);
130
- const sinPitch = Math.sin(halfPitch);
131
- const cosPitch = Math.cos(halfPitch);
132
- const sinYaw = Math.sin(halfYaw);
133
- const cosYaw = Math.cos(halfYaw);
134
- const x = cosYaw * sinPitch * cosRoll + sinYaw * cosPitch * sinRoll;
135
- const y = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;
136
- const z = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;
137
- const w = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;
138
- return new Quaternion(x, y, z, w);
139
- }
140
- /**
141
- * Creates a Quaternion from three euler angles.
142
- * @param x Rotation about the x axis
143
- * @param y Rotation about the y axis
144
- * @param z Rotation about the z axis
145
- * @returns The Quaterion
146
- */
147
- static FromEuler(x, y, z) {
148
- return this.FromYawPitchRoll(y, x, z);
149
- }
150
- /**
151
- * Returns a new Quaternion that is an invert of A
152
- * @param a The quaternion to invert
153
- * @returns The inverted Quaternion
154
- */
155
- static Inverse(a) {
156
- return new Quaternion(-a.x, -a.y, -a.z, a.w);
157
- }
158
- static AngleBetween(a, b) {
159
- const aInv = this.Inverse(a);
160
- const diffQ = this.Multiply(aInv, b);
161
- const angDeg = diffQ.angle.degrees;
162
- if (angDeg > 180) {
163
- return Angle_1.Angle.FromDegrees(360 - angDeg);
164
- }
165
- else {
166
- return diffQ.angle;
167
- }
168
- }
169
- /**
170
- * Spherically interpolates between two quaternions
171
- * @param initial The initial quaternion
172
- * @param final The final quaterion
173
- * @param percent The percent along the slerp. 0 will return the initial quaterion and 1 will return the final quaterion
174
- * @returns The interpolated quaterion
175
- */
176
- static Slerp(initial, final, percent) {
177
- let A;
178
- let B;
179
- let C = initial.x * final.x +
180
- initial.y * final.y +
181
- initial.z * final.z +
182
- initial.w * final.w;
183
- let flip = false;
184
- if (C < 0) {
185
- flip = true;
186
- C = -C;
187
- }
188
- if (C > 0.999999) {
189
- B = 1 - percent;
190
- A = flip ? -percent : percent;
191
- }
192
- else {
193
- const D = Math.acos(C);
194
- const E = 1.0 / Math.sin(D);
195
- B = Math.sin((1.0 - percent) * D) * E;
196
- A = flip ? -Math.sin(percent * D) * E : Math.sin(percent * D) * E;
197
- }
198
- const x = B * initial.x + A * final.x;
199
- const y = B * initial.y + A * final.y;
200
- const z = B * initial.z + A * final.z;
201
- const w = B * initial.w + A * final.w;
202
- return new Quaternion(x, y, z, w);
203
- }
204
- /**
205
- * Calculates a Quaternion from a rotation matrix
206
- * @param rotationMatrix A normalized, non-scaled rotation matrix
207
- * @returns The Quaterion
208
- */
209
- static FromRotationMatrix(rotationMatrix) {
210
- const m = rotationMatrix.m;
211
- const m11 = m[0];
212
- const m12 = m[4];
213
- const m13 = m[8];
214
- const m21 = m[1];
215
- const m22 = m[5];
216
- const m23 = m[9];
217
- const m31 = m[2];
218
- const m32 = m[6];
219
- const m33 = m[10];
220
- const trace = m11 + m22 + m33;
221
- let s;
222
- let x = 0;
223
- let y = 0;
224
- let z = 0;
225
- let w = 0;
226
- if (trace > 0) {
227
- s = 0.5 / Math.sqrt(trace + 1.0);
228
- w = 0.25 / s;
229
- x = (m32 - m23) * s;
230
- y = (m13 - m31) * s;
231
- z = (m21 - m12) * s;
232
- }
233
- else if (m11 > m22 && m11 > m33) {
234
- s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);
235
- w = (m32 - m23) / s;
236
- x = 0.25 * s;
237
- y = (m12 + m21) / s;
238
- z = (m13 + m31) / s;
239
- }
240
- else if (m22 > m33) {
241
- s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);
242
- w = (m13 - m31) / s;
243
- x = (m12 + m21) / s;
244
- y = 0.25 * s;
245
- z = (m23 + m32) / s;
246
- }
247
- else {
248
- s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);
249
- w = (m21 - m12) / s;
250
- x = (m13 + m31) / s;
251
- y = (m23 + m32) / s;
252
- z = 0.25 * s;
253
- }
254
- return new Quaternion(x, y, z, w);
255
- }
256
- static ToRotationMatrix(quat) {
257
- return Matrix_1.Matrix.Compose(Vector3_1.Vector3.One(), quat, Vector3_1.Vector3.Zero());
258
- }
259
- /**
260
- * Copy the quaternion to an array
261
- * @returns an array populated with 4 elements from the quaternion coordinates
262
- */
263
- toArray() {
264
- return [this.x, this.y, this.z, this.w];
265
- }
266
- get angle() {
267
- const angle = 2 * Math.acos(this.w);
268
- return Angle_1.Angle.FromRadians(angle);
269
- }
270
- get axis() {
271
- const x = this.x / Math.sqrt(1 - this.w * this.w);
272
- const y = this.y / Math.sqrt(1 - this.w * this.w);
273
- const z = this.z / Math.sqrt(1 - this.w * this.w);
274
- return new Vector3_1.Vector3(x, y, z);
275
- }
276
- /**
277
- * Get the quaternion as a Data Transfer Object
278
- */
279
- get dto() {
280
- return { x: this.x, y: this.y, z: this.z, w: this.w };
281
- }
282
- constructor(x, y, z, w) {
283
- this.x = x;
284
- this.y = y;
285
- this.z = z;
286
- this.w = w;
287
- }
288
- }
289
- exports.Quaternion = Quaternion;
290
- //# sourceMappingURL=Quaternion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Quaternion.js","sourceRoot":"","sources":["../../../src/ValueObjects/Quaternion.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \"./Angle\";\r\nimport { Matrix } from \"./Matrix\";\r\nimport { Vector3 } from \"./Vector3\";\r\n\r\nexport interface QuaternionDTO {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n}\r\n\r\nexport class Quaternion {\r\n /**\r\n * Checks to see if two Quaternions are equal\r\n * @param a Quaternion A\r\n * @param b Quaternion B\r\n * @returns True if they are equal, otherwise false\r\n */\r\n public static Equal(a: Quaternion, b: Quaternion): boolean {\r\n if (a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Checks two quaternions to see if they are close\r\n * @param a Quaterion A\r\n * @param b Quaterion B\r\n * @param threshold \"Close\" threshold. Defaults to 0.001\r\n * @returns True if each of Quaterion's components are within the threshold of each other\r\n */\r\n public static Close(\r\n a: Quaternion,\r\n b: Quaternion,\r\n threshold = 0.001\r\n ): boolean {\r\n const aArray = a.toArray();\r\n const bArray = b.toArray();\r\n\r\n let areClose = true;\r\n for (let i = 0; i < 4; i++) {\r\n let diff = aArray[i] - bArray[i];\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n if (diff > threshold) {\r\n areClose = false;\r\n break;\r\n }\r\n }\r\n return areClose;\r\n }\r\n\r\n /**\r\n * Multiplies A*B\r\n * @param a Quaterion A\r\n * @param b Quaternion B\r\n * @returns The result of A*B\r\n */\r\n public static Multiply(a: Quaternion, b: Quaternion): Quaternion {\r\n const x = a.x * b.w + a.y * b.z - a.z * b.y + a.w * b.x;\r\n const y = -a.x * b.z + a.y * b.w + a.z * b.x + a.w * b.y;\r\n const z = a.x * b.y - a.y * b.x + a.z * b.w + a.w * b.z;\r\n const w = -a.x * b.x - a.y * b.y - a.z * b.z + a.w * b.w;\r\n return Quaternion.FromArray([x, y, z, w]);\r\n }\r\n\r\n /**\r\n * Creates a new Quaterion from an array of values\r\n * @param values The four values of the Quaterion: [x,y,z,w]\r\n * @returns A Quaterion\r\n */\r\n public static FromArray(\r\n values: [number, number, number, number]\r\n ): Quaternion {\r\n return new Quaternion(values[0], values[1], values[2], values[3]);\r\n }\r\n\r\n /**\r\n * Creates a Quaterion from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Quaternion\r\n */\r\n public static FromDTO(dto: QuaternionDTO): Quaternion {\r\n return new Quaternion(dto.x, dto.y, dto.z, dto.w);\r\n }\r\n\r\n /**\r\n * Creates an Identity Quaternion\r\n * @returns An Identity Quaternion\r\n */\r\n public static Identity(): Quaternion {\r\n return new Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n /**\r\n * Creates an quaterion about an axis for a given angle\r\n * @param axis The rotation axis\r\n * @param angle The rotation angle\r\n * @returns The resulting Quaterion\r\n */\r\n public static FromAngleAxis(axis: Vector3, angle: Angle): Quaternion {\r\n const sin = Math.sin(angle.radians / 2);\r\n const axisUnit = axis.unit;\r\n const w = Math.cos(angle.radians / 2);\r\n const x = axisUnit.x * sin;\r\n const y = axisUnit.y * sin;\r\n const z = axisUnit.z * sin;\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static FromDirectionVector(direction: Vector3): Quaternion {\r\n if (direction.magnitude === 0) {\r\n return Quaternion.Identity();\r\n }\r\n\r\n const dirUnit = direction.unit;\r\n\r\n if (dirUnit.x === 0 && dirUnit.z === 0) {\r\n if (dirUnit.y > 0) {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(-90),\r\n Angle.FromDegrees(0)\r\n );\r\n } else {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(90),\r\n Angle.FromDegrees(0)\r\n );\r\n }\r\n }\r\n\r\n const yawRadians = -Math.atan2(dirUnit.z, dirUnit.x) + Math.PI / 2;\r\n const len = Math.sqrt(dirUnit.x * dirUnit.x + dirUnit.z * dirUnit.z);\r\n const pitchRadians = -Math.atan2(dirUnit.y, len);\r\n\r\n const yaw = Angle.FromRadians(yawRadians);\r\n const pitch = Angle.FromRadians(pitchRadians);\r\n const roll = Angle.FromRadians(0);\r\n\r\n return Quaternion.FromYawPitchRoll(yaw, pitch, roll);\r\n }\r\n\r\n /**\r\n * Froms up a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convetion\r\n * @param yaw defines the rotation around the y axis\r\n * @param pitch defines the rotation around the x axis\r\n * @param roll defines the rotation around the z axis\r\n * @returns the resulting quaterion\r\n */\r\n public static FromYawPitchRoll(\r\n yaw: Angle,\r\n pitch: Angle,\r\n roll: Angle\r\n ): Quaternion {\r\n const halfRoll = roll.radians * 0.5;\r\n const halfPitch = pitch.radians * 0.5;\r\n const halfYaw = yaw.radians * 0.5;\r\n\r\n const sinRoll = Math.sin(halfRoll);\r\n const cosRoll = Math.cos(halfRoll);\r\n const sinPitch = Math.sin(halfPitch);\r\n const cosPitch = Math.cos(halfPitch);\r\n const sinYaw = Math.sin(halfYaw);\r\n const cosYaw = Math.cos(halfYaw);\r\n\r\n const x = cosYaw * sinPitch * cosRoll + sinYaw * cosPitch * sinRoll;\r\n const y = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;\r\n const z = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;\r\n const w = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Creates a Quaternion from three euler angles.\r\n * @param x Rotation about the x axis\r\n * @param y Rotation about the y axis\r\n * @param z Rotation about the z axis\r\n * @returns The Quaterion\r\n */\r\n public static FromEuler(x: Angle, y: Angle, z: Angle) {\r\n return this.FromYawPitchRoll(y, x, z);\r\n }\r\n\r\n /**\r\n * Returns a new Quaternion that is an invert of A\r\n * @param a The quaternion to invert\r\n * @returns The inverted Quaternion\r\n */\r\n public static Inverse(a: Quaternion): Quaternion {\r\n return new Quaternion(-a.x, -a.y, -a.z, a.w);\r\n }\r\n\r\n public static AngleBetween(a: Quaternion, b: Quaternion): Angle {\r\n const aInv = this.Inverse(a);\r\n const diffQ = this.Multiply(aInv, b);\r\n\r\n const angDeg = diffQ.angle.degrees;\r\n if(angDeg > 180) {\r\n return Angle.FromDegrees(360 - angDeg)\r\n } else {\r\n return diffQ.angle;\r\n }\r\n }\r\n\r\n /**\r\n * Spherically interpolates between two quaternions\r\n * @param initial The initial quaternion\r\n * @param final The final quaterion\r\n * @param percent The percent along the slerp. 0 will return the initial quaterion and 1 will return the final quaterion\r\n * @returns The interpolated quaterion\r\n */\r\n public static Slerp(\r\n initial: Quaternion,\r\n final: Quaternion,\r\n percent: number\r\n ): Quaternion {\r\n let A;\r\n let B;\r\n let C =\r\n initial.x * final.x +\r\n initial.y * final.y +\r\n initial.z * final.z +\r\n initial.w * final.w;\r\n let flip = false;\r\n\r\n if (C < 0) {\r\n flip = true;\r\n C = -C;\r\n }\r\n\r\n if (C > 0.999999) {\r\n B = 1 - percent;\r\n A = flip ? -percent : percent;\r\n } else {\r\n const D = Math.acos(C);\r\n const E = 1.0 / Math.sin(D);\r\n B = Math.sin((1.0 - percent) * D) * E;\r\n A = flip ? -Math.sin(percent * D) * E : Math.sin(percent * D) * E;\r\n }\r\n\r\n const x = B * initial.x + A * final.x;\r\n const y = B * initial.y + A * final.y;\r\n const z = B * initial.z + A * final.z;\r\n const w = B * initial.w + A * final.w;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Calculates a Quaternion from a rotation matrix\r\n * @param rotationMatrix A normalized, non-scaled rotation matrix\r\n * @returns The Quaterion\r\n */\r\n public static FromRotationMatrix(rotationMatrix: Matrix): Quaternion {\r\n const m = rotationMatrix.m;\r\n const m11 = m[0];\r\n const m12 = m[4];\r\n const m13 = m[8];\r\n const m21 = m[1];\r\n const m22 = m[5];\r\n const m23 = m[9];\r\n const m31 = m[2];\r\n const m32 = m[6];\r\n const m33 = m[10];\r\n const trace = m11 + m22 + m33;\r\n let s;\r\n\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n let w = 0;\r\n if (trace > 0) {\r\n s = 0.5 / Math.sqrt(trace + 1.0);\r\n\r\n w = 0.25 / s;\r\n x = (m32 - m23) * s;\r\n y = (m13 - m31) * s;\r\n z = (m21 - m12) * s;\r\n } else if (m11 > m22 && m11 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\r\n\r\n w = (m32 - m23) / s;\r\n x = 0.25 * s;\r\n y = (m12 + m21) / s;\r\n z = (m13 + m31) / s;\r\n } else if (m22 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\r\n\r\n w = (m13 - m31) / s;\r\n x = (m12 + m21) / s;\r\n y = 0.25 * s;\r\n z = (m23 + m32) / s;\r\n } else {\r\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\r\n\r\n w = (m21 - m12) / s;\r\n x = (m13 + m31) / s;\r\n y = (m23 + m32) / s;\r\n z = 0.25 * s;\r\n }\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static ToRotationMatrix(quat: Quaternion): Matrix {\r\n return Matrix.Compose(Vector3.One(), quat, Vector3.Zero());\r\n }\r\n\r\n /**\r\n * Copy the quaternion to an array\r\n * @returns an array populated with 4 elements from the quaternion coordinates\r\n */\r\n toArray(): [number, number, number, number] {\r\n return [this.x, this.y, this.z, this.w];\r\n }\r\n\r\n get angle(): Angle {\r\n const angle = 2 * Math.acos(this.w);\r\n return Angle.FromRadians(angle);\r\n }\r\n\r\n get axis(): Vector3 {\r\n const x = this.x / Math.sqrt(1 - this.w * this.w);\r\n const y = this.y / Math.sqrt(1 - this.w * this.w);\r\n const z = this.z / Math.sqrt(1 - this.w * this.w);\r\n return new Vector3(x, y, z);\r\n }\r\n\r\n /**\r\n * Get the quaternion as a Data Transfer Object\r\n */\r\n get dto(): QuaternionDTO {\r\n return { x: this.x, y: this.y, z: this.z, w: this.w };\r\n }\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n readonly z: number;\r\n readonly w: number;\r\n\r\n constructor(x: number, y: number, z: number, w: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.w = w;\r\n }\r\n}\r\n"]}