transformQuat function
Transforms the vec4 with a quat
@param {vec4} out the receiving vector @param {ReadonlyVec4} a the vector to transform @param {ReadonlyQuat} q quaternion to transform with @returns {vec4} out
Implementation
List<double> transformQuat(List<double> out, List<double> a, List<double> q) {
final x = a[0], y = a[1], z = a[2];
final qx = q[0], qy = q[1], qz = q[2], qw = q[3];
// calculate quat * vec
final ix = qw * x + qy * z - qz * y;
final iy = qw * y + qz * x - qx * z;
final iz = qw * z + qx * y - qy * x;
final iw = -qx * x - qy * y - qz * z;
// calculate result * inverse quat
out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
out[3] = a[3];
return out;
}