2012-02-05 17 views
1

私は実際の言語でコーディングゲームに失敗したので、Game Makerの種類のプログラム(実際の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度になるような他の設定が必要な場合は、マイナーな変更が必要です。

atanまたは他の逆三角関数の代わりにatan2を使用する主な理由は、角度の正しい緯度を計算し、一連の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はパイと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. 
関連する問題