Vektor-Transformation
-
Hallo.
Ich habe in meinem Spiel ein dynamisches Projektil hinzugefügt.
Nun möchte ich, dass die Entfernung zum anvisierten Ziel(Schnittpunkt des Strahls, welcher von der "Kamera" ausgeht) berechnet wird und automatisch genullt wird, damit das Ziel trotz der Schwerkraft getroffen wird.Nun gehen wir mal davon aus, dass die Mündungsgeschwindigkeit 350m/s und die Enfernung 1500m ist.
Außerdem vernachlässigen wir den Luftwiderstand.Als erstes rechnen wir die Zeit bis zum Aufschlag aus:
t = s / v
t = 1500 / 350
t = 4.2sDamit können wir die Höhe des Falls berechnen:
s = 0.5g * t^2
s = 0.5*9.81 * 4.2^2
s = 86mMit dem Satz des Pythagoras berechnen wir die 3. Seite:
a^2 + b^2 = c^2
350^2 + 86^2 = sqrt(c^2)
c = 360mJetzt können wir mit Trigonometrie(Tangens in dem Fall) den Winkel berechnen.
Nun wollte ich euch fragen, wie ihr den Vektor rotieren würdet.
Meine Lösunge wäre eine Matrix aufzustellen und den Vektor mit dieser Matrix zu multiplizieren.
Doch bin ich mir nicht sicher, ob dies der schnellste Weg ist.Danke
-
Welchen Vektor möchtest du warum rotieren? Deine Frage scheint völlig losgelöst zu sein vom Rest deines Beitrags, außer vielleicht durch irgendeinen Kontext, den du uns verschwiegen hast.
-
Hmm...
Hab es wohl unverständlich erklärt.
Ich möchte den Vektor, der die Ausrichtung des Weges vom Ursprung bis zum Ziel beschreibt, rotieren. Der Vektor ist normalisiert.Eigentlich ist der ganze erste Teil völlig unnötig.
Mir geht es eigentlich nur darum zu wissen, ob es eine bessere Lösung gibt um einen Vektor zu rotieren, als den Vektor(ob er einen Punkt darstellt oder eine Richtung, ist irrelevant) mit einer Matrix zu multiplizieren, welche die Rotation beschreibt.
-
Ist das nicht nur eine Vektoraddition (plus Normierung)? Was willst du da denn groß rotieren?
-
Bashar schrieb:
Ist das nicht nur eine Vektoraddition (plus Normierung)? Was willst du da denn groß rotieren?
Hmm...stimmt.
Wäre damit wohl erledigt.
-
Jetzt werde ich fies, indem ich dich auf etwas aufmerksam mache: Deine Entfernung ist nicht 1500 Meter. Die Entfernung ändert sich ja durch die gekrümmte Flugbahn. Deine Rechnung funktioniert nur, wenn deine Flugbahn ohne Gravitation genau horizontal liegt. (Und das Projektil auf dem Weg nicht auf den Boden trifft!)
Ein extremes Gegenbeispiel wäre, wenn das Ziel genau über einem ist. Wenn es nur hoch genug ist, trifft man es nie. Bei deiner Rechnung kommt hingegen in diesem Fall totaler Unsinn heraus.
Alle anderen Winkel sind mehr oder weniger abgeschwächte Zwischenfälle zwischen diesen beiden Extremfällen.
-
SeppJ schrieb:
Jetzt werde ich fies, indem ich dich auf etwas aufmerksam mache: Deine Entfernung ist nicht 1500 Meter. Die Entfernung ändert sich ja durch die gekrümmte Flugbahn. Deine Rechnung funktioniert nur, wenn deine Flugbahn ohne Gravitation genau horizontal liegt. (Und das Projektil auf dem Weg nicht auf den Boden trifft!)
Ein extremes Gegenbeispiel wäre, wenn das Ziel genau über einem ist. Wenn es nur hoch genug ist, trifft man es nie. Bei deiner Rechnung kommt hingegen in diesem Fall totaler Unsinn heraus.
Alle anderen Winkel sind mehr oder weniger abgeschwächte Zwischenfälle zwischen diesen beiden Extremfällen.
Mist.
Danke für den Hinweis!
Hab ich irgendwie völlig vergessen.Muss das ganze wohl nochmal überdenken...
-
coder++ schrieb:
Mist.
Danke für den Hinweis!
Hab ich irgendwie völlig vergessen.Muss das ganze wohl nochmal überdenken...
Ballistik ist eben nicht so ganz einfach. Das haben erst die alten Europäer, so um das 16. Jahrhundert herum richtig hin bekommen. Und dann haben sie noch ~400 weitere Jahre gebraucht, um Maschinen zu konstruieren, welche die nötigen Rechnungen automatisch durchführen können, sogenannte Computer. Ich weiß nicht, ob noch welche davon erhalten geblieben sind, vielleicht könnte man sich an denen orientieren .
-
SeppJ schrieb:
coder++ schrieb:
Mist.
Danke für den Hinweis!
Hab ich irgendwie völlig vergessen.Muss das ganze wohl nochmal überdenken...
Ballistik ist eben nicht so ganz einfach. Das haben erst die alten Europäer, so um das 16. Jahrhundert herum richtig hin bekommen. Und dann haben sie noch ~400 weitere Jahre gebraucht, um Maschinen zu konstruieren, welche die nötigen Rechnungen automatisch durchführen können, sogenannte Computer. Ich weiß nicht, ob noch welche davon erhalten geblieben sind, vielleicht könnte man sich an denen orientieren .
Dann werd ich mich wohl mal mit Ballistik befassen.
-
coder++ schrieb:
Dann werd ich mich wohl mal mit Ballistik befassen.
Leider ist nicht ganz klar, wofür du das am Ende nutzen willst. Es gibt im Prinzip zwei wichtige Ansätze:
a) Du nutzt das Wissen, dass am Ende eine Wurfparabel raus kommt. Du kannst zu jeder Abschussrichtung und Geschwindigkeit problemlos die Bahngleichung angeben. Dann kannst du gucken, wo diese das erste Mal ein Ziel schneidet, um den Auftreffpunkt zu bestimmen.
b) Du integrierst die Bewegungsgleichungen. Und zwar nicht analytisch, sondern indem du die Zeit in kleine Schritte zerlegst (es gibt auch andere Methoden, aber dies ist eine sehr intuitive) und in jedem Schritt dein Projektil entsprechend der Bewegungsgleichungen versetzt. Und gegebenenfalls guckst, ob es irgendwas trifft.Was davon besser ist, kommt drauf an, was für eine Art von Spiel das ist und welche Art von Ergebnis gewünscht ist. Wenn das Spiel irgendwie in "Zeitschritten" abläuft, dann bietet sich Methode b an. Wahrscheinlich hast du Methode b dann sogar bereits implementiert. Die Methode hat außerdem den Vorteil, dass man damit auch problemlos alles mögliche sonst an Physik auch simulieren kann, ohne die Methode ändern zu müssen. Bei Methode a kommt man hingegen schnell zu Fällen, bei denen das System so komplex ist, dass man keine genaue Lösung mehr im Voraus angeben kann.
Wenn hingegen eher statisch dem Spieler vorhergesagt werden soll, wo das Projektil aufkommen wird, vielleicht sogar mit Einblendung der Flugbahn, dann bietet sich eher Methode a an.
-
Ja Projektile werden bei mir in der Tat in Schritten simuliert(mehrere Strahlentests pro Bild), um eine einigermaßen gute Parabel darzustellen.
Ich will gerade nur, dass ein Projektil immer sein Ziel trifft, unabhängig von der Entfernung.
Ich schau mal ob ich dafür eine Lösung finde.
-
coder++ schrieb:
Ich will gerade nur, dass ein Projektil immer sein Ziel trifft, unabhängig von der Entfernung.
Ich schau mal ob ich dafür eine Lösung finde.
Du musst halt die Bahngleichung im Ortsraum nach deinem Endpunkt auflösen. Da das System unterbestimmt ist (du hast zwei Veränderliche, aber nur einen Fixpunkt), wirst du sogar jede Menge Lösungen erhalten. Das ist die mathematische Manifestation davon, dass man ein gleich weit entferntes Ziel treffen kann, indem man unter einem anderen Winkel mit einer anderen Geschwindigkeit abwirft.
-
SeppJ schrieb:
coder++ schrieb:
Ich will gerade nur, dass ein Projektil immer sein Ziel trifft, unabhängig von der Entfernung.
Ich schau mal ob ich dafür eine Lösung finde.
Du musst halt die Bahngleichung im Ortsraum nach deinem Endpunkt auflösen. Da das System unterbestimmt ist (du hast zwei Veränderliche, aber nur einen Fixpunkt), wirst du sogar jede Menge Lösungen erhalten. Das ist die mathematische Manifestation davon, dass man ein gleich weit entferntes Ziel treffen kann, indem man unter einem anderen Winkel mit einer anderen Geschwindigkeit abwirft.
Okay.
Und danke für alles.