2017-12-30 4 views
1

Ich berechne den Unterschied in Grad zwischen meinem Mauszeigerwinkel in Bezug auf meinen 'Fahrzeugwinkel. Ich nehme die Hälfte dieser Entfernung, die ich als Versatz ablege, und bewege dann mein Fahrzeug dorthin, was mich nach ein paar Berechnungen schließlich in meinen gewünschten Winkel bringt. Wenn meine Maus jedoch bei -185 steht und ich sie leicht auf 185, also nur 10 Grad, bewege, nimmt das Fahrzeug den "langen Weg" von -185 auf 0 und dann zurück auf 185. Ich habe viele Möglichkeiten ausprobiert, um die Grenze von -180 bis 180 passieren zu lassen, hatte aber kein Glück.Berechnen der Entfernung zwischen Winkeln, die -180 bis 180 überschreiten

Heres der Code:

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 

wo self.dir ist der Winkel mein Fahrzeug realisiert, und dir ist der Winkel an sie übergeben, von der Maus auf sich.

+3

Sind Sie bereit, den Code zu teilen, der das beschriebene Problem veranschaulicht? – Ivan

+0

@Ivan Da gehts. Das ist der funktionelle Teil, ich würde nicht denken, dass du die ganze Sache brauchst. – BrrrIce

Antwort

1

Sie können den Ausgangswinkel wickeln in das [-pi, pi) Intervall, bevor es das Auto Anwendung:

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

Was passiert ist, dass wir pi auf den Wert hinzuzufügen (damit wir zielen darauf ab, ein positives Intervall von 0 bis 2pi), dann entfernen wir unnötige komplette Runden (mit mod 2pi) und kommen schließlich zu unserer ursprünglichen -pi zu pi-Referenz (Entfernen des pi, das wir vorher eingefügt hatten).

Als Konsequenz -400º verwandelt sich in -40º, -240º in 120º, 240º in -120º und so weiter ... hier eine kleine Liste von Beispielen:

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

ich m angenommen bin ist das native math Modul übrigens.

+0

Ich habe das versucht, aber ich sehe keine Veränderung im Verhalten. Ich verstehe, was Sie sagen, und ich sehe, wie es funktionieren würde, aber ich kann nicht herausfinden, warum es nicht geht. – BrrrIce

+0

Heres das ganze Projekt: https://github.com/BrrrIce/Vehicle – BrrrIce

+0

@BrrrIce, sollte der Wrap mit dem endgültigen Winkel erfolgen, den Sie auf das Auto anwenden möchten. Ich habe meine Lösung entsprechend bearbeitet und es hat mit Ihrem Code funktioniert. – grovina

Verwandte Themen