MatrixD.rotateZYX constructor

MatrixD.rotateZYX(
  1. Vector3D angle
)

Implementation

factory MatrixD.rotateZYX(Vector3D angle) {
  MatrixD result = .zero();

  final cz = math.cos(angle.z);
  final sz = math.sin(angle.z);
  final cy = math.cos(angle.y);
  final sy = math.sin(angle.y);
  final cx = math.cos(angle.x);
  final sx = math.sin(angle.x);

  result.m0 = cz*cy;
  result.m4 = cz*sy*sx - cx*sz;
  result.m8 = sz*sx + cz*cx*sy;

  result.m1 = cy*sz;
  result.m5 = cz*cx + sz*sy*sx;
  result.m9 = cx*sz*sy - cz*sx;

  result.m2 = -sy;
  result.m6 = cy*sx;
  result.m10 = cy*cx;

  result.m15 = 1;

  return result;
}