xxx
diff --git a/lib/src/vector_math/quaternion.dart b/lib/src/vector_math/quaternion.dart index 1800ac2..02c5b55 100644 --- a/lib/src/vector_math/quaternion.dart +++ b/lib/src/vector_math/quaternion.dart
@@ -133,47 +133,14 @@ } /// Set the quaternion with rotation from a rotation matrix [rotationMatrix]. - void XsetFromRotation(Matrix3 rotationMatrix) { - final Float32List rotationMatrixStorage = rotationMatrix.storage; - final double trace = rotationMatrix.trace(); - if (trace > 0.0) { - double s = math.sqrt(trace + 1.0); - _qStorage[3] = s * 0.5; - s = 0.5 / s; - _qStorage[0] = (rotationMatrixStorage[5] - rotationMatrixStorage[7]) * s; - _qStorage[1] = (rotationMatrixStorage[6] - rotationMatrixStorage[2]) * s; - _qStorage[2] = (rotationMatrixStorage[1] - rotationMatrixStorage[3]) * s; - } else { - final int i = rotationMatrixStorage[0] < rotationMatrixStorage[4] - ? (rotationMatrixStorage[4] < rotationMatrixStorage[8] ? 2 : 1) - : (rotationMatrixStorage[0] < rotationMatrixStorage[8] ? 2 : 0); - final int j = (i + 1) % 3; - final int k = (i + 2) % 3; - double s = math.sqrt(rotationMatrixStorage[rotationMatrix.index(i, i)] - - rotationMatrixStorage[rotationMatrix.index(j, j)] - - rotationMatrixStorage[rotationMatrix.index(k, k)] + - 1.0); - _qStorage[i] = s * 0.5; - s = 0.5 / s; - _qStorage[3] = (rotationMatrixStorage[rotationMatrix.index(k, j)] - - rotationMatrixStorage[rotationMatrix.index(j, k)]) * - s; - _qStorage[j] = (rotationMatrixStorage[rotationMatrix.index(j, i)] + - rotationMatrixStorage[rotationMatrix.index(i, j)]) * - s; - _qStorage[k] = (rotationMatrixStorage[rotationMatrix.index(k, i)] + - rotationMatrixStorage[rotationMatrix.index(i, k)]) * - s; - } - } - - /// Set the quaternion with rotation from a rotation matrix [rotationMatrix]. void setFromRotation(Matrix3 rotationMatrix) { _setFromRotation(_qStorage, rotationMatrix._m3storage); } static void _setFromRotation( - Float32List _qStorage, Float32List rotationMatrixStorage) { + Float32List _qStorage, Float32List rotationMatrixStorage) { + _qStorage[2]; + rotationMatrixStorage[8]; final double trace = Matrix3._trace(rotationMatrixStorage); if (trace > 0.0) { double s = math.sqrt(trace + 1.0);