(this.x * q2.x) + (this.y * q2.y) + (this.z * q2.z) + (this.w * q2.w);
(q1.x * q2.x) + (q1.y * q2.y) + (q1.z * q2.z) + (q1.w * q2.w);
    public void slerp(Quaternion q2, float changeAmnt) {        if (this.x == q2.x && this.y == q2.y && this.z == q2.z && this.w == q2.w) {            return;        }        float result =            (this.x * q2.x) + (this.y * q2.y) + (this.z * q2.z) + (this.w * q2.w);        if (result < 0.0f) {            // Negate the second quaternion and the result of the dot product            q2.x = -q2.x;            q2.y = -q2.y;            q2.z = -q2.z;            q2.w = -q2.w;            result = -result;        }        // Set the first and second scale for the interpolation        float scale0 = 1 - changeAmnt;        float scale1 = changeAmnt;        // Check if the angle between the 2 quaternions was big enough to warrant such calculations        if ((1 - result) > 0.1f) {            // Get the angle between the 2 quaternions, and then store the sin() of that angle            float theta = (float) FastMath.acos(result);            float sinTheta = (float) FastMath.sin(theta);            // Calculate the scale for q1 and q2, according to the angle and it's sine value            scale0 = (float) FastMath.sin((1 - changeAmnt) * theta) / sinTheta;            scale1 = (float) FastMath.sin((changeAmnt * theta)) / sinTheta;        }        // Calculate the x, y, z and w values for the quaternion by using a special        // form of linear interpolation for quaternions.        this.x = (scale0 * this.x) + (scale1 * q2.x);        this.y = (scale0 * this.y) + (scale1 * q2.y);        this.z = (scale0 * this.z) + (scale1 * q2.z);        this.w = (scale0 * this.w) + (scale1 * q2.w);    }