@@ -128,7 +128,11 @@ inline namespace Math
128128 // -=(Undocumented)=-
129129 Vector3<Base> GetScale () const
130130 {
131- return Vector3<Base>(GetComponent (0 ), GetComponent (5 ), GetComponent (10 ));
131+ const Vector3<Base> XAxis (GetComponent (0 ), GetComponent (1 ), GetComponent (2 ));
132+ const Vector3<Base> YAxis (GetComponent (4 ), GetComponent (5 ), GetComponent (6 ));
133+ const Vector3<Base> ZAxis (GetComponent (8 ), GetComponent (9 ), GetComponent (10 ));
134+
135+ return Vector3<Base>(XAxis.GetLength (), YAxis.GetLength (), ZAxis.GetLength ());
132136 }
133137
134138 // -=(Undocumented)=-
@@ -137,6 +141,59 @@ inline namespace Math
137141 return Vector3<Base>(GetComponent (12 ), GetComponent (13 ), GetComponent (14 ));
138142 }
139143
144+ // -=(Undocumented)=-
145+ Quaternion<Base> GetRotation () const
146+ {
147+ const Base M00 = GetComponent (0 );
148+ const Base M01 = GetComponent (1 );
149+ const Base M02 = GetComponent (2 );
150+ const Base M10 = GetComponent (4 );
151+ const Base M11 = GetComponent (5 );
152+ const Base M12 = GetComponent (6 );
153+ const Base M20 = GetComponent (8 );
154+ const Base M21 = GetComponent (9 );
155+ const Base M22 = GetComponent (10 );
156+
157+ const Base Trace = M00 + M11 + M22;
158+
159+ if (Trace > 0.0 )
160+ {
161+ const Base S = Sqrt (Trace + 1.0 ) * 2.0 ;
162+ return Quaternion<Base>(
163+ (M21 - M12) / S,
164+ (M02 - M20) / S,
165+ (M10 - M01) / S,
166+ 0.25 * S);
167+ }
168+ else if (M00 > M11 && M00 > M22)
169+ {
170+ const Base S = Sqrt (1.0 + M00 - M11 - M22) * 2.0 ;
171+ return Quaternion<Base>(
172+ 0.25 * S,
173+ (M01 + M10) / S,
174+ (M02 + M20) / S,
175+ (M21 - M12) / S);
176+ }
177+ else if (M11 > M22)
178+ {
179+ const Base S = Sqrt (1.0 + M11 - M00 - M22) * 2.0 ;
180+ return Quaternion<Base>(
181+ (M01 + M10) / S,
182+ 0.25 * S,
183+ (M12 + M21) / S,
184+ (M02 - M20) / S);
185+ }
186+ else
187+ {
188+ const Base S = Sqrt (1.0 + M22 - M00 - M11) * 2.0 ;
189+ return Quaternion<Base>(
190+ (M02 + M20) / S,
191+ (M12 + M21) / S,
192+ 0.25 * S,
193+ (M10 - M01) / S);
194+ }
195+ }
196+
140197 // -=(Undocumented)=-
141198 Matrix4<Base> Inverse () const
142199 {
0 commit comments