2017-12-20 18 views
0

私は2Dゲームを持っています。各プレイヤーの位置(x、y)と見出し(右は0deg、上は90degなど)です。 Player1の方向をPlayer2に設定する方法が必要です。私は勾配を計算して計算しようとしました -2Dゲーム、プレイヤー1をプレイヤー2に変える

slope = (player2.y - player1.y)/(player2.x - player1.x) 
heading = degrees(atan(slope)) 

しかし、毎回正しい結果を返していません。他の方法をお勧めしますか?

+2

'math.atan2()'を見てください。 – Alfe

答えて

1

atan(slope)はすべての方向で正しい値を提供できません。これは、傾きに方向が含まれていないためです。 180°回転すると勾配は変わりません。数学的には、これは-y/-x = y/xという事実に由来します。

あなたはこれを最初に見つけ出すことはできません。従来の解決策は、常にxとyの値の符号をよく調べ、atan()の結果をどの象限に配置するかを決めることでした。

最近では、この機能は無意識の名前atan2()で実行されます。これは2つの値(yとx)を受け取り、範囲(-180°、+ 180°)内の正しい方向角をラジアンで求めるために必要なすべてを行います。したがって、範囲(-pi、+ pi ]。

関連する問題