public Vector3f multLocal(Vector3f v) {
        float tempX, tempY;
        tempX = w * w * v.x + 2 * y * w * v.z - 2 * z * w * v.y + x * x * v.x
                + 2 * y * x * v.y + 2 * z * x * v.z - z * z * v.x - y * y * v.x;
        tempY = 2 * x * y * v.x + y * y * v.y + 2 * z * y * v.z + 2 * w * z
                * v.x - z * z * v.y + w * w * v.y - 2 * x * w * v.z - x * x
                * v.y;
        v.z = 2 * x * z * v.x + 2 * y * z * v.y + z * z * v.z - 2 * w * y * v.x
                - y * y * v.z + 2 * w * x * v.y - x * x * v.z + w * w * v.z;
        v.x = tempX;
        v.y = tempY;
        return v;
    }
Rotates the argument vector. Despite the name, the current instance is
unaffected.

<p>The quaternion is assumed to be normalized (norm=1). No error checking
is performed; the caller must ensure that the norm is approximately equal
to 1.

<p>Despite the name, the result differs from the mathematical definition
of vector-quaternion multiplication.

@param v the vector to rotate (not null)
@return the (modified) vector {@code v}
jme3-core/src/main/java/com/jme3/math/Quaternion.java