C# 如何从鼠标坐标中获取鼠标的基本方向
是否可以根据鼠标最后位置和当前位置获取鼠标方向(左、右、上、下)?我已经编写了代码来计算两个向量之间的角度,但我不确定它是否正确 有人能给我指一下正确的方向吗C# 如何从鼠标坐标中获取鼠标的基本方向,c#,mouse,position,coordinates,direction,C#,Mouse,Position,Coordinates,Direction,是否可以根据鼠标最后位置和当前位置获取鼠标方向(左、右、上、下)?我已经编写了代码来计算两个向量之间的角度,但我不确定它是否正确 有人能给我指一下正确的方向吗 public enum Direction { Left = 0, Right = 1, Down = 2, Up = 3 } private int lastX; private int lastY; private Dir
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);
}
计算角度似乎过于复杂。为什么不做一些像:
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;
我认为你不需要计算角度。给定两点P1和P2,您可以检查P2.x是否>P1.x,并知道它是向左还是向右。然后看看P2.y>P1.y,你就知道它是上升还是下降了
然后看看它们之间的增量的绝对值中较大的一个,即abs(P2.x-P1.x)和abs(P2.y-P1.y),取较大的一个告诉你它是“更水平”还是“更垂直”,然后你就可以决定向左上的东西是向上还是向左最后一个位置和当前位置之间的水平移动(X坐标差)大于最后一个位置和当前位置之间的垂直移动(Y坐标差)的幅度(绝对值),则移动为向左或向右;否则,它是向上或向下的。然后你所要做的就是检查运动方向的标志,告诉你运动是向上还是向下,是向左还是向右
你不必担心角度。0,0是左上角。如果当前x>最后一个x,则向右移动。
如果当前y>最后一个y,则您将下降。如果您只对上下、左/右感兴趣,则无需计算角度。我甚至会说角度方法不正确,句号。两个向量之间的角度差不会告诉您点移动的实际方向(在笛卡尔平面上)。您是否试图适应鼠标抖动例如,如果用户一直向右移动100像素,但在中间来回抖动了几个像素,那么您不希望意外地对抖动进行采样,并假设它们正在向另一个方向移动,因为整体图片不符合该结论不,我正在写一个游戏,其中窗体上的图像应该遵循鼠标的方向