applyQuaternion method

Vec3 applyQuaternion(
  1. Quat q
)

Apply a Quanternation to this vector

Implementation

Vec3 applyQuaternion (Quat q ) {
  double x = this.x;
  double y = this.y;
  double z = this.z;

  double qx = q.x;
  double qy = q.y;
  double qz = q.z;
  double qw = q.w;

  // calculate quat * vector

  double ix =  qw * x + qy * z - qz * y;
  double iy =  qw * y + qz * x - qx * z;
  double iz =  qw * z + qx * y - qy * x;
  double iw = - qx * x - qy * y - qz * z;

  // calculate result * inverse quat

  this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;
  this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;
  this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;

  return this;
}