角度方向

Direction to angle

本文关键字:方向      更新时间:2023-10-16

我不是很擅长数学(而且我从来没有),我有一个问题:我试图让精灵总是旋转到鼠标光标。这就是我所拥有的:

 // 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需要学位。

提前谢谢。

您需要定义相对于某个点的旋转。目前,您正在相对于屏幕的一角进行操作,这只会给您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 转置的参数,所以我也进行了此更改。

看来 atan2 的参数顺序错误。而且您传递给atan2的值应该是对象的相对鼠标位置。所以如果对象位置是 oxoy ,那么你应该使用 atan2(my-oy, mx-ox)

我想知道你是否有 atan2 的论据颠倒过来。 典型的顺序是 y 先,然后是 x。 您确定您知道要传递给该方法的内容吗?

"

不工作"和"奇怪"不能帮助我们了解问题所在,因此很难帮助您。