rotateZ function

List<double> rotateZ(
  1. List<double> out,
  2. List<double> a,
  3. double rad
)

Rotates a matrix by the given angle around the Z axis

@param {mat4} out the receiving matrix @param {ReadonlyMat4} a the matrix to rotate @param {Number} rad the angle to rotate the matrix by @returns {mat4} out

Implementation

List<double> rotateZ(List<double> out, List<double> a, double rad) {
  final s = math.sin(rad);
  final c = math.cos(rad);
  final a00 = a[0];
  final a01 = a[1];
  final a02 = a[2];
  final a03 = a[3];
  final a10 = a[4];
  final a11 = a[5];
  final a12 = a[6];
  final a13 = a[7];

  if (a != out) {
    // If the source and destination differ, copy the unchanged last row
    out[8] = a[8];
    out[9] = a[9];
    out[10] = a[10];
    out[11] = a[11];
    out[12] = a[12];
    out[13] = a[13];
    out[14] = a[14];
    out[15] = a[15];
  }

  // Perform axis-specific matrix multiplication
  out[0] = a00 * c + a10 * s;
  out[1] = a01 * c + a11 * s;
  out[2] = a02 * c + a12 * s;
  out[3] = a03 * c + a13 * s;
  out[4] = a10 * c - a00 * s;
  out[5] = a11 * c - a01 * s;
  out[6] = a12 * c - a02 * s;
  out[7] = a13 * c - a03 * s;
  return out;
}