无法为double分配值

时间:2013-06-14 22:19:28

标签: c++

我正在开展一个项目。这里使用的每个变量都存储为double。 问题是我有一个带有两个坐标的2D速度矢量,我想计算矢量和OX轴之间的角度,所以我使用Theta1 = atan(v1y / v1x);。尽管如此,通过这种方法我只能得到-PI / 2之间的角度; 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修改。我究竟做错了什么?这似乎是一些陷阱,或者我只是看不到简单的东西。

2 个答案:

答案 0 :(得分:4)

切线的周期为π,因此您的调整不正确,应为±π。同样,当两个坐标都为负时,商atan的结果为正,即0π/2之间的值。然后你减去π/2并得到-π/20之间的负值,但是你应该在几何上-π/2之间得到一个。

另外,你应该使用atan2,它可以在没有调整的情况下为你提供正确的角度。

答案 1 :(得分:1)

如果v1x大于或等于零,则不会修改Theta,因为它会输入外else语句的if子句,其中包含否代码。

如果v1x 为负,那么,如果没有编译器错误,Theta 更改。我建议放置:

std::cout << Theta1 << '\n';

if声明之前和之后立即进行验证。