2D精灵根据鼠标旋转360度

我正在尝试使我的自上而下字符根据其位置和鼠标之间的角度旋转。 我正在使用这个代码:

float xDiff = mouseState.X - (graphics.PreferredBackBufferWidth / 2); float yDiff = mouseState.Y - (graphics.PreferredBackBufferHeight / 2); float angle = (float)(Math.Atan2(yDiff, xDiff)) * 180 / Math.PI); 

但它不工作。 在我应该得到0度左右的地方 – 我得到了约-75。

在这里输入图像说明

如果你看着标有角度的圆圈,你会看到270 degrees对应于(0,-1)就是直线向下。

按照惯例,度数被标记为逆时针方向的join。 然而,它们形成一个循环,因此270 degrees (紫色箭头)也可以表示为-90 degrees (橙色箭头),即相反方向的四分之一圈。

你提供的坐标(-2, -145)对应于269.21-90.79 degrees这取决于你如何selectexpression这个角度。

.Net 4.5的Atan2()的文档指出,返回值是范围-π <= θ <= π ,在转换为度数后,这是-180 <= θ <= 180

为了进一步解释预期的结果,这里是一个表格,下面的公式的结果和xy的相应值。

 angle = Math.Atan2(y, x) * 180 / Math.PI; x -1 0 1 y +------------------------ 1 | 135 90 45 0 | 180 0 0 -1 | -135 -90 -45 

如果您希望在0 <= θ <= 360的范围内expression角度,他们很容易转换:

 while (angle > 360) { angle -= 360; } while (angle < 0) { angle += 360; }