如何从鼠标坐标获取基数鼠标方向

Ioa*_*nis 6 c# mouse position direction coordinates

是否可以根据鼠标的最后位置和当前位置获取鼠标方向(左,右,上,下)?我已经编写了代码来计算两个向量之间的角度,但我不确定它是否正确.

有人可以指出我正确的方向吗?

    public enum Direction
    {
        Left = 0,
        Right = 1,
        Down = 2,
        Up = 3
    }

    private int lastX;
    private int lastY;
    private Direction direction;

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        lastX = e.X;
        lastY = e.Y;
    }
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        double angle = GetAngleBetweenVectors(lastX, lastY, e.X, e.Y);
        System.Diagnostics.Debug.WriteLine(angle.ToString());
        //The angle returns a range of values from -value 0 +value
        //How to get the direction from the angle?
        //if (angle > ??)
        //    direction = Direction.Left;
    }

    private double GetAngleBetweenVectors(double Ax, double Ay, double Bx, double By)
    {
        double theta = Math.Atan2(Ay, Ax) - Math.Atan2(By, Bx);
        return Math.Round(theta * 180 / Math.PI);
    }
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 12

计算角度似乎过于复杂.为什么不做这样的事情:

int dx = e.X - lastX;
int dy = e.Y - lastY;
if(Math.Abs(dx) > Math.Abs(dy))
  direction = (dx > 0) ? Direction.Right : Direction.Left;
else
  direction = (dy > 0) ? Direction.Down : Direction.Up;
Run Code Online (Sandbox Code Playgroud)


i_a*_*orf 5

我认为你不需要计算角度.给定两个点P1和P2,您可以检查是否P2.x> P1.x并且您知道它是向左还是向右.然后看看P2.y> P1.y,你知道它是上升还是下降.

然后看看它们之间的差值的绝对值越大,即abs(P2.x - P1.x)和abs(P2.y - P1.y),无论哪个更大,都会告诉你它是否"更加水平"或者"更垂直"然后你可以决定UP-LEFT的某些东西是UP还是LEFT.