角度方向

时间:2011-05-16 11:51:29

标签: c++ math

我不擅长数学(我从来没有)并且我遇到了一个问题:我正在尝试让精灵始终旋转到鼠标光标。这就是我所拥有的:

 // mx is mouse X and my is mouse y
 double rotate = (atan2(my, mx) * PI);

 // Set rotation takes rotation in degrees
 ship.SetRotation( rad2deg(rotate) );

deg2rad函数在哪里:

double rad2deg(double rad)
{
    double deg = 0;
    deg = rad * (180/M_PI);
    return deg;
}

不幸的是它不起作用。这艘船旋转非常奇怪(很难定义)。我也不知道要解决这个问题。

我正在研究SFML,SetRotation需要学位。

提前致谢。

3 个答案:

答案 0 :(得分:5)

您需要相对于某个点定义旋转。目前你正在相对于屏幕的角落这样做,它只会给你90度,可能不是你想要的。您可能希望相对于精灵的位置或相对于屏幕中心的旋转,例如

// define centre of screen
const int Y0 = SCREEN_HEIGHT / 2;
const int X0 = SCREEN_WIDTH / 2;

// get rotation angle of mouse location relative to centre of screen
double rotate = (float) (atan2(Y0 - my), ((mx - X0));

[正如其他人所说,例如@duffymo,你也可能有atan2转换的参数,所以我也做了这个改变。]

答案 1 :(得分:3)

atan2似乎有错误的参数顺序。您传递给atan2的值也应该是对象的相对鼠标位置。因此,如果对象位置为oxoy,那么您应该使用atan2(my-oy, mx-ox)

答案 2 :(得分:2)

我想知道你是否有atan2反驳的论点。典型的顺序是先y,然后是x。你确定你知道你传递给那种方法的是什么吗?

“不工作”和“怪异”并不能帮助我们理解问题所在,所以很难帮助你。