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(); }