setProduct method
Set to a ยท b (apply b, then a). Safe when either is this.
Implementation
void setProduct(Quaternion a, Quaternion b) {
final ax = a.x, ay = a.y, az = a.z, aw = a.w;
final bx = b.x, by = b.y, bz = b.z, bw = b.w;
w = aw * bw - ax * bx - ay * by - az * bz;
x = aw * bx + ax * bw + ay * bz - az * by;
y = aw * by - ax * bz + ay * bw + az * bx;
z = aw * bz + ax * by - ay * bx + az * bw;
}