在我正在处理的程序中,我有一个三角形形状的对象(播放器),并且该三角形应该始终面向鼠标旋转。考虑到这两点,我尝试了在网上找到的不同方程式,但这些方程式似乎都不起作用,或者至少表现得很好。
delta_x = cursor.X - pos.X;
delta_y = cursor.Y - pos.Y;
cursorAngle = (float)Math.Atan2(delta_y, delta_x) * (float)(180 / Math.PI);
这是我发现的最有效的公式,但是它仍然不能很好地工作,因为它只能以特定的角度或距离面对鼠标。 Cursor.X和.Y是鼠标的坐标,而pos.X和.Y是播放器的坐标。
答案 0 :(得分:1)
我创建了这个WinForm示例,每次在窗体上移动鼠标时,该示例都会计算鼠标到窗体中心的角度和距离。结果显示在标签中。
表单中心的红点只是一个参考面板,与代码无关。
private void f_main_MouseMove(object sender, MouseEventArgs e)
{
Point center = new Point(378, 171);
Point mouse = this.PointToClient(Cursor.Position);
lb_mouseposition.Text = $"Mouse Angle: {CalculeAngle(center, mouse)} / Distance: {CalculeDistance(center, mouse)}";
}
private double CalculeAngle(Point start, Point arrival)
{
var deltaX = Math.Pow((arrival.X - start.X), 2);
var deltaY = Math.Pow((arrival.Y - start.Y), 2);
var radian = Math.Atan2((arrival.Y - start.Y), (arrival.X - start.X));
var angle = (radian * (180 / Math.PI) + 360) % 360;
return angle;
}
private double CalculeDistance(Point start, Point arrival)
{
var deltaX = Math.Pow((arrival.X - start.X), 2);
var deltaY = Math.Pow((arrival.Y - start.Y), 2);
var distance = Math.Sqrt(deltaY + deltaX);
return distance;
}
此处的角度以度为单位,范围从0到359。 我希望这有助于计算您的两点之间的角度。