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

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

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

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 = eX; lastY = eY; } private void Form1_MouseMove(object sender, MouseEventArgs e) { double angle = GetAngleBetweenVectors(lastX, lastY, eX, eY); 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); } 

计算角度似乎过于复杂。 为什么不做以下事情:

 int dx = eX - lastX; int dy = eY - lastY; if(Math.Abs(dx) > Math.Abs(dy)) direction = (dx > 0) ? Direction.Right : Direction.Left; else direction = (dy > 0) ? Direction.Down : Direction.Up; 

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

然后看看它们之间的差值的绝对值中的较大者,即abs(P2.x – P1.x)和abs(P2.y – P1.y),以较大者为准告诉你它是否“更加水平”或“更垂直”然后你可以决定UP-LEFT的某些东西是UP还是LEFT。

0,0是左上角。 如果当前的x>最后x,你就是正确的。 如果当前的y>最后一个y,你就会失败。 如果你只对up \ down,left \ right感兴趣,则无需计算角度。

粗略地说,如果最后位置和当前位置之间的水平移动的大小(绝对值)(X坐标的差异)大于最后位置和最后移动之间的垂直移动的大小(绝对值)(Y坐标的差异)位置和当前位置,然后左右移动; 否则,它是向上还是向下。 然后你要做的就是检查运动方向的标志,告诉你运动是向上还是向下或向左或向右。

你不应该担心角度。