2017-12-30 12 views
1

私のマウスのポインタの角度と私の「車の角度」との差を度で計算しています。私はその距離の半分を私がオフセットとして保存し、それから私の車両をそれに移動させます。それはいくつかの計算の後に、最終的に私を希望の角度に移動させます。しかし、私のマウスが-185で、わずか10度の距離にある185までわずかに移動すると、車両は-185度から0度に、そして185度に戻って「遠ざかり」ます。私はそれが-180から180の境界を通過できるようにするために多くの方法を試しましたが、運はありませんでした。-180から180の間で交差する角度の間の距離を計算する

HERESにコード:

def get_angle(self, p1, p2): 
    return m.atan2(p2[1]-p1[1],p2[0]-p1[0]) 

def update(self): 
    mouse_pos = pygame.mouse.get_pos() 
    self.update_vehicle(self.pos, self.get_angle(self.pos, mouse_pos), r.black) 

def update_vehicle(self, pos, dir, color): 
    self.dir += (dir - self.dir)/50 

self.dir私車両が実現する角度であり、dirマウスから自身に渡さ角度、です。

+3

説明した問題を説明したコードを共有したいと思いませんか? – Ivan

+0

@イワンそこに行きます。それは機能的な部分です、私はあなたがすべてを必要とは思わないでしょう。 – BrrrIce

答えて

1

あなたは車にそれを適用する前に、[-pi、PI)間隔に出力角度をラップすることができます。何が起こっている

def update_vehicle(self, pos, dir, color): 
    a = ((dir - self.dir + m.pi) % (2 * m.pi)) - m.pi 
    self.dir += a/50 

は、我々が狙うように我々は(値にパイを追加することです正の0〜2piの間隔)、その後、不要な完全なターン(mod 2pi)を取り除き、最後に元のpiからpiへの参照に戻します(前に挿入したpiを削除します)。結果として

、-400º、-40ºに変身-240º120°に、240ºに-120ºのように...ここでは例の小さなリストです:

-400° -> -40° 
-320° -> 40° 
-240° -> 120° 
-160° -> -160° 
-80° -> -80° 
    0° ->  0° 
    80° -> 80° 
160° -> 160° 
240° -> -120° 
320° -> -40° 
400° -> 40° 

私はmを想定していますところで、ネイティブのmathモジュールです。

+0

私はそれを試みましたが、私は行動の変化を見ていません。私はあなたが言っていることを理解しています、そして、それがどのように機能するのか見ていますが、なぜそれができないのか理解できません。 – BrrrIce

+0

プロジェクト全体:Heres:https://github.com/BrrrIce/Vehicle – BrrrIce

+0

@BrrrIce、ラップは、車に適用したい最後の角度で行う必要があります。私はそれに応じて私のソリューションを編集し、あなたのコードで動作しました。 – grovina

関連する問題