public Vector3f getRotationColumn(int i, Vector3f store) {
        if (store == null) {
            store = new Vector3f();
        }

        float norm = norm();
        if (norm != 1.0f) {
            norm = 1.0f / norm;
        }

        float xx = x * x * norm;
        float xy = x * y * norm;
        float xz = x * z * norm;
        float xw = x * w * norm;
        float yy = y * y * norm;
        float yz = y * z * norm;
        float yw = y * w * norm;
        float zz = z * z * norm;
        float zw = z * w * norm;

        switch (i) {
            case 0:
                store.x = 1 - 2 * (yy + zz);
                store.y = 2 * (xy + zw);
                store.z = 2 * (xz - yw);
                break;
            case 1:
                store.x = 2 * (xy - zw);
                store.y = 1 - 2 * (xx + zz);
                store.z = 2 * (yz + xw);
                break;
            case 2:
                store.x = 2 * (xz + yw);
                store.y = 2 * (yz - xw);
                store.z = 1 - 2 * (xx + yy);
                break;
            default:
                logger.warning("Invalid column index.");
                throw new IllegalArgumentException("Invalid column index. " + i);
        }

        return store;
    }
Calculates one of the basis vectors of the rotation. The current instance
is unaffected.

<p>Note: the result is created from a normalized version of the current
instance.

@param i which basis vector to retrieve (&ge;0, &lt;3, 0&rarr;X-axis,
    1&rarr;Y-axis, 2&rarr;Z-axis)
@param store storage for the result, or null for a new Vector3f
@return the basis vector (either <code>store</code> or a new Vector3f)
@throws IllegalArgumentException if index is not 0, 1, or 2
jme3-core/src/main/java/com/jme3/math/Quaternion.java