我正在做一个项目。这里使用的每个变量都存储为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
并在-π/2
和0
之间获得一个负值,但您应在几何图式中在-π
和-π/2
之间获得一个负值。
另外,您应该使用atan2
,它无需调整即可提供正确的 Angular 。