MatrixD.fromQuaternion constructor

MatrixD.fromQuaternion(
  1. QuaternionD q
)

Implementation

factory MatrixD.fromQuaternion(QuaternionD q) {
  MatrixD result = .identity();

  final a2 = q.x*q.x;
  final b2 = q.y*q.y;
  final c2 = q.z*q.z;
  final ac = q.x*q.z;
  final ab = q.x*q.y;
  final bc = q.y*q.z;
  final ad = q.w*q.x;
  final bd = q.w*q.y;
  final cd = q.w*q.z;

  result.m0 = 1 - 2*(b2 + c2);
  result.m1 = 2*(ab + cd);
  result.m2 = 2*(ac - bd);

  result.m4 = 2*(ab - cd);
  result.m5 = 1 - 2*(a2 + c2);
  result.m6 = 2*(bc + ad);

  result.m8 = 2*(ac + bd);
  result.m9 = 2*(bc - ad);
  result.m10 = 1 - 2*(a2 + b2);

  return result;
}