@itwin/core-geometry 3.6.0-dev.10 → 3.6.0-dev.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/Geometry.d.ts +7 -8
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +7 -8
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +1 -0
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +1 -0
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +1 -0
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +1 -0
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +1 -0
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.d.ts +42 -8
- package/lib/cjs/geometry3d/OrderedRotationAngles.d.ts.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js +140 -85
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts +1 -0
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +1 -0
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -3
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +6 -5
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/Geometry.d.ts +7 -8
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +7 -8
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +1 -0
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +1 -0
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +1 -0
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +1 -0
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +1 -0
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.d.ts +42 -8
- package/lib/esm/geometry3d/OrderedRotationAngles.d.ts.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js +140 -85
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.d.ts +1 -0
- package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +1 -0
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -3
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +6 -5
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/package.json +4 -4
|
@@ -5,19 +5,26 @@ import { AxisOrder } from "../Geometry";
|
|
|
5
5
|
import { Angle } from "./Angle";
|
|
6
6
|
import { Matrix3d } from "./Matrix3d";
|
|
7
7
|
/**
|
|
8
|
-
* *
|
|
9
|
-
*
|
|
8
|
+
* * represents a non-trivial rotation using three simple axis rotation angles and an
|
|
9
|
+
* order in which to apply them.
|
|
10
|
+
* * This class accommodates application-specific interpretation of "multiplying 3 rotation matrices" with regard to
|
|
10
11
|
* * Whether a "vector" is a "row" or a "column"
|
|
11
|
-
* * The order in which the X,Y,
|
|
12
|
+
* * The order in which the X,Y,Z rotations are applied.
|
|
12
13
|
* * Within the imodel geometry library, the preferred rotation order is encapsulated in `YawPitchRollAngles`.
|
|
13
14
|
* @alpha
|
|
14
15
|
*/
|
|
15
16
|
export declare class OrderedRotationAngles {
|
|
17
|
+
/** rotation around x */
|
|
16
18
|
private _x;
|
|
19
|
+
/** rotation around y */
|
|
17
20
|
private _y;
|
|
21
|
+
/** rotation around z */
|
|
18
22
|
private _z;
|
|
23
|
+
/** rotation order. For example XYZ means to rotate around x axis first, then y axis, and finally Z axis */
|
|
19
24
|
private _order;
|
|
25
|
+
/** treat vectors as matrix columns */
|
|
20
26
|
private static _sTreatVectorsAsColumns;
|
|
27
|
+
/** constructor */
|
|
21
28
|
private constructor();
|
|
22
29
|
/** (Property accessor) Return the `AxisOrder` controlling matrix multiplication order. */
|
|
23
30
|
get order(): AxisOrder;
|
|
@@ -42,20 +49,47 @@ export declare class OrderedRotationAngles {
|
|
|
42
49
|
/** Flag controlling whether vectors are treated as rows or as columns */
|
|
43
50
|
static get treatVectorsAsColumns(): boolean;
|
|
44
51
|
static set treatVectorsAsColumns(value: boolean);
|
|
45
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Create an OrderedRotationAngles from three angles and an ordering in which to apply them when rotating.
|
|
46
54
|
* @param xRotation rotation around x
|
|
47
55
|
* @param yRotation rotation around y
|
|
48
56
|
* @param zRotation rotation around z
|
|
49
|
-
* @param
|
|
57
|
+
* @param order left to right order of axis names identifies the order that rotations are applied.
|
|
58
|
+
* For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.
|
|
59
|
+
* * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation
|
|
60
|
+
* matrix multiplication would be zRot*yRot*xRot
|
|
50
61
|
*/
|
|
51
62
|
static createAngles(xRotation: Angle, yRotation: Angle, zRotation: Angle, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles;
|
|
52
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* Create an OrderedRotationAngles from three angles (in radians) and an ordering in which to apply
|
|
65
|
+
* them when rotating.
|
|
66
|
+
* @param xRadians rotation around x
|
|
67
|
+
* @param yRadians rotation around y
|
|
68
|
+
* @param zRadians rotation around z
|
|
69
|
+
* @param order left to right order of axis names identifies the order that rotations are applied.
|
|
70
|
+
* For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.
|
|
71
|
+
* * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation
|
|
72
|
+
* matrix multiplication would be zRot*yRot*xRot
|
|
73
|
+
*/
|
|
53
74
|
static createRadians(xRadians: number, yRadians: number, zRadians: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles;
|
|
54
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Create an OrderedRotationAngles from three angles (in degrees) and an ordering in which to apply
|
|
77
|
+
* them when rotating.
|
|
78
|
+
* @param xRadians rotation around x
|
|
79
|
+
* @param yRadians rotation around y
|
|
80
|
+
* @param zRadians rotation around z
|
|
81
|
+
* @param order left to right order of axis names identifies the order that rotations are applied.
|
|
82
|
+
* For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.
|
|
83
|
+
* * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation
|
|
84
|
+
* matrix multiplication would be zRot*yRot*xRot
|
|
85
|
+
*/
|
|
55
86
|
static createDegrees(xDegrees: number, yDegrees: number, zDegrees: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles;
|
|
56
87
|
/** Create an OrderedRotationAngles from a 3x3 rotational matrix, given the ordering of axis rotations that the matrix derives from. */
|
|
57
88
|
static createFromMatrix3d(matrix: Matrix3d, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles;
|
|
58
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Create a 3x3 rotational matrix from this OrderedRotationAngles.
|
|
91
|
+
** math details can be found at docs/learning/geometry/Angle.md
|
|
92
|
+
**/
|
|
59
93
|
toMatrix3d(result?: Matrix3d): Matrix3d;
|
|
60
94
|
}
|
|
61
95
|
//# sourceMappingURL=OrderedRotationAngles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderedRotationAngles.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/OrderedRotationAngles.ts"],"names":[],"mappings":"AAKA;;GAEG;
|
|
1
|
+
{"version":3,"file":"OrderedRotationAngles.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/OrderedRotationAngles.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;IAChC,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAQ;IAClB,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAQ;IAClB,wBAAwB;IACxB,OAAO,CAAC,EAAE,CAAQ;IAClB,2GAA2G;IAC3G,OAAO,CAAC,MAAM,CAAY;IAC1B,sCAAsC;IACtC,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAkB;IACxD,kBAAkB;IAClB,OAAO;IAMP,0FAA0F;IAC1F,IAAW,KAAK,IAAI,SAAS,CAE5B;IACD,gFAAgF;IAChF,IAAW,MAAM,IAAI,KAAK,CAEzB;IACD,gFAAgF;IAChF,IAAW,MAAM,IAAI,KAAK,CAEzB;IACD,gFAAgF;IAChF,IAAW,MAAM,IAAI,KAAK,CAEzB;IACD,4EAA4E;IAC5E,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,4EAA4E;IAC5E,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,4EAA4E;IAC5E,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,4EAA4E;IAC5E,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,4EAA4E;IAC5E,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,4EAA4E;IAC5E,IAAW,QAAQ,IAAI,MAAM,CAE5B;IACD,yEAAyE;IACzE,WAAkB,qBAAqB,IAAI,OAAO,CAEjD;IACD,WAAkB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAErD;IACD;;;;;;;;;OASG;WACW,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAC/F,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAUxD;;;;;;;;;;OAUG;WACW,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAChG,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAexD;;;;;;;;;;OAUG;WACW,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAChG,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAexD,uIAAuI;WACzH,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAiG3H;;;QAGI;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;CA2D/C"}
|
|
@@ -11,15 +11,18 @@ exports.OrderedRotationAngles = void 0;
|
|
|
11
11
|
const Geometry_1 = require("../Geometry");
|
|
12
12
|
const Angle_1 = require("./Angle");
|
|
13
13
|
const Matrix3d_1 = require("./Matrix3d");
|
|
14
|
+
/* cspell:word cxcz, cxsz, cxcy, cxsy, sxcz, sxsz, sxcy, sxsy, cycz, cysz, sycz, sysz */
|
|
14
15
|
/**
|
|
15
|
-
* *
|
|
16
|
-
*
|
|
16
|
+
* * represents a non-trivial rotation using three simple axis rotation angles and an
|
|
17
|
+
* order in which to apply them.
|
|
18
|
+
* * This class accommodates application-specific interpretation of "multiplying 3 rotation matrices" with regard to
|
|
17
19
|
* * Whether a "vector" is a "row" or a "column"
|
|
18
|
-
* * The order in which the X,Y,
|
|
20
|
+
* * The order in which the X,Y,Z rotations are applied.
|
|
19
21
|
* * Within the imodel geometry library, the preferred rotation order is encapsulated in `YawPitchRollAngles`.
|
|
20
22
|
* @alpha
|
|
21
23
|
*/
|
|
22
24
|
class OrderedRotationAngles {
|
|
25
|
+
/** constructor */
|
|
23
26
|
constructor(x, y, z, axisOrder) {
|
|
24
27
|
this._x = x;
|
|
25
28
|
this._y = y;
|
|
@@ -27,33 +30,61 @@ class OrderedRotationAngles {
|
|
|
27
30
|
this._order = axisOrder;
|
|
28
31
|
}
|
|
29
32
|
/** (Property accessor) Return the `AxisOrder` controlling matrix multiplication order. */
|
|
30
|
-
get order() {
|
|
33
|
+
get order() {
|
|
34
|
+
return this._order;
|
|
35
|
+
}
|
|
31
36
|
/** (Property accessor) Return the strongly typed angle of rotation around x. */
|
|
32
|
-
get xAngle() {
|
|
37
|
+
get xAngle() {
|
|
38
|
+
return this._x.clone();
|
|
39
|
+
}
|
|
33
40
|
/** (Property accessor) Return the strongly typed angle of rotation around y. */
|
|
34
|
-
get yAngle() {
|
|
41
|
+
get yAngle() {
|
|
42
|
+
return this._y.clone();
|
|
43
|
+
}
|
|
35
44
|
/** (Property accessor) Return the strongly typed angle of rotation around z. */
|
|
36
|
-
get zAngle() {
|
|
45
|
+
get zAngle() {
|
|
46
|
+
return this._z.clone();
|
|
47
|
+
}
|
|
37
48
|
/** (Property accessor) Return the angle of rotation around x, in degrees */
|
|
38
|
-
get xDegrees() {
|
|
49
|
+
get xDegrees() {
|
|
50
|
+
return this._x.degrees;
|
|
51
|
+
}
|
|
39
52
|
/** (Property accessor) Return the angle of rotation around y, in degrees */
|
|
40
|
-
get xRadians() {
|
|
53
|
+
get xRadians() {
|
|
54
|
+
return this._x.radians;
|
|
55
|
+
}
|
|
41
56
|
/** (Property accessor) Return the angle of rotation around z, in degrees */
|
|
42
|
-
get yDegrees() {
|
|
57
|
+
get yDegrees() {
|
|
58
|
+
return this._y.degrees;
|
|
59
|
+
}
|
|
43
60
|
/** (Property accessor) Return the angle of rotation around x, in radians */
|
|
44
|
-
get yRadians() {
|
|
61
|
+
get yRadians() {
|
|
62
|
+
return this._y.radians;
|
|
63
|
+
}
|
|
45
64
|
/** (Property accessor) Return the angle of rotation around y, in radians */
|
|
46
|
-
get zDegrees() {
|
|
65
|
+
get zDegrees() {
|
|
66
|
+
return this._z.degrees;
|
|
67
|
+
}
|
|
47
68
|
/** (Property accessor) Return the angle of rotation around z, in radians */
|
|
48
|
-
get zRadians() {
|
|
69
|
+
get zRadians() {
|
|
70
|
+
return this._z.radians;
|
|
71
|
+
}
|
|
49
72
|
/** Flag controlling whether vectors are treated as rows or as columns */
|
|
50
|
-
static get treatVectorsAsColumns() {
|
|
51
|
-
|
|
52
|
-
|
|
73
|
+
static get treatVectorsAsColumns() {
|
|
74
|
+
return OrderedRotationAngles._sTreatVectorsAsColumns;
|
|
75
|
+
}
|
|
76
|
+
static set treatVectorsAsColumns(value) {
|
|
77
|
+
OrderedRotationAngles._sTreatVectorsAsColumns = value;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create an OrderedRotationAngles from three angles and an ordering in which to apply them when rotating.
|
|
53
81
|
* @param xRotation rotation around x
|
|
54
82
|
* @param yRotation rotation around y
|
|
55
83
|
* @param zRotation rotation around z
|
|
56
|
-
* @param
|
|
84
|
+
* @param order left to right order of axis names identifies the order that rotations are applied.
|
|
85
|
+
* For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.
|
|
86
|
+
* * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation
|
|
87
|
+
* matrix multiplication would be zRot*yRot*xRot
|
|
57
88
|
*/
|
|
58
89
|
static createAngles(xRotation, yRotation, zRotation, order, result) {
|
|
59
90
|
if (result) {
|
|
@@ -65,7 +96,17 @@ class OrderedRotationAngles {
|
|
|
65
96
|
}
|
|
66
97
|
return new OrderedRotationAngles(xRotation.clone(), yRotation.clone(), zRotation.clone(), order);
|
|
67
98
|
}
|
|
68
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Create an OrderedRotationAngles from three angles (in radians) and an ordering in which to apply
|
|
101
|
+
* them when rotating.
|
|
102
|
+
* @param xRadians rotation around x
|
|
103
|
+
* @param yRadians rotation around y
|
|
104
|
+
* @param zRadians rotation around z
|
|
105
|
+
* @param order left to right order of axis names identifies the order that rotations are applied.
|
|
106
|
+
* For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.
|
|
107
|
+
* * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation
|
|
108
|
+
* matrix multiplication would be zRot*yRot*xRot
|
|
109
|
+
*/
|
|
69
110
|
static createRadians(xRadians, yRadians, zRadians, order, result) {
|
|
70
111
|
if (result) {
|
|
71
112
|
result._x.setRadians(xRadians);
|
|
@@ -76,7 +117,17 @@ class OrderedRotationAngles {
|
|
|
76
117
|
}
|
|
77
118
|
return new OrderedRotationAngles(Angle_1.Angle.createRadians(xRadians), Angle_1.Angle.createRadians(yRadians), Angle_1.Angle.createRadians(zRadians), order);
|
|
78
119
|
}
|
|
79
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Create an OrderedRotationAngles from three angles (in degrees) and an ordering in which to apply
|
|
122
|
+
* them when rotating.
|
|
123
|
+
* @param xRadians rotation around x
|
|
124
|
+
* @param yRadians rotation around y
|
|
125
|
+
* @param zRadians rotation around z
|
|
126
|
+
* @param order left to right order of axis names identifies the order that rotations are applied.
|
|
127
|
+
* For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.
|
|
128
|
+
* * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation
|
|
129
|
+
* matrix multiplication would be zRot*yRot*xRot
|
|
130
|
+
*/
|
|
80
131
|
static createDegrees(xDegrees, yDegrees, zDegrees, order, result) {
|
|
81
132
|
if (result) {
|
|
82
133
|
result._x.setDegrees(xDegrees);
|
|
@@ -89,87 +140,95 @@ class OrderedRotationAngles {
|
|
|
89
140
|
}
|
|
90
141
|
/** Create an OrderedRotationAngles from a 3x3 rotational matrix, given the ordering of axis rotations that the matrix derives from. */
|
|
91
142
|
static createFromMatrix3d(matrix, order, result) {
|
|
92
|
-
|
|
93
|
-
let
|
|
94
|
-
let
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
143
|
+
// treat vector as columns
|
|
144
|
+
let m11 = matrix.coffs[0], m12 = matrix.coffs[1], m13 = matrix.coffs[2];
|
|
145
|
+
let m21 = matrix.coffs[3], m22 = matrix.coffs[4], m23 = matrix.coffs[5];
|
|
146
|
+
let m31 = matrix.coffs[6], m32 = matrix.coffs[7], m33 = matrix.coffs[8];
|
|
147
|
+
// treat vector as rows
|
|
148
|
+
if (!OrderedRotationAngles.treatVectorsAsColumns) {
|
|
149
|
+
m11 = matrix.coffs[0], m12 = matrix.coffs[3], m13 = matrix.coffs[6];
|
|
150
|
+
m21 = matrix.coffs[1], m22 = matrix.coffs[4], m23 = matrix.coffs[7];
|
|
151
|
+
m31 = matrix.coffs[2], m32 = matrix.coffs[5], m33 = matrix.coffs[8];
|
|
100
152
|
}
|
|
101
153
|
let xRad;
|
|
102
154
|
let yRad;
|
|
103
155
|
let zRad;
|
|
104
156
|
switch (order) {
|
|
105
157
|
case Geometry_1.AxisOrder.XYZ: {
|
|
106
|
-
yRad = Math.asin(Math.max(-1, Math.min(1,
|
|
107
|
-
if (Math.abs(
|
|
108
|
-
xRad = Math.atan2(
|
|
109
|
-
zRad = Math.atan2(
|
|
158
|
+
yRad = Math.asin(Math.max(-1, Math.min(1, -m31))); // limit asin domain to [-1,1]
|
|
159
|
+
if (Math.abs(m31) < 0.99999) {
|
|
160
|
+
xRad = Math.atan2(m32, m33);
|
|
161
|
+
zRad = Math.atan2(m21, m11);
|
|
110
162
|
}
|
|
111
163
|
else {
|
|
112
|
-
|
|
164
|
+
/*
|
|
165
|
+
* If Math.abs(m31) = 1 then yRad = 90 degrees and therefore, we have a gimbal lock.
|
|
166
|
+
* This means xRad and zRad can be anything as long as their sum xRad + zRad is constant.
|
|
167
|
+
* so we can pick zRad = 0 and calculate xRad (or pick xRad = 0 and calculate zRad).
|
|
168
|
+
* Math details can be found
|
|
169
|
+
* https://en.wikipedia.org/wiki/Gimbal_lock#Loss_of_a_degree_of_freedom_with_Euler_angles
|
|
170
|
+
*/
|
|
171
|
+
xRad = Math.atan2(-m23, m22);
|
|
113
172
|
zRad = 0;
|
|
114
173
|
}
|
|
115
174
|
break;
|
|
116
175
|
}
|
|
117
176
|
case Geometry_1.AxisOrder.YXZ: {
|
|
118
|
-
xRad = Math.asin(
|
|
119
|
-
if (Math.abs(
|
|
120
|
-
yRad = Math.atan2(
|
|
121
|
-
zRad = Math.atan2(
|
|
177
|
+
xRad = Math.asin(Math.max(-1, Math.min(1, m32))); // limit asin domain to [-1,1]
|
|
178
|
+
if (Math.abs(m32) < 0.99999) {
|
|
179
|
+
yRad = Math.atan2(-m31, m33);
|
|
180
|
+
zRad = Math.atan2(-m12, m22);
|
|
122
181
|
}
|
|
123
182
|
else {
|
|
124
|
-
yRad = Math.atan2(
|
|
183
|
+
yRad = Math.atan2(m13, m11);
|
|
125
184
|
zRad = 0;
|
|
126
185
|
}
|
|
127
186
|
break;
|
|
128
187
|
}
|
|
129
188
|
case Geometry_1.AxisOrder.ZXY: {
|
|
130
|
-
xRad = Math.asin(Math.max(-1, Math.min(1,
|
|
131
|
-
if (Math.abs(
|
|
132
|
-
yRad = Math.atan2(
|
|
133
|
-
zRad = Math.atan2(
|
|
189
|
+
xRad = Math.asin(Math.max(-1, Math.min(1, -m23))); // limit asin domain to [-1,1]
|
|
190
|
+
if (Math.abs(m23) < 0.99999) {
|
|
191
|
+
yRad = Math.atan2(m13, m33);
|
|
192
|
+
zRad = Math.atan2(m21, m22);
|
|
134
193
|
}
|
|
135
194
|
else {
|
|
136
195
|
yRad = 0;
|
|
137
|
-
zRad = Math.atan2(
|
|
196
|
+
zRad = Math.atan2(-m12, m11);
|
|
138
197
|
}
|
|
139
198
|
break;
|
|
140
199
|
}
|
|
141
200
|
case Geometry_1.AxisOrder.ZYX: {
|
|
142
|
-
yRad =
|
|
143
|
-
if (Math.abs(
|
|
144
|
-
xRad = Math.atan2(
|
|
145
|
-
zRad = Math.atan2(
|
|
201
|
+
yRad = Math.asin(Math.max(-1, Math.min(1, m13))); // limit asin domain to [-1,1]
|
|
202
|
+
if (Math.abs(m13) < 0.99999) {
|
|
203
|
+
xRad = Math.atan2(-m23, m33);
|
|
204
|
+
zRad = Math.atan2(-m12, m11);
|
|
146
205
|
}
|
|
147
206
|
else {
|
|
148
207
|
xRad = 0;
|
|
149
|
-
zRad = Math.atan2(
|
|
208
|
+
zRad = Math.atan2(m21, m22);
|
|
150
209
|
}
|
|
151
210
|
break;
|
|
152
211
|
}
|
|
153
212
|
case Geometry_1.AxisOrder.YZX: {
|
|
154
|
-
zRad = Math.asin(Math.max(-1, Math.min(1,
|
|
155
|
-
if (Math.abs(
|
|
156
|
-
xRad = Math.atan2(
|
|
157
|
-
yRad = Math.atan2(
|
|
213
|
+
zRad = Math.asin(Math.max(-1, Math.min(1, -m12))); // limit asin domain to [-1,1]
|
|
214
|
+
if (Math.abs(m12) < 0.99999) {
|
|
215
|
+
xRad = Math.atan2(m32, m22);
|
|
216
|
+
yRad = Math.atan2(m13, m11);
|
|
158
217
|
}
|
|
159
218
|
else {
|
|
160
219
|
xRad = 0;
|
|
161
|
-
yRad = Math.atan2(
|
|
220
|
+
yRad = Math.atan2(-m31, m33);
|
|
162
221
|
}
|
|
163
222
|
break;
|
|
164
223
|
}
|
|
165
224
|
case Geometry_1.AxisOrder.XZY: {
|
|
166
|
-
zRad =
|
|
167
|
-
if (Math.abs(
|
|
168
|
-
xRad = Math.atan2(
|
|
169
|
-
yRad = Math.atan2(
|
|
225
|
+
zRad = Math.asin(Math.max(-1, Math.min(1, m21))); // limit asin domain to [-1,1]
|
|
226
|
+
if (Math.abs(m21) < 0.99999) {
|
|
227
|
+
xRad = Math.atan2(-m23, m22);
|
|
228
|
+
yRad = Math.atan2(-m31, m11);
|
|
170
229
|
}
|
|
171
230
|
else {
|
|
172
|
-
xRad = Math.atan2(
|
|
231
|
+
xRad = Math.atan2(m32, m33);
|
|
173
232
|
yRad = 0;
|
|
174
233
|
}
|
|
175
234
|
break;
|
|
@@ -178,55 +237,51 @@ class OrderedRotationAngles {
|
|
|
178
237
|
xRad = yRad = zRad = 0;
|
|
179
238
|
}
|
|
180
239
|
}
|
|
181
|
-
if (OrderedRotationAngles.treatVectorsAsColumns)
|
|
182
|
-
return OrderedRotationAngles.createRadians(-xRad, -yRad, -zRad, order, result);
|
|
183
240
|
return OrderedRotationAngles.createRadians(xRad, yRad, zRad, order, result);
|
|
184
241
|
}
|
|
185
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* Create a 3x3 rotational matrix from this OrderedRotationAngles.
|
|
244
|
+
** math details can be found at docs/learning/geometry/Angle.md
|
|
245
|
+
**/
|
|
186
246
|
toMatrix3d(result) {
|
|
187
|
-
const rot = result !== undefined ? result : new Matrix3d_1.Matrix3d();
|
|
247
|
+
const rot = (result !== undefined) ? result : new Matrix3d_1.Matrix3d();
|
|
188
248
|
const axisOrder = this.order;
|
|
189
249
|
const x = this.xAngle, y = this.yAngle, z = this.zAngle;
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
b = -b;
|
|
198
|
-
d = -d;
|
|
199
|
-
f = -f;
|
|
200
|
-
}
|
|
250
|
+
const cx = x.cos(), sx = x.sin();
|
|
251
|
+
const cy = y.cos(), sy = y.sin();
|
|
252
|
+
const cz = z.cos(), sz = z.sin();
|
|
253
|
+
const cxcz = cx * cz, cxsz = cx * sz, cxcy = cx * cy, cxsy = cx * sy;
|
|
254
|
+
const sxcz = sx * cz, sxsz = sx * sz, sxcy = sx * cy, sxsy = sx * sy;
|
|
255
|
+
const cycz = cy * cz, cysz = cy * sz, sycz = sy * cz, sysz = sy * sz;
|
|
256
|
+
// the rotation matrix we build below is created using column-based base rotation matrixes
|
|
201
257
|
if (axisOrder === Geometry_1.AxisOrder.XYZ) {
|
|
202
|
-
|
|
203
|
-
rot.setRowValues(c * e, af + be * d, bf - ae * d, -c * f, ae - bf * d, be + af * d, d, -b * c, a * c);
|
|
258
|
+
rot.setRowValues(cy * cz, sxcz * sy - cxsz, cxcz * sy + sxsz, cy * sz, cxcz + sxsz * sy, cxsz * sy - sxcz, -sy, sx * cy, cx * cy);
|
|
204
259
|
}
|
|
205
260
|
else if (axisOrder === Geometry_1.AxisOrder.YXZ) {
|
|
206
|
-
|
|
207
|
-
rot.setRowValues(ce + df * b, a * f, cf * b - de, de * b - cf, a * e, df + ce * b, a * d, -b, a * c);
|
|
261
|
+
rot.setRowValues(cycz - sysz * sx, -cx * sz, cysz * sx + sycz, sycz * sx + cysz, cx * cz, sysz - cycz * sx, -cx * sy, sx, cx * cy);
|
|
208
262
|
}
|
|
209
263
|
else if (axisOrder === Geometry_1.AxisOrder.ZXY) {
|
|
210
|
-
|
|
211
|
-
rot.setRowValues(ce - df * b, cf + de * b, -a * d, -a * f, a * e, b, de + cf * b, df - ce * b, a * c);
|
|
264
|
+
rot.setRowValues(cycz + sysz * sx, sycz * sx - cysz, cx * sy, cx * sz, cx * cz, -sx, cysz * sx - sycz, cycz * sx + sysz, cx * cy);
|
|
212
265
|
}
|
|
213
266
|
else if (axisOrder === Geometry_1.AxisOrder.ZYX) {
|
|
214
|
-
|
|
215
|
-
rot.setRowValues(c * e, c * f, -d, be * d - af, bf * d + ae, b * c, ae * d + bf, af * d - be, a * c);
|
|
267
|
+
rot.setRowValues(cy * cz, -cy * sz, sy, sxcz * sy + cxsz, cxcz - sxsz * sy, -sx * cy, sxsz - cxcz * sy, sxcz + cxsz * sy, cx * cy);
|
|
216
268
|
}
|
|
217
269
|
else if (axisOrder === Geometry_1.AxisOrder.YZX) {
|
|
218
|
-
|
|
219
|
-
rot.setRowValues(c * e, f, -d * e, bd - ac * f, a * e, ad * f + bc, bc * f + ad, -b * e, ac - bd * f);
|
|
270
|
+
rot.setRowValues(cy * cz, -sz, sy * cz, sxsy + cxcy * sz, cx * cz, cxsy * sz - sxcy, sxcy * sz - cxsy, sx * cz, cxcy + sxsy * sz);
|
|
220
271
|
}
|
|
221
272
|
else if (axisOrder === Geometry_1.AxisOrder.XZY) {
|
|
222
|
-
|
|
223
|
-
|
|
273
|
+
rot.setRowValues(cy * cz, sxsy - cxcy * sz, cxsy + sxcy * sz, sz, cx * cz, -sx * cz, -sy * cz, sxcy + cxsy * sz, cxcy - sxsy * sz);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
rot.setIdentity();
|
|
224
277
|
}
|
|
225
|
-
if
|
|
278
|
+
// if we need row-based rotation matrix, we transpose the rotation matrix
|
|
279
|
+
if (!OrderedRotationAngles.treatVectorsAsColumns)
|
|
226
280
|
rot.transposeInPlace();
|
|
227
281
|
return rot;
|
|
228
282
|
}
|
|
229
283
|
}
|
|
230
284
|
exports.OrderedRotationAngles = OrderedRotationAngles;
|
|
285
|
+
/** treat vectors as matrix columns */
|
|
231
286
|
OrderedRotationAngles._sTreatVectorsAsColumns = false;
|
|
232
287
|
//# sourceMappingURL=OrderedRotationAngles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderedRotationAngles.js","sourceRoot":"","sources":["../../../src/geometry3d/OrderedRotationAngles.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { AxisOrder } from \"../Geometry\";\r\nimport { Angle } from \"./Angle\";\r\nimport { Matrix3d } from \"./Matrix3d\";\r\n\r\n/**\r\n * * OrderedRotationAngles represents a non-trivial rotation using three simple axis rotation angles, and an order in which to apply them.\r\n * * This class accommodates application-specific interpretation of \"Multiplying 3 rotation matrices\" with regard to\r\n * * Whether a \"vector\" is a \"row\" or a \"column\"\r\n * * The order in which the X,Y, Z rotations are applied.\r\n * * Within the imodel geometry library, the preferred rotation order is encapsulated in `YawPitchRollAngles`.\r\n * @alpha\r\n */\r\nexport class OrderedRotationAngles {\r\n private _x: Angle;\r\n private _y: Angle;\r\n private _z: Angle;\r\n private _order: AxisOrder;\r\n private static _sTreatVectorsAsColumns: boolean = false;\r\n\r\n private constructor(x: Angle, y: Angle, z: Angle, axisOrder: AxisOrder) {\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n this._order = axisOrder;\r\n }\r\n\r\n /** (Property accessor) Return the `AxisOrder` controlling matrix multiplication order. */\r\n public get order(): AxisOrder { return this._order; }\r\n /** (Property accessor) Return the strongly typed angle of rotation around x. */\r\n public get xAngle(): Angle { return this._x.clone(); }\r\n /** (Property accessor) Return the strongly typed angle of rotation around y. */\r\n public get yAngle(): Angle { return this._y.clone(); }\r\n /** (Property accessor) Return the strongly typed angle of rotation around z. */\r\n public get zAngle(): Angle { return this._z.clone(); }\r\n /** (Property accessor) Return the angle of rotation around x, in degrees */\r\n public get xDegrees(): number { return this._x.degrees; }\r\n /** (Property accessor) Return the angle of rotation around y, in degrees */\r\n public get xRadians(): number { return this._x.radians; }\r\n /** (Property accessor) Return the angle of rotation around z, in degrees */\r\n public get yDegrees(): number { return this._y.degrees; }\r\n /** (Property accessor) Return the angle of rotation around x, in radians */\r\n public get yRadians(): number { return this._y.radians; }\r\n /** (Property accessor) Return the angle of rotation around y, in radians */\r\n public get zDegrees(): number { return this._z.degrees; }\r\n /** (Property accessor) Return the angle of rotation around z, in radians */\r\n public get zRadians(): number { return this._z.radians; }\r\n /** Flag controlling whether vectors are treated as rows or as columns */\r\n public static get treatVectorsAsColumns(): boolean { return OrderedRotationAngles._sTreatVectorsAsColumns; }\r\n public static set treatVectorsAsColumns(value: boolean) { OrderedRotationAngles._sTreatVectorsAsColumns = value; }\r\n\r\n /** Create an OrderedRotationAngles from three angles and an ordering in which to apply them when rotating.\r\n * @param xRotation rotation around x\r\n * @param yRotation rotation around y\r\n * @param zRotation rotation around z\r\n * @param axisOrder right to left order of axis names identifies the order that rotations are applied to xyz data.\r\n */\r\n public static createAngles(xRotation: Angle, yRotation: Angle, zRotation: Angle, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles {\r\n if (result) {\r\n result._x.setFrom(xRotation);\r\n result._y.setFrom(yRotation);\r\n result._z.setFrom(zRotation);\r\n result._order = order;\r\n return result;\r\n }\r\n return new OrderedRotationAngles(xRotation.clone(), yRotation.clone(), zRotation.clone(), order);\r\n }\r\n\r\n /** Create an OrderedRotationAngles from three angles (in radians) and an ordering in which to apply them when rotating. */\r\n public static createRadians(xRadians: number, yRadians: number, zRadians: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles {\r\n if (result) {\r\n result._x.setRadians(xRadians);\r\n result._y.setRadians(yRadians);\r\n result._z.setRadians(zRadians);\r\n result._order = order;\r\n return result;\r\n }\r\n return new OrderedRotationAngles(Angle.createRadians(xRadians), Angle.createRadians(yRadians), Angle.createRadians(zRadians), order);\r\n }\r\n\r\n /** Create an OrderedRotationAngles from three angles (in degrees) and an ordering in which to apply them when rotating. */\r\n public static createDegrees(xDegrees: number, yDegrees: number, zDegrees: number, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles {\r\n if (result) {\r\n result._x.setDegrees(xDegrees);\r\n result._y.setDegrees(yDegrees);\r\n result._z.setDegrees(zDegrees);\r\n result._order = order;\r\n return result;\r\n }\r\n return new OrderedRotationAngles(Angle.createDegrees(xDegrees), Angle.createDegrees(yDegrees), Angle.createDegrees(zDegrees), order);\r\n }\r\n\r\n /** Create an OrderedRotationAngles from a 3x3 rotational matrix, given the ordering of axis rotations that the matrix derives from. */\r\n public static createFromMatrix3d(matrix: Matrix3d, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles {\r\n\r\n let m11 = matrix.coffs[0], m12 = matrix.coffs[3], m13 = matrix.coffs[6];\r\n let m21 = matrix.coffs[1], m22 = matrix.coffs[4], m23 = matrix.coffs[7];\r\n let m31 = matrix.coffs[2], m32 = matrix.coffs[5], m33 = matrix.coffs[8];\r\n\r\n if (OrderedRotationAngles.treatVectorsAsColumns) {\r\n // the formulas are from row order .. flip the mIJ\r\n m11 = matrix.coffs[0], m12 = matrix.coffs[1], m13 = matrix.coffs[2];\r\n m21 = matrix.coffs[3], m22 = matrix.coffs[4], m23 = matrix.coffs[5];\r\n m31 = matrix.coffs[6], m32 = matrix.coffs[7], m33 = matrix.coffs[8];\r\n\r\n }\r\n\r\n let xRad: number;\r\n let yRad: number;\r\n let zRad: number;\r\n\r\n switch (order) {\r\n case AxisOrder.XYZ: {\r\n yRad = Math.asin(Math.max(-1, Math.min(1, m13)));\r\n\r\n if (Math.abs(m13) < 0.99999) {\r\n xRad = Math.atan2(- m23, m33);\r\n zRad = Math.atan2(- m12, m11);\r\n } else {\r\n xRad = Math.atan2(m32, m22);\r\n zRad = 0;\r\n }\r\n break;\r\n } case AxisOrder.YXZ: {\r\n xRad = Math.asin(-Math.max(-1, Math.min(1, m23)));\r\n\r\n if (Math.abs(m23) < 0.99999) {\r\n yRad = Math.atan2(m13, m33);\r\n zRad = Math.atan2(m21, m22);\r\n } else {\r\n yRad = Math.atan2(-m31, m11);\r\n zRad = 0;\r\n }\r\n break;\r\n } case AxisOrder.ZXY: {\r\n xRad = Math.asin(Math.max(-1, Math.min(1, m32)));\r\n\r\n if (Math.abs(m32) < 0.99999) {\r\n yRad = Math.atan2(-m31, m33);\r\n zRad = Math.atan2(-m12, m22);\r\n } else {\r\n yRad = 0;\r\n zRad = Math.atan2(m21, m11);\r\n }\r\n break;\r\n } case AxisOrder.ZYX: {\r\n yRad = -Math.asin(Math.max(-1, Math.min(1, m31)));\r\n\r\n if (Math.abs(m31) < 0.99999) {\r\n xRad = Math.atan2(m32, m33);\r\n zRad = Math.atan2(m21, m11);\r\n } else {\r\n xRad = 0;\r\n zRad = Math.atan2(-m12, m22);\r\n }\r\n break;\r\n } case AxisOrder.YZX: {\r\n zRad = Math.asin(Math.max(-1, Math.min(1, m21)));\r\n\r\n if (Math.abs(m21) < 0.99999) {\r\n xRad = Math.atan2(-m23, m22);\r\n yRad = Math.atan2(-m31, m11);\r\n } else {\r\n xRad = 0;\r\n yRad = Math.atan2(m13, m33);\r\n }\r\n break;\r\n } case AxisOrder.XZY: {\r\n zRad = -Math.asin(Math.max(-1, Math.min(1, m12)));\r\n\r\n if (Math.abs(m12) < 0.99999) {\r\n xRad = Math.atan2(m32, m22);\r\n yRad = Math.atan2(m13, m11);\r\n } else {\r\n xRad = Math.atan2(-m23, m33);\r\n yRad = 0;\r\n }\r\n break;\r\n } default: {\r\n xRad = yRad = zRad = 0;\r\n }\r\n }\r\n if (OrderedRotationAngles.treatVectorsAsColumns)\r\n return OrderedRotationAngles.createRadians(-xRad, -yRad, -zRad, order, result);\r\n\r\n return OrderedRotationAngles.createRadians(xRad, yRad, zRad, order, result);\r\n }\r\n\r\n /** Create a 3x3 rotational matrix from this OrderedRotationAngles. */\r\n public toMatrix3d(result?: Matrix3d): Matrix3d {\r\n const rot = result !== undefined ? result : new Matrix3d();\r\n const axisOrder = this.order;\r\n const x = this.xAngle, y = this.yAngle, z = this.zAngle;\r\n const a = x.cos(); let b = x.sin();\r\n const c = y.cos(); let d = y.sin();\r\n const e = z.cos(); let f = z.sin();\r\n if (OrderedRotationAngles.treatVectorsAsColumns) {\r\n b = -b;\r\n d = -d;\r\n f = -f;\r\n }\r\n\r\n if (axisOrder === AxisOrder.XYZ) {\r\n const ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n rot.setRowValues(\r\n c * e, af + be * d, bf - ae * d,\r\n -c * f, ae - bf * d, be + af * d,\r\n d, -b * c, a * c,\r\n );\r\n } else if (axisOrder === AxisOrder.YXZ) {\r\n const ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n rot.setRowValues(\r\n ce + df * b, a * f, cf * b - de,\r\n de * b - cf, a * e, df + ce * b,\r\n a * d, -b, a * c,\r\n );\r\n } else if (axisOrder === AxisOrder.ZXY) {\r\n const ce = c * e, cf = c * f, de = d * e, df = d * f;\r\n rot.setRowValues(\r\n ce - df * b, cf + de * b, -a * d,\r\n -a * f, a * e, b,\r\n de + cf * b, df - ce * b, a * c,\r\n );\r\n } else if (axisOrder === AxisOrder.ZYX) {\r\n const ae = a * e, af = a * f, be = b * e, bf = b * f;\r\n rot.setRowValues(\r\n c * e, c * f, -d,\r\n be * d - af, bf * d + ae, b * c,\r\n ae * d + bf, af * d - be, a * c,\r\n );\r\n } else if (axisOrder === AxisOrder.YZX) {\r\n const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n rot.setRowValues(\r\n c * e, f, -d * e,\r\n bd - ac * f, a * e, ad * f + bc,\r\n bc * f + ad, -b * e, ac - bd * f,\r\n );\r\n } else if (axisOrder === AxisOrder.XZY) {\r\n const ac = a * c, ad = a * d, bc = b * c, bd = b * d;\r\n rot.setRowValues(\r\n c * e, ac * f + bd, bc * f - ad,\r\n -f, a * e, b * e,\r\n d * e, ad * f - bc, bd * f + ac,\r\n );\r\n }\r\n if (OrderedRotationAngles.treatVectorsAsColumns)\r\n rot.transposeInPlace();\r\n\r\n return rot;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"OrderedRotationAngles.js","sourceRoot":"","sources":["../../../src/geometry3d/OrderedRotationAngles.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,0CAAwC;AACxC,mCAAgC;AAChC,yCAAsC;AAEtC,wFAAwF;AAExF;;;;;;;;GAQG;AACH,MAAa,qBAAqB;IAWhC,kBAAkB;IAClB,YAAoB,CAAQ,EAAE,CAAQ,EAAE,CAAQ,EAAE,SAAoB;QACpE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IACD,0FAA0F;IAC1F,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,gFAAgF;IAChF,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,gFAAgF;IAChF,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,gFAAgF;IAChF,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IACD,4EAA4E;IAC5E,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,4EAA4E;IAC5E,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,4EAA4E;IAC5E,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,4EAA4E;IAC5E,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,4EAA4E;IAC5E,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,4EAA4E;IAC5E,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;IACzB,CAAC;IACD,yEAAyE;IAClE,MAAM,KAAK,qBAAqB;QACrC,OAAO,qBAAqB,CAAC,uBAAuB,CAAC;IACvD,CAAC;IACM,MAAM,KAAK,qBAAqB,CAAC,KAAc;QACpD,qBAAqB,CAAC,uBAAuB,GAAG,KAAK,CAAC;IACxD,CAAC;IACD;;;;;;;;;OASG;IACI,MAAM,CAAC,YAAY,CAAC,SAAgB,EAAE,SAAgB,EAAE,SAAgB,EAAE,KAAgB,EAC/F,MAA8B;QAC9B,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,qBAAqB,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACnG,CAAC;IACD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAgB,EAAE,KAAgB,EAChG,MAA8B;QAC9B,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,qBAAqB,CAC9B,aAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC7B,aAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC7B,aAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC7B,KAAK,CACN,CAAC;IACJ,CAAC;IACD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,aAAa,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAgB,EAAE,KAAgB,EAChG,MAA8B;QAC9B,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,qBAAqB,CAC9B,aAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC7B,aAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC7B,aAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC7B,KAAK,CACN,CAAC;IACJ,CAAC;IACD,uIAAuI;IAChI,MAAM,CAAC,kBAAkB,CAAC,MAAgB,EAAE,KAAgB,EAAE,MAA8B;QACjG,0BAA0B;QAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,uBAAuB;QACvB,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,EAAE;YAChD,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACrE;QAED,IAAI,IAAY,CAAC;QACjB,IAAI,IAAY,CAAC;QACjB,IAAI,IAAY,CAAC;QAEjB,QAAQ,KAAK,EAAE;YACb,KAAK,oBAAS,CAAC,GAAG,CAAC,CAAC;gBAClB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAEjF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;oBAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC7B;qBAAM;oBACL;;;;;;sBAME;oBACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC7B,IAAI,GAAG,CAAC,CAAC;iBACV;gBACD,MAAM;aACP;YAAC,KAAK,oBAAS,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;oBAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC9B;qBAAM;oBACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5B,IAAI,GAAG,CAAC,CAAC;iBACV;gBACD,MAAM;aACP;YAAC,KAAK,oBAAS,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAEjF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;oBAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC7B;qBAAM;oBACL,IAAI,GAAG,CAAC,CAAC;oBACT,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC9B;gBACD,MAAM;aACP;YAAC,KAAK,oBAAS,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;oBAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC9B;qBAAM;oBACL,IAAI,GAAG,CAAC,CAAC;oBACT,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC7B;gBACD,MAAM;aACP;YAAC,KAAK,oBAAS,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAEjF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;oBAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC7B;qBAAM;oBACL,IAAI,GAAG,CAAC,CAAC;oBACT,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC9B;gBACD,MAAM;aACP;YAAC,KAAK,oBAAS,CAAC,GAAG,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;oBAC3B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC9B;qBAAM;oBACL,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5B,IAAI,GAAG,CAAC,CAAC;iBACV;gBACD,MAAM;aACP;YAAC,OAAO,CAAC,CAAC;gBACT,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;aACxB;SACF;QAED,OAAO,qBAAqB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IACD;;;QAGI;IACG,UAAU,CAAC,MAAiB;QACjC,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,mBAAQ,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAExD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAEjC,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QAErE,0FAA0F;QAC1F,IAAI,SAAS,KAAK,oBAAS,CAAC,GAAG,EAAE;YAC/B,GAAG,CAAC,YAAY,CACd,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAC3C,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAC3C,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CACtB,CAAC;SACH;aAAM,IAAI,SAAS,KAAK,oBAAS,CAAC,GAAG,EAAE;YACtC,GAAG,CAAC,YAAY,CACd,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAC5C,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAC3C,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CACtB,CAAC;SACH;aAAM,IAAI,SAAS,KAAK,oBAAS,CAAC,GAAG,EAAE;YACtC,GAAG,CAAC,YAAY,CACd,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAC3C,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EACrB,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,CAC5C,CAAC;SACH;aAAM,IAAI,SAAS,KAAK,oBAAS,CAAC,GAAG,EAAE;YACtC,GAAG,CAAC,YAAY,CACd,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EACrB,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAC5C,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAC5C,CAAC;SACH;aAAM,IAAI,SAAS,KAAK,oBAAS,CAAC,GAAG,EAAE;YACtC,GAAG,CAAC,YAAY,CACd,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EACrB,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAC3C,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAC5C,CAAC;SACH;aAAM,IAAI,SAAS,KAAK,oBAAS,CAAC,GAAG,EAAE;YACtC,GAAG,CAAC,YAAY,CACd,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAC3C,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EACrB,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAC7C,CAAC;SACH;aAAM;YACL,GAAG,CAAC,WAAW,EAAE,CAAC;SACnB;QACD,yEAAyE;QACzE,IAAI,CAAC,qBAAqB,CAAC,qBAAqB;YAC9C,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEzB,OAAO,GAAG,CAAC;IACb,CAAC;;AA5SH,sDA6SC;AApSC,sCAAsC;AACvB,6CAAuB,GAAY,KAAK,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { AxisOrder } from \"../Geometry\";\r\nimport { Angle } from \"./Angle\";\r\nimport { Matrix3d } from \"./Matrix3d\";\r\n\r\n/* cspell:word cxcz, cxsz, cxcy, cxsy, sxcz, sxsz, sxcy, sxsy, cycz, cysz, sycz, sysz */\r\n\r\n/**\r\n * * represents a non-trivial rotation using three simple axis rotation angles and an\r\n * order in which to apply them.\r\n * * This class accommodates application-specific interpretation of \"multiplying 3 rotation matrices\" with regard to\r\n * * Whether a \"vector\" is a \"row\" or a \"column\"\r\n * * The order in which the X,Y,Z rotations are applied.\r\n * * Within the imodel geometry library, the preferred rotation order is encapsulated in `YawPitchRollAngles`.\r\n * @alpha\r\n */\r\nexport class OrderedRotationAngles {\r\n /** rotation around x */\r\n private _x: Angle;\r\n /** rotation around y */\r\n private _y: Angle;\r\n /** rotation around z */\r\n private _z: Angle;\r\n /** rotation order. For example XYZ means to rotate around x axis first, then y axis, and finally Z axis */\r\n private _order: AxisOrder;\r\n /** treat vectors as matrix columns */\r\n private static _sTreatVectorsAsColumns: boolean = false;\r\n /** constructor */\r\n private constructor(x: Angle, y: Angle, z: Angle, axisOrder: AxisOrder) {\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n this._order = axisOrder;\r\n }\r\n /** (Property accessor) Return the `AxisOrder` controlling matrix multiplication order. */\r\n public get order(): AxisOrder {\r\n return this._order;\r\n }\r\n /** (Property accessor) Return the strongly typed angle of rotation around x. */\r\n public get xAngle(): Angle {\r\n return this._x.clone();\r\n }\r\n /** (Property accessor) Return the strongly typed angle of rotation around y. */\r\n public get yAngle(): Angle {\r\n return this._y.clone();\r\n }\r\n /** (Property accessor) Return the strongly typed angle of rotation around z. */\r\n public get zAngle(): Angle {\r\n return this._z.clone();\r\n }\r\n /** (Property accessor) Return the angle of rotation around x, in degrees */\r\n public get xDegrees(): number {\r\n return this._x.degrees;\r\n }\r\n /** (Property accessor) Return the angle of rotation around y, in degrees */\r\n public get xRadians(): number {\r\n return this._x.radians;\r\n }\r\n /** (Property accessor) Return the angle of rotation around z, in degrees */\r\n public get yDegrees(): number {\r\n return this._y.degrees;\r\n }\r\n /** (Property accessor) Return the angle of rotation around x, in radians */\r\n public get yRadians(): number {\r\n return this._y.radians;\r\n }\r\n /** (Property accessor) Return the angle of rotation around y, in radians */\r\n public get zDegrees(): number {\r\n return this._z.degrees;\r\n }\r\n /** (Property accessor) Return the angle of rotation around z, in radians */\r\n public get zRadians(): number {\r\n return this._z.radians;\r\n }\r\n /** Flag controlling whether vectors are treated as rows or as columns */\r\n public static get treatVectorsAsColumns(): boolean {\r\n return OrderedRotationAngles._sTreatVectorsAsColumns;\r\n }\r\n public static set treatVectorsAsColumns(value: boolean) {\r\n OrderedRotationAngles._sTreatVectorsAsColumns = value;\r\n }\r\n /**\r\n * Create an OrderedRotationAngles from three angles and an ordering in which to apply them when rotating.\r\n * @param xRotation rotation around x\r\n * @param yRotation rotation around y\r\n * @param zRotation rotation around z\r\n * @param order left to right order of axis names identifies the order that rotations are applied.\r\n * For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.\r\n * * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation\r\n * matrix multiplication would be zRot*yRot*xRot\r\n */\r\n public static createAngles(xRotation: Angle, yRotation: Angle, zRotation: Angle, order: AxisOrder,\r\n result?: OrderedRotationAngles): OrderedRotationAngles {\r\n if (result) {\r\n result._x.setFrom(xRotation);\r\n result._y.setFrom(yRotation);\r\n result._z.setFrom(zRotation);\r\n result._order = order;\r\n return result;\r\n }\r\n return new OrderedRotationAngles(xRotation.clone(), yRotation.clone(), zRotation.clone(), order);\r\n }\r\n /**\r\n * Create an OrderedRotationAngles from three angles (in radians) and an ordering in which to apply\r\n * them when rotating.\r\n * @param xRadians rotation around x\r\n * @param yRadians rotation around y\r\n * @param zRadians rotation around z\r\n * @param order left to right order of axis names identifies the order that rotations are applied.\r\n * For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.\r\n * * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation\r\n * matrix multiplication would be zRot*yRot*xRot\r\n */\r\n public static createRadians(xRadians: number, yRadians: number, zRadians: number, order: AxisOrder,\r\n result?: OrderedRotationAngles): OrderedRotationAngles {\r\n if (result) {\r\n result._x.setRadians(xRadians);\r\n result._y.setRadians(yRadians);\r\n result._z.setRadians(zRadians);\r\n result._order = order;\r\n return result;\r\n }\r\n return new OrderedRotationAngles(\r\n Angle.createRadians(xRadians),\r\n Angle.createRadians(yRadians),\r\n Angle.createRadians(zRadians),\r\n order\r\n );\r\n }\r\n /**\r\n * Create an OrderedRotationAngles from three angles (in degrees) and an ordering in which to apply\r\n * them when rotating.\r\n * @param xRadians rotation around x\r\n * @param yRadians rotation around y\r\n * @param zRadians rotation around z\r\n * @param order left to right order of axis names identifies the order that rotations are applied.\r\n * For example XYZ means to rotate around x axis first, then y axis, and finally Z axis.\r\n * * Note that rotation order is reverse of rotation matrix multiplication so for XYZ the rotation\r\n * matrix multiplication would be zRot*yRot*xRot\r\n */\r\n public static createDegrees(xDegrees: number, yDegrees: number, zDegrees: number, order: AxisOrder,\r\n result?: OrderedRotationAngles): OrderedRotationAngles {\r\n if (result) {\r\n result._x.setDegrees(xDegrees);\r\n result._y.setDegrees(yDegrees);\r\n result._z.setDegrees(zDegrees);\r\n result._order = order;\r\n return result;\r\n }\r\n return new OrderedRotationAngles(\r\n Angle.createDegrees(xDegrees),\r\n Angle.createDegrees(yDegrees),\r\n Angle.createDegrees(zDegrees),\r\n order\r\n );\r\n }\r\n /** Create an OrderedRotationAngles from a 3x3 rotational matrix, given the ordering of axis rotations that the matrix derives from. */\r\n public static createFromMatrix3d(matrix: Matrix3d, order: AxisOrder, result?: OrderedRotationAngles): OrderedRotationAngles {\r\n // treat vector as columns\r\n let m11 = matrix.coffs[0], m12 = matrix.coffs[1], m13 = matrix.coffs[2];\r\n let m21 = matrix.coffs[3], m22 = matrix.coffs[4], m23 = matrix.coffs[5];\r\n let m31 = matrix.coffs[6], m32 = matrix.coffs[7], m33 = matrix.coffs[8];\r\n // treat vector as rows\r\n if (!OrderedRotationAngles.treatVectorsAsColumns) {\r\n m11 = matrix.coffs[0], m12 = matrix.coffs[3], m13 = matrix.coffs[6];\r\n m21 = matrix.coffs[1], m22 = matrix.coffs[4], m23 = matrix.coffs[7];\r\n m31 = matrix.coffs[2], m32 = matrix.coffs[5], m33 = matrix.coffs[8];\r\n }\r\n\r\n let xRad: number;\r\n let yRad: number;\r\n let zRad: number;\r\n\r\n switch (order) {\r\n case AxisOrder.XYZ: {\r\n yRad = Math.asin(Math.max(-1, Math.min(1, -m31))); // limit asin domain to [-1,1]\r\n\r\n if (Math.abs(m31) < 0.99999) {\r\n xRad = Math.atan2(m32, m33);\r\n zRad = Math.atan2(m21, m11);\r\n } else {\r\n /*\r\n * If Math.abs(m31) = 1 then yRad = 90 degrees and therefore, we have a gimbal lock.\r\n * This means xRad and zRad can be anything as long as their sum xRad + zRad is constant.\r\n * so we can pick zRad = 0 and calculate xRad (or pick xRad = 0 and calculate zRad).\r\n * Math details can be found\r\n * https://en.wikipedia.org/wiki/Gimbal_lock#Loss_of_a_degree_of_freedom_with_Euler_angles\r\n */\r\n xRad = Math.atan2(-m23, m22);\r\n zRad = 0;\r\n }\r\n break;\r\n } case AxisOrder.YXZ: {\r\n xRad = Math.asin(Math.max(-1, Math.min(1, m32))); // limit asin domain to [-1,1]\r\n\r\n if (Math.abs(m32) < 0.99999) {\r\n yRad = Math.atan2(-m31, m33);\r\n zRad = Math.atan2(-m12, m22);\r\n } else {\r\n yRad = Math.atan2(m13, m11);\r\n zRad = 0;\r\n }\r\n break;\r\n } case AxisOrder.ZXY: {\r\n xRad = Math.asin(Math.max(-1, Math.min(1, -m23))); // limit asin domain to [-1,1]\r\n\r\n if (Math.abs(m23) < 0.99999) {\r\n yRad = Math.atan2(m13, m33);\r\n zRad = Math.atan2(m21, m22);\r\n } else {\r\n yRad = 0;\r\n zRad = Math.atan2(-m12, m11);\r\n }\r\n break;\r\n } case AxisOrder.ZYX: {\r\n yRad = Math.asin(Math.max(-1, Math.min(1, m13))); // limit asin domain to [-1,1]\r\n\r\n if (Math.abs(m13) < 0.99999) {\r\n xRad = Math.atan2(-m23, m33);\r\n zRad = Math.atan2(-m12, m11);\r\n } else {\r\n xRad = 0;\r\n zRad = Math.atan2(m21, m22);\r\n }\r\n break;\r\n } case AxisOrder.YZX: {\r\n zRad = Math.asin(Math.max(-1, Math.min(1, -m12))); // limit asin domain to [-1,1]\r\n\r\n if (Math.abs(m12) < 0.99999) {\r\n xRad = Math.atan2(m32, m22);\r\n yRad = Math.atan2(m13, m11);\r\n } else {\r\n xRad = 0;\r\n yRad = Math.atan2(-m31, m33);\r\n }\r\n break;\r\n } case AxisOrder.XZY: {\r\n zRad = Math.asin(Math.max(-1, Math.min(1, m21))); // limit asin domain to [-1,1]\r\n\r\n if (Math.abs(m21) < 0.99999) {\r\n xRad = Math.atan2(-m23, m22);\r\n yRad = Math.atan2(-m31, m11);\r\n } else {\r\n xRad = Math.atan2(m32, m33);\r\n yRad = 0;\r\n }\r\n break;\r\n } default: {\r\n xRad = yRad = zRad = 0;\r\n }\r\n }\r\n\r\n return OrderedRotationAngles.createRadians(xRad, yRad, zRad, order, result);\r\n }\r\n /**\r\n * Create a 3x3 rotational matrix from this OrderedRotationAngles.\r\n ** math details can be found at docs/learning/geometry/Angle.md\r\n **/\r\n public toMatrix3d(result?: Matrix3d): Matrix3d {\r\n const rot = (result !== undefined) ? result : new Matrix3d();\r\n const axisOrder = this.order;\r\n const x = this.xAngle, y = this.yAngle, z = this.zAngle;\r\n\r\n const cx = x.cos(), sx = x.sin();\r\n const cy = y.cos(), sy = y.sin();\r\n const cz = z.cos(), sz = z.sin();\r\n\r\n const cxcz = cx * cz, cxsz = cx * sz, cxcy = cx * cy, cxsy = cx * sy;\r\n const sxcz = sx * cz, sxsz = sx * sz, sxcy = sx * cy, sxsy = sx * sy;\r\n const cycz = cy * cz, cysz = cy * sz, sycz = sy * cz, sysz = sy * sz;\r\n\r\n // the rotation matrix we build below is created using column-based base rotation matrixes\r\n if (axisOrder === AxisOrder.XYZ) {\r\n rot.setRowValues(\r\n cy * cz, sxcz * sy - cxsz, cxcz * sy + sxsz,\r\n cy * sz, cxcz + sxsz * sy, cxsz * sy - sxcz,\r\n -sy, sx * cy, cx * cy,\r\n );\r\n } else if (axisOrder === AxisOrder.YXZ) {\r\n rot.setRowValues(\r\n cycz - sysz * sx, -cx * sz, cysz * sx + sycz,\r\n sycz * sx + cysz, cx * cz, sysz - cycz * sx,\r\n -cx * sy, sx, cx * cy,\r\n );\r\n } else if (axisOrder === AxisOrder.ZXY) {\r\n rot.setRowValues(\r\n cycz + sysz * sx, sycz * sx - cysz, cx * sy,\r\n cx * sz, cx * cz, -sx,\r\n cysz * sx - sycz, cycz * sx + sysz, cx * cy,\r\n );\r\n } else if (axisOrder === AxisOrder.ZYX) {\r\n rot.setRowValues(\r\n cy * cz, -cy * sz, sy,\r\n sxcz * sy + cxsz, cxcz - sxsz * sy, -sx * cy,\r\n sxsz - cxcz * sy, sxcz + cxsz * sy, cx * cy,\r\n );\r\n } else if (axisOrder === AxisOrder.YZX) {\r\n rot.setRowValues(\r\n cy * cz, -sz, sy * cz,\r\n sxsy + cxcy * sz, cx * cz, cxsy * sz - sxcy,\r\n sxcy * sz - cxsy, sx * cz, cxcy + sxsy * sz,\r\n );\r\n } else if (axisOrder === AxisOrder.XZY) {\r\n rot.setRowValues(\r\n cy * cz, sxsy - cxcy * sz, cxsy + sxcy * sz,\r\n sz, cx * cz, -sx * cz,\r\n -sy * cz, sxcy + cxsy * sz, cxcy - sxsy * sz,\r\n );\r\n } else {\r\n rot.setIdentity();\r\n }\r\n // if we need row-based rotation matrix, we transpose the rotation matrix\r\n if (!OrderedRotationAngles.treatVectorsAsColumns)\r\n rot.transposeInPlace();\r\n\r\n return rot;\r\n }\r\n}\r\n"]}
|
|
@@ -182,6 +182,7 @@ export declare class Vector2d extends XY implements BeJSONFunctions {
|
|
|
182
182
|
/**
|
|
183
183
|
* Return a vector that bisects the angle between two normals and extends to the intersection of two offset lines
|
|
184
184
|
* * returns `undefined` if `unitPerpA = -unitPerpB` (i.e., are opposite)
|
|
185
|
+
* * math details can be found at docs/learning/geometry/PointVector.md
|
|
185
186
|
* @param unitPerpA unit perpendicular to incoming direction
|
|
186
187
|
* @param unitPerpB unit perpendicular to outgoing direction
|
|
187
188
|
* @param offset offset distance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Point2dVector2d.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Point2dVector2d.ts"],"names":[],"mappings":"AAKA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAY,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,EAAG,YAAW,KAAK;IAC9B,kBAAkB;IACX,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IACX,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACjB,GAAG,CAAC,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU;IAIvC,+BAA+B;IACxB,OAAO;IAId,SAAS,aAAa,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU;IAIlD,mCAAmC;IAC5B,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK;IAS5B,8CAA8C;IACvC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC;IAG/B,+FAA+F;IACxF,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAGzD,+FAA+F;IACxF,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAGnE,qCAAqC;IAC9B,MAAM,IAAI,OAAO;IAGxB,0CAA0C;IACnC,QAAQ,IAAI,OAAO;IAG1B;;;;SAIK;IACE,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAWxC,mDAAmD;IAC5C,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAKrC,uDAAuD;IAChD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAK5C,4EAA4E;IACrE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAGpC;;OAEG;IACI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKhC;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMhD,8EAA8E;IACvE,aAAa,IAAI,MAAM;IAS9B,mFAAmF;IACnF,IAAW,YAAY,IAAI,OAAO,CAEjC;IACD,yDAAyD;IAClD,MAAM,IAAI,MAAM;IAGvB,yCAAyC;IAClC,SAAS,IAAI,MAAM;IAG1B,mDAAmD;IAC5C,gBAAgB,IAAI,MAAM;IAGjC,4DAA4D;IACrD,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAG1C,gEAAgE;IACzD,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,GAAE,MAAqC,GAAG,OAAO;IAGrG,6DAA6D;IACtD,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAM1D,oDAAoD;IAC7C,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAG1E,sDAAsD;WACxC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM;CAI1F;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,EAAG,YAAW,eAAe;IACxD,8BAA8B;gBAClB,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU;IAGxC,2DAA2D;IACpD,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAGvC;;;;;OAKG;WACW,MAAM,CAAC,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAQ7E;;;;SAIK;WACS,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO;IAK/C,qFAAqF;WACvE,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAK1E,mDAAmD;WACrC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAGnD;;;;;OAKG;IACI,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO;IAQ/F;;OAEG;IACI,sBAAsB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO;IAQnG,0EAA0E;IACnE,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAc7E,oEAAoE;IAC7D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAOnG,qCAAqC;IAC9B,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAOtD,+BAA+B;IACxB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAOrD,+BAA+B;IACxB,MAAM,CAAC,EAAE,GAAE,MAAU,EAAE,EAAE,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAMxE,qCAAqC;IAC9B,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAOhF,2DAA2D;IACpD,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAO/G,+EAA+E;IACxE,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EACjF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAO7D;;;;OAIG;IACI,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM;IAGlE;;;;OAIG;IACI,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,MAAM;IAOnE;;;;;OAKG;IACI,0BAA0B,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,GAAE,MAAU,GAAG,MAAM;CAO/G;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,EAAG,YAAW,eAAe;gBAC7C,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU;IAGxC,8CAA8C;IACvC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAGzC,+CAA+C;WACjC,MAAM,CAAC,CAAC,GAAE,MAAU,EAAE,CAAC,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAQ/E;;;OAGG;WACW,KAAK,CAAC,KAAK,GAAE,MAAU,GAAG,QAAQ;IAGhD;;;OAGG;WACW,KAAK,CAAC,KAAK,GAAE,MAAU,GAAG,QAAQ;IAGhD,4CAA4C;WAC9B,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAGrD,6GAA6G;WAC/F,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAUjF;;;;SAIK;WACS,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ;IAKhD,oFAAoF;WACtE,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ;IAG5D,4DAA4D;WAC9C,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAGvF
|
|
1
|
+
{"version":3,"file":"Point2dVector2d.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Point2dVector2d.ts"],"names":[],"mappings":"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"}
|
|
@@ -367,6 +367,7 @@ class Vector2d extends XY {
|
|
|
367
367
|
/**
|
|
368
368
|
* Return a vector that bisects the angle between two normals and extends to the intersection of two offset lines
|
|
369
369
|
* * returns `undefined` if `unitPerpA = -unitPerpB` (i.e., are opposite)
|
|
370
|
+
* * math details can be found at docs/learning/geometry/PointVector.md
|
|
370
371
|
* @param unitPerpA unit perpendicular to incoming direction
|
|
371
372
|
* @param unitPerpB unit perpendicular to outgoing direction
|
|
372
373
|
* @param offset offset distance
|