/** * Scale the source quaternion by scale and put the result in the destination * @param scale The amount to scale by * @param src The source quaternion * @param dest The destination quaternion, or null if a new quaternion is to be created * @return The scaled quaternion */ public static Quaternion scale(float scale, Quaternion src, Quaternion dest) { if (dest == null) dest = new Quaternion(); dest.x = src.x * scale; dest.y = src.y * scale; dest.z = src.z * scale; dest.w = src.w * scale; return dest; }
/** * Calculate the conjugate of this quaternion and put it into the given one * * @param src * The source quaternion * @param dest * The quaternion which should be set to the conjugate of this * quaternion */ public static Quaternion negate(Quaternion src, Quaternion dest) { if (dest == null) dest = new Quaternion(); dest.x = -src.x; dest.y = -src.y; dest.z = -src.z; dest.w = src.w; return dest; }
/** * Sets the value of this quaternion to the quaternion product of * quaternions left and right (this = left * right). Note that this is safe * for aliasing (e.g. this can be left or right). * * @param left * the first quaternion * @param right * the second quaternion */ public static Quaternion mul(Quaternion left, Quaternion right, Quaternion dest) { if (dest == null) dest = new Quaternion(); dest.set(left.x * right.w + left.w * right.x + left.y * right.z - left.z * right.y, left.y * right.w + left.w * right.y + left.z * right.x - left.x * right.z, left.z * right.w + left.w * right.z + left.x * right.y - left.y * right.x, left.w * right.w - left.x * right.x - left.y * right.y - left.z * right.z); return dest; }
/** * Normalise the source quaternion and place the result in another quaternion. * * @param src * The source quaternion * @param dest * The destination quaternion, or null if a new quaternion is to be * created * @return The normalised quaternion */ public static Quaternion normalise(Quaternion src, Quaternion dest) { float inv_l = 1f/src.length(); if (dest == null) dest = new Quaternion(); dest.set(src.x * inv_l, src.y * inv_l, src.z * inv_l, src.w * inv_l); return dest; }
dest = new Quaternion(); dest .set((left.x * right.w - left.w * right.x - left.y