我正在尝试使用 atan2 将 - 1 到 1 的范围转换为弧度,然后从弧度转换为度数。
但是 atan2(0,1) 应该等于 90.0 时等于 0 我在这里做错了什么?
float radians = atan2(0, 1);
float degrees = (radians * 180 / PI);
if(radians < 0)
{
degrees += 360;
}
编辑:好的,这次我以正确的方式插入了值。
float xaxisval = controller->left_stick_x_axis();
float yaxisval = controller->left_stick_y_axis();
// plug values into atan2
float radians = atan2(yaxisval, xaxisval);
float degrees = (radians * 180 / PI);
if (radians < 0)
{
degrees += 360;
}
对于上下文,xaxisval 和 yaxisval 正在从模拟摇杆中获取一个值,其右侧的最大值为 1,左侧的最小值为 -1。因此,当我将模拟摇杆向右按下时,yaxisval 等于 0,xaxisval 等于 1。
这应该返回 90 度,就像您将模拟摇杆想象成一个完整的 360 度圆一样。向上方向是 360/0 向右是 90 向下是 180 向左是 270 等等。
我将这些值粘贴到调试器中,这就是它返回的内容。
xaxisval: 1.00000
yaxisval: 0.00000
degrees: 0.00000
但是我希望这个方向上升为 90 度,它似乎上升了 90 度,我测试了向下的位置,它等于 90。有什么建议吗?
调试输出:操纵杆向上位置
xaxisval: 0.00000
yaxisval: -1.00000
degrees: 270.00000
操纵杆右侧位置
xaxisval: 1.00000
yaxisval: 0.00000
degrees: 0.00000
操纵杆向下位置
xaxisval: 0.00000
yaxisval: 1.00000
degrees: 90.00000
操纵杆左侧位置
xaxisval: -1.00000
yaxisval: 0.00000
degrees: 180.00000
操纵杆东北位置
xaxisval: 0.929412
yaxisval: 0.592157
degrees: 327.497528