タイトルをより説明的にする方法がわからないので、例から始めます。以下のコードを使用して、特定の方向と比較して最小の角度を形成する 4 つの軸に応じて、列挙型から方向を選択します。
static Direction VectorToDirection(Vector2 direction)
{
double upDiff = System.Math.Acos(Vector2.Dot(direction, -Vector2.UnitY));
double downDiff = System.Math.Acos(Vector2.Dot(direction, Vector2.UnitY));
double leftDiff = System.Math.Acos(Vector2.Dot(direction, -Vector2.UnitX));
double rightDiff = System.Math.Acos(Vector2.Dot(direction, Vector2.UnitX));
double smallest = System.Math.Min(System.Math.Min(upDiff, downDiff), System.Math.Min(leftDiff, rightDiff));
// This is the part I'm unsure about i.e.
// Comparing smallest with each value in turn
// To find out which of the four was "selected"
if (smallest == upDiff) return Direction.Up;
if (smallest == downDiff) return Direction.Down;
if (smallest == leftDiff) return Direction.Left;
return Direction.Right;
}
しかし、最後に浮動小数点の等価性に関する Resharper の警告が表示されます。の実装による問題ではないと思いますが、元の値のそれぞれと比較する以外にMin
、この種の問題を解決するためのより良いイディオムがあるのではないかと考えていました。 smallest