MatrixD.rotateXYZ constructor

MatrixD.rotateXYZ(
  1. Vector3D angle
)

Implementation

factory MatrixD.rotateXYZ(Vector3D angle) {
  MatrixD result = .identity();

  final cosz = math.cos(-angle.z);
  final sinz = math.sin(-angle.z);
  final cosy = math.cos(-angle.y);
  final siny = math.sin(-angle.y);
  final cosx = math.cos(-angle.x);
  final sinx = math.sin(-angle.x);

  result.m0 = cosz*cosy;
  result.m1 = (cosz*siny*sinx) - (sinz*cosx);
  result.m2 = (cosz*siny*cosx) + (sinz*sinx);

  result.m4 = sinz*cosy;
  result.m5 = (sinz*siny*sinx) + (cosz*cosx);
  result.m6 = (sinz*siny*cosx) - (cosz*sinx);

  result.m8 = -siny;
  result.m9 = cosy*sinx;
  result.m10= cosy*cosx;

  return result;
}