我正在尝试使我的自上而下字符根据其位置和鼠标之间的角度旋转。 我正在使用这个代码:
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
。
为了进一步解释预期的结果,这里是一个表格,下面的公式的结果和x
和y
的相应值。
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; }