标签: atan

使用atan2将范围从-1到1转换为度

我正在尝试使用atan2将范围从-1到1转换为弧度,然后从弧度转换为度。

但是atan2(0,1)等于0时应等于90.0我在这里做错了什么?

float radians = atan2(0, 1);
float degrees = (radians * 180 / PI);
if(radians < 0)
{
    degrees += 360;
}
Run Code Online (Sandbox Code Playgroud)

编辑:好的,所以这次我以正确的方式插入了这些值。

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;
}
Run Code Online (Sandbox Code Playgroud)

对于上下文,xaxisval和yaxisval从模拟摇杆中获取一个值,其最大值在右边1,最小值在-1左边。因此,当我向右按模拟摇杆时,yaxisval等于0,xaxisval等于1。

这应该返回90度,就像您将模拟摇杆想象为完整的360度圆一样。上方向是360/0,右方向是90,下方向是180,左方向是270,依此类推。

我将这些值粘贴到调试器中,这就是它返回的结果。

xaxisval: 1.00000
yaxisval: 0.00000
degrees: 0.00000
Run Code Online (Sandbox Code Playgroud)

但是我希望这个方向上升到90度,它似乎已经上升了90度,我测试了下降位置,它等于90。有什么建议吗?

调试输出:操纵杆向上位置

xaxisval: 0.00000
yaxisval: -1.00000
degrees: 270.00000
Run Code Online (Sandbox Code Playgroud)

操纵杆右位置

xaxisval: 1.00000
yaxisval: …
Run Code Online (Sandbox Code Playgroud)

c++ math atan

2
推荐指数
1
解决办法
61
查看次数

atan2 是否需要归一化向量?对于向量之间的角度,使用 acos 或 atan 哪个更好?

在计算两个向量之间的角度时,我传统上使用 acos,但这需要对两个向量进行归一化。atan2 可用于完成相同的(特别是atan2(b.y_, b.x_) - atan2(a.y_, a.x_)),这是否需要归一化向量?

如果 atan2 不需要归一化向量,这是否更好用,因为归一化可能成本高昂且“更多”容易出错,因为它需要 sqrt 操作?

然后我读到 atan2 本身可能比 acos 更昂贵,但更准确?然后我还阅读了其他建议相反的互联网:( 很多相互矛盾的信息,不确定使用 acos 或 atan 计算两个向量之间的角度有什么关系。

推荐哪个?以及每次使用的好处/问题是什么?

任何帮助将不胜感激,谢谢!

c++ trigonometry angle vector-space atan

2
推荐指数
1
解决办法
648
查看次数

C# 求两个给定点之间的角度

在我正在开发的程序中,我有一个三角形的对象(玩家),并且该三角形应该始终面向鼠标旋转。鉴于这两点,我尝试了在网上找到的不同方程,但它们似乎都不起作用或至少执行得足够好。

delta_x = cursor.X - pos.X;
delta_y = cursor.Y - pos.Y;
cursorAngle = (float)Math.Atan2(delta_y, delta_x) * (float)(180 / Math.PI);
Run Code Online (Sandbox Code Playgroud)

这是我发现的最有效的公式,但它仍然不够好,因为它只以特定的角度或距离面向鼠标。Cursor.X和.Y是鼠标的坐标,pos.X和.Y是玩家的坐标。

c# angle rotation coordinates atan

1
推荐指数
1
解决办法
5907
查看次数

标签 统计

atan ×3

angle ×2

c++ ×2

c# ×1

coordinates ×1

math ×1

rotation ×1

trigonometry ×1

vector-space ×1