public static GridDirection GetDirectionFromRotation(Angle pitch, Angle yaw, Angle roll)
        {
            Vector3 v = new Vector3(1, 0, 0);

            v.Pitch(pitch);
            v.Yaw(yaw);
            v.Roll(roll);

            v.X = Math.Round(v.X, 5);
            v.Y = Math.Round(v.Y, 5);
            v.Z = Math.Round(v.Z, 5);

            double val = Math.Sqrt(2 - Math.Sqrt(2)) / 2;

            if (v.X <= 1 && v.X >= val) v.X = 1;
            else
                if (v.X <= val && v.X >= 0) v.X = 0;
                else
                    if (v.X >= -1 && v.X <= -val) v.X = -1;
                    else
                        if (v.X >= -val && v.X <= 0) v.X = 0;

            if (v.Y <= 1 && v.Y >= val) v.Y = -1;
            else
                if (v.Y <= val && v.Y >= 0) v.Y = 0;
                else
                    if (v.Y >= -1 && v.Y <= -val) v.Y = 1;
                    else
                        if (v.Y >= -val && v.Y <= 0) v.Y = 0;

            if (v.Z <= 1 && v.Z >= val) v.Z = 1;
            else
                if (v.Z <= val && v.Z >= 0) v.Z = 0;
                else
                    if (v.Z >= -1 && v.Z <= -val) v.Z = -1;
                    else
                        if (v.Z >= -val && v.Z <= 0) v.Z = 0;

            return v.AsDirection();
        }
        public static GridDirection GetDirectionFromRotation(int pitch, int yaw, int roll)
        {
            Vector3 v = new Vector3(1, 0, 0);

            v.Pitch(new Angle(1, pitch, 0, 0));
            v.Yaw(new Angle(1, yaw, 0, 0));
            v.Roll(new Angle(1, roll, 0, 0));

            v.X = Math.Round(v.X, 5);
            v.Y = Math.Round(v.Y, 5);
            v.Z = Math.Round(v.Z, 5);

            double val = Math.Sqrt(2 - Math.Sqrt(2))/2;

            if (v.X <= 1 && v.X >= val) v.X = 1;
            else
            if (v.X <= val && v.X >= 0) v.X = 0;
            else
            if (v.X >= -1 && v.X <= -val) v.X = -1;
            else
            if (v.X >= -val && v.X <= 0) v.X = 0;

            if (v.Y <= 1 && v.Y >= val) v.Y = -1;
            else
            if (v.Y <= val && v.Y >= 0) v.Y = 0;
            else
            if (v.Y >= -1 && v.Y <= -val) v.Y = 1;
            else
            if (v.Y >= -val && v.Y <= 0) v.Y = 0;

            if (v.Z <= 1 && v.Z >= val) v.Z = 1;
            else
            if (v.Z <= val && v.Z >= 0) v.Z = 0;
            else
            if (v.Z >= -1 && v.Z <= -val) v.Z = -1;
            else
            if (v.Z >= -val && v.Z <= 0) v.Z = 0;

            return v.AsDirection();
        }