我正在做一个项目。这里使用的每个变量都存储为double。
问题是我有一个既有坐标又有二维速度的 vector ,并且我想计算 vector 和OX轴之间的 Angular ,所以我使用Theta1 = atan(v1y / v1x);。但是,通过这种方法,我只能从-PI / 2之间获得 Angular ; PI / 2,所以为了扩展范围我添加了

#define PI 3.14159265358979323846
double Theta1;
Theta1 = atan(v1y / v1x);
if (v1x < 0.0)
    if (v1y > 0.0)
        Theta1 = Theta1 + (PI/2.0);
    else
        Theta1 = Theta1 - (PI/2.0);
else;

当我尝试使用Theta1时,第一个if操作似乎并未对其进行修改。我的意思是它从不添加(+/-)PI / 2.0,但是如果我尝试
cout << Theta + PI/2.0 << endl;

它打印Theta1修改。我究竟做错了什么?似乎有一些陷阱,或者我只是看不到简单的东西。

最佳答案

切线的周期为π,因此您的调整不正确,应为±π。照原样,当两个坐标均为负数时,商和atan的结果将为正数,即0π/2之间的值。然后,您减去π/2并在-π/20之间获得一个负值,但您应在几何图式中在-π/2之间获得一个负值。

另外,您应该使用atan2,它无需调整即可提供正确的 Angular 。

09-07 08:03