Wie finde ich den Winkel zwischen 2 Punkten in pygame?
Ich Schreibe ein Spiel in Python mit der Pygame.
Die co-ords (von meinem display-Fenster)
( 0 , 0 )
oben Links und
(640,480)
unten rechts.
Den Winkel
0°
wenn Sie nach oben
90°
wenn nach rechts.
Ich habe ein Spieler-sprite mit einem Center-position, und ich will die Revolver an eine Waffe zu Punkt in Richtung der Spieler. Wie mache ich es?
Sagen,
x1
,y1
sind die Turm-co-ords
x2
,y2
sind die Spieler co-ords
a
ist der Winkel der Messung
Als zukünftige Beratung, erhalten Sie besser helfen, wenn Sie geben Sie eine Zusammenfassung von dem, was hast du bereits versucht, warum es fehlgeschlagen ist, und wo Sie Hilfe benötigen.
Sie brauchen drei Punkte, um einen Winkel definieren.
Ich denke, wir können davon ausgehen, einen Dritten Punkt auf der positiven x-Achse, wo der Ursprung ist (x1,y1).
Knacken Sie öffnen Sie Ihre Trigonometrie lehrbuch.
Sie brauchen drei Punkte, um einen Winkel definieren.
Ich denke, wir können davon ausgehen, einen Dritten Punkt auf der positiven x-Achse, wo der Ursprung ist (x1,y1).
Knacken Sie öffnen Sie Ihre Trigonometrie lehrbuch.
InformationsquelleAutor Matt Randell | 2012-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst
math
hat eine handlicheatan2(denominator, numerator)
Funktion. Normalerweise würden Sie verwendenatan2(dy,dx)
sondern weil Pygame dreht die y-Achse relativ zu kartesischen Koordinaten (wie Sie wissen), den Sie brauchen, umdy
negativ und dann zur Vermeidung von negativen Winkeln. ("dy" bedeutet einfach nur "die Veränderung von y".)degs
sein sollten, was Sie suchen.rads %= 2*pi
und verwendenrads = atan2(dy,dx)
; wenn Sie ziehen, ziehen Sie die Dreieck-yo wird sehen, warum.Wie bereits erwähnt in der post, Pygame verwenden, die nicht mit konventionellen kartesischen Koordinaten. Going up ist ein Reduzierung in der y-Achse. Daher die negative y-und range-Korrektur (andernfalls bekommen Sie 90 Grad statt der 270).
Da der code wins arguments, spielen mit diesem applet: github.com/mgold/Python-snippets/blob/master/pygame_angles.py
InformationsquelleAutor mgold
Unter Berücksichtigung eines Dreiecks
InformationsquelleAutor ChristopheCVB
Wahrscheinlich wollen Sie so etwas wie dieses - Sie müssen vielleicht mal ein wenig - ich kann ausgeschaltet werden um 180 Grad. Sie müssen auch ein Spezial-Fall ist die situation, wo dy==0, welche ich nicht für Sie tun.
if dy < 0
Teil meiner Lösung, da atan2 erledigt dies automatischEs ist auch falsch, der dy, sollte über die dx, nicht Umgekehrt.
Nein, der OP und mgold beide erwähnt, 0 Grad angegeben wurde, werden in der y-Richtung, es ist also dx/dy
Ahh okay, my bad. Das ist, was ich nicht Lesen sorgfältig.
InformationsquelleAutor happydave
OK, mit einer Kombination Ihrer Antworten und einige andere websites, die ich gefunden habe, den funktionierenden code:
Den rest von meinem code nicht pingelig, was einen negativen Wert von degs; wie auch immer, es funktioniert jetzt und ich möchte sagen, vielen Dank für deine Hilfe.
rads -= math.pi/2
. Auch, nur weil der code, den Sie jetzt haben, akzeptiert negative Winkel, code, den Sie schreiben, in der Zukunft nicht.Erwägen, akzeptieren @mgold Antwort
InformationsquelleAutor Matt Randell