public Vector3D rotateMeAxis(double angle, Vector3D axis)
    {
        double s = Math.sin(angle);
        double c = Math.cos(angle);
        double k = 1.0F - c;

        double nx = x * (c + k * axis.x * axis.x) +
                   y * (k * axis.x * axis.y - s * axis.z) +
                   z * (k * axis.x * axis.z + s * axis.y);

        double ny = x * (k * axis.x * axis.y + s * axis.z) +
                   y * (c + k * axis.y * axis.y) +
                   z * (k * axis.y * axis.z - s * axis.x);

        double nz = x * (k * axis.x * axis.z - s * axis.y) +
                   y * (k * axis.y * axis.z + s * axis.x) +
                   z * (c + k * axis.z * axis.z);

        x = nx;
        y = ny;
        z = nz;

        return this;
    }