从x和y速度计算方向角

时间:2012-02-05 23:11:45

标签: trigonometry angle

我正在使用Game Maker程序开发游戏(不是真正的游戏制作者),因为我用真实语言编写游戏(可以编写普通应用程序,而不是游戏)这么多次。

无论如何,在我使用方向功能的程序中,有时被证明是有缺陷的。但是对象的x和y速度总是正确的,所以我想计算那些方向角度(以度为单位)。不幸的是,我不是数学天才,我总是在三角学方面失败;(。你能帮助我吗?

我的游戏制作IDE的角度坐标系如下:

         270 deg.
  180 deg.      0 deg.
         90 deg.

定位系统就像在大多数环境中一样(左上角为0,0)

3 个答案:

答案 0 :(得分:11)

数学库通常带有一个名为atan2的函数,仅用于此目的:

double angle = atan2(y, x);

角度以弧度为单位;乘以180 / PI转换为度数。角度范围从-pi到pi。 0角是正x轴,角度顺时针增长。如果您想要其他配置,则需要进行微小的更改,例如0角是负y轴,范围是0到359.99度。

使用atan2代替atan或任何其他反向触发功能的主要原因是它为您找出了正确的角度,并且您不需要一系列if-语句。

答案 1 :(得分:2)

使用arctangent功能。它应该是这样的:

double direction(double x, double y) {
    if (x > 0)
        return atan(y/x);
    if (x < 0)
        return atan(y/x)+M_PI;
    if (y > 0)
        return M_PI/2;
    if (y < 0)
        return -M_PI/2;
    return 0; // no direction
}

(其中x和y是水平和垂直速度,M_PI是pi,atan是反正切函数。)

答案 2 :(得分:0)

在游戏制作者中,您可以使用以下内容:

direction = point_direction(x, y, x+x_speed, y+y_speed)
speed = point_distance(x, y, x+x_speed, y+y_speed)

(比较当前和未来的x / y坐标和返回值)

反转过程以获得x / y_speed:

x_speed = lengthdir_x(speed, direction)
y_speed = lengthdir_y(speed, direction)

Note: Added this post because its still viewed in relation to Game Maker:
Studio and its specific functions. Maybe it has no value for the person who
asked originally but i hope it will help some Game Maker users who wander here.