2012-02-05 283 views
1

我正在开发Game Maker类游戏(不是真正的游戏制作者),因为我在真实语言中编写游戏失败(可以编写普通应用程序,只是不能游戏)很多次。从x和y速度计算方向角

无论如何,在我使用的方向功能的程序被证明是有时错误。然而,物体的x和y速度总是正确的,所以我想计算方向角(以度为单位)。不幸的是我不是天才的数学,我总是在三角失败;(你能帮我

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

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

定位系统,就像是大多数环境(0,0在左上角)

回答

9

数学库通常会与被叫atan2只是用于该目的的功能:

double angle = atan2(y, x); 

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

使用atan2而不是atan或任何其他反转三角函数的主要原因是,它会为您计算角度的正确角度,并且不需要一系列if语句。

1

使用反正切函数应该是这样的:

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是反正切函数)

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.