Y-Verschiebung aus dem Winkel rechnen
-
Hallo Community.
Angenommen man programmiert ein Spiel mit nem Raumschiff, der sich (auch rotierend) durch den Luftraum bewegen kann und Schüsse abgeben kann. Wie berechne ich die Y-Verschiebung des Schusses, wenn das Schiff gerade z.B. um 45° rotiert ist? Dann soll der Schuss doch diagonal über den Bildschirm fliegen.
Wie berechnet man sowas?Danke im Voraus,
Astronaut
-
Aus dem Winkel kannst du ganz einfach einen Richtungsvektor formen:
vec(cos(α), sin(α))
Die 'Y-Verschiebung' wäre somit sin(α), vorausgesetzt das Raumschiff guckt bei 0° in X-Richtung.
-
Sorry, ich habe nur sehr grundlegendes mathematisches Wissen und habe das mit dem Richtungsvektor nicht ganz verstanden. Was genau representiert Alpha? Meinst du etwa vec(cos(x), sin(y))? Und was macht vec(...)? Die mathematischen Funktionen cos und sin kenne ich aus dem cmath-Header, soweit habe ich verstanden.
Die 'Y-Verschiebung' wäre somit sin(α), vorausgesetzt das Raumschiff guckt bei 0° in X-Richtung.
D.h. sin(winkel) gibt die Y-Verschiebung an? Habe einige Zahlenwerte probiert, diese liegen immer bei 0.8.
Kannst du eventuell ein minimales Beispiel mit den Werten x und y machen? Oder mir sonst einige Referenzen geben, damit ich deinen Post besser verstehe?
PS: Es handelt sich um 2D.
-
Alpha ist der Winkel, bezogen auf die Horizontale.
x(t)=x_{pos}+cos(\alpha) \cdot t \\ y(t)=y_{pos}+sin(\alpha) \cdot t
vec bedeutet Vektor. sin und cos sind Sinus und Cosinus.
Wenn du nicht mal die Grundbegriffe in Mathe kennst wirds schwierig, ich probiers trotzdem mal:und ist die aktuelle Position vom Raumschiff. ist der Winkel. Und t ist ein Parameter, den lässt du von 0 bis irgendwas durchlaufen, dadurch bekommst du nun alle Punkte mit Koordinaten x(t) und y(t) entlang des Strahls. An den Positionen malst du dann einen Pixel.
Noch ein wichtiger Hinweis: sin und cos erwarten den Winkel in Radiant und nicht in Grad, das lässt sich aber leicht umrechnen: die Gradangabe rechnest du mal 3.141592/180.0 und schon kannst du den Winkel in den sin und cos reinfüttern.
Pseudocode zum Zeichnen des Strahls:
Eingabe: Position xpos,ypos und Winkel des Raumschiffs Schleife: Gehe von t=0 bis t=10 und erhöhe t jeweils um 1 berechne x(t) und y(t) rufe eine Zeichenfunktion auf die dir den Pixel farbig anmalt: DrawPixel(x(t),y(t),farbeDesStrahls) Ausgabe: Bild mit dem Strahl