Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Abschusswinkel gesucht (https://www.delphipraxis.net/85785-abschusswinkel-gesucht.html)

3_of_8 4. Feb 2007 21:10


Abschusswinkel gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Morgen.

Ich hab grad ein kleines Problem.

Sagen wirs mal so:

An Punkt A steht ein KI-Gesteuerter... Panzer.
An Punkt B befindet sich sein Ziel, das sich mit einer Geschwindigkeit vb bewegt.

Der Panzer an Punkt A kann Geschosse der Geschwindigkeit vg verschießen.

Gesucht ist jetzt der Punkt c, bei dem Gegner und Geschoss zusammenstoßen bzw. der Abschusswinkel alpha, bei dem sie das tun. Daraus berechnet sich dann noch die Zeit t vom Abschuss bis zum Aufprall.

Im Anhang befindet sich eine Skizze.

In der Skizze wären A, B, C unsere bekannten Punkte sowie alpha der Abschusswinkel.

a wäre der Abstand zwischen Panzer und Gegner.
b ist der Weg, den das Geschoss in t zurücklegt.
c ist der Weg, den der Gegner in t zurücklegt.

a, vb, vg sind gegeben.

Jetzt lassen sich folgende Gleichungen aufstellen:
b=t*vb
c=t*vg

Daraus resultierend:
b/c=vb/vg

Aber wie berechne ich jetzt alpha?

Der_Unwissende 4. Feb 2007 21:38

Re: Abschusswinkel gesucht
 
Hi,
sorry wenn's etwas wirr wird, hab gerade nur dein Problem überflogen und antworte vermeintlich an der Frage vorbei (warne nur vor, egal, schau einfach mal).

Ja, Du hast für deine beiden Bewegungen einen Startpunkt und eine Geschwindigkeit. Daraus kannst Du natürlich leicht eine Geradengleichung aufstellen und den Schnittpunkt (Zeitpunkt) berechnen. Wichtig ist es natürlich, dass überhaupt einen Schnittpunkt gibt (aber der Abschusswinkel dürfte kaum parallel zum Fahrzeug sein).
Jedenfalls kannst Du über das Gleichsetzen der Gleichungen die beiden Bahnen (Bewegung Fahrzeug und Bewegung Geschoss) berechnen.
Diese Bahnen kannst Du wiederum einfach als Vektoren auffassen und den Winkel zwischen zwei Vektoren kann man leicht über das Skalar-Produkt bestimmen. Dieses war (prüf es lieber noch mal nach) grob etwas wie: v(a) * v(b) = |v(a)| * |v(b)| * cos(alpha), mit v(x) = Vektor x (halt kein Vektorpfeil zur Verfügung).
Ja, daraus solltest Du dann natürlich auch den Winkel bestimmen können.

Wenn ich die Frage richtig verstanden habe, möchtest Du aber überhaupt erstmal einen Abschusswinkel bestimmen, so dass das Geschoss und das Fahrzeug einander treffen? Das ganze sollte immer dann klappen, wenn das Geschoss schneller ist als das Fahrzeug, unbegrenzt weit fliegt und einen nicht paralleler Winkel gewählt wird.

Ja, hoffe es hilft weiter,
Gruß Der Unwissende

Jelly 4. Feb 2007 21:41

Re: Abschusswinkel gesucht
 
Geschosse fliegen eine Parabelbahn. Das wurde bislang noch nicht berücksichtigt. Ist vg gegeben oder in der Gleichung gesucht?

3_of_8 4. Feb 2007 22:12

Re: Abschusswinkel gesucht
 
@Jelly: vg ist gegeben. Ich gehe vereinfacht von einer konstanten Geschwindigkeit und gerader Schussbahn aus. Das "Geschoss" ist kein Sprengkopf, sondern eher eine großkalibrige Kugel, die mit hoher Geschwindigkeit und geringer Luftreibung fliegt.

EDIT: @Der_Unwissende: Wie genau? *kratz*
v(a)*v(b)? Soweit ich weiß, lassen sich Vektoren im Allgemeinen nicht untereinander multplizieren.

Jelly 4. Feb 2007 22:31

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
Ich gehe vereinfacht von einer konstanten Geschwindigkeit und gerader Schussbahn aus.

Ich versteh deine Formulierung nicht. Wenn gerade Schussbahn, wo treten denn dann Winkel auf?

Zitat:

Zitat von 3_of_8
v(a)*v(b)? Soweit ich weiß, lassen sich Vektoren im Allgemeinen nicht untereinander multplizieren.

Dann lerne erstmal die Grundlagen von der linearen Algebra. Grob gesagt ist die Multiplikation von Vektoren (in diesem Fall Skalarprodukt), die Multiplikation der beiden Prohektionen auf eine Achse der beiden Vektoren. Der Unwissende hat das schon richtig geschildert.

Und ums ganz verwirrend zu machen. Es gibt sogar 2 Verktormultiplikationen: Neben dem Skalarprodukt gibt es dann auch noch das Vektorprodukt, das allerdings ausschliesslich im 3D Raum definiert ist.

Aber zum eigentlichen Problem. Vielleicht benötige ich einfach mal eine detailliertere Beschreibung, denn so wie bislang beschrieben macht die Aufgabe keinen Sinn.

sirius 5. Feb 2007 07:11

Re: Abschusswinkel gesucht
 
Da programmierst du eine FFT und scheiterst an einer einfachen Wurfparabel :gruebel: ?
Als KDV darf ich dir eigentlich nicht verraten, wie sowas geht :mrgreen:

Aber gehe doch mal über eine gleichmäßig beschleunigte Bewegung in vertikaler Richtung mit Startgeschwindigkeit!

3_of_8 5. Feb 2007 13:03

Re: Abschusswinkel gesucht
 
So, jetzt noch einmal:

Ein Vektor v lässt sich multiplizieren mit einem Skalar a. Ein Vektor lässt sich allgemein jedoch nicht mit einem anderen Vektor w multiplizieren. Bei einigen Vektorräumen, z.B. bei Matrizen oder den komplexen Zahlen geht das zwar, aber bei einem Vektorraum allgemein nicht. So steht das zumindest in meinem LinAlg-Studienbrief.

Ich will nicht den vertikalen Abschusswinkel, sondern den Abschusswinkel auf der horizontalen Ebene. Der vertikale Winkel lässt sich, dank linearer Flugbahn des Projektils, einfach mit den trigonometrischen Funktionen berechnen. Der horizontale vermutlich auch, ich komm nur grad nicht drauf.

sirius 5. Feb 2007 13:08

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
Ich will nicht den vertikalen Abschusswinkel, sondern den Abschusswinkel auf der horizontalen Ebene. Der vertikale Winkel lässt sich, dank linearer Flugbahn des Projektils, einfach mit den trigonometrischen Funktionen berechnen. Der horizontale vermutlich auch, ich komm nur grad nicht drauf.

Woher nimmst du denn die ganzen Winkel, ich glaub, ich weis nicht mehr, was du willst....

Zitat:

Ein Vektor lässt sich allgemein jedoch nicht mit einem anderen Vektor w multiplizieren
Doch!

Edit: Und was denkst du, was man mit Vektoren und Matritzen noch so alles anstellen kann...

3_of_8 5. Feb 2007 13:43

Re: Abschusswinkel gesucht
 
http://de.wikipedia.org/wiki/Vektor_%28Mathematik%29

Zitat:

Eine Multiplikation von Vektoren ist im Allgemeinen nicht definiert.
Zitat:

Woher nimmst du denn die ganzen Winkel, ich glaub, ich weis nicht mehr, was du willst....
Ich will folgendes: Den horizontalen Winkel (Man könnte sagen: Yaw), in dem der Panzer seine in linearer Flugbahn fliegenden Projektile abschießen muss.

sirius 5. Feb 2007 14:01

Re: Abschusswinkel gesucht
 
Lassen wir das mit Matritzen :mrgreen: und Vektoren :mrgreen: :mrgreen:


Ich glaube, ich habe meinen Verständnissfehler gefunden:
Deine Skizze gilt als von oben betrachtet. Richtig?
Du interessierst dich demnach gar nicht für die Flughöhe (auch nicht indirekt)?

3_of_8 5. Feb 2007 14:30

Re: Abschusswinkel gesucht
 
Genau.

sirius 5. Feb 2007 14:38

Re: Abschusswinkel gesucht
 
Musst du dann nicht noch den Winkel zwischen a und c definieren?

3_of_8 5. Feb 2007 15:02

Re: Abschusswinkel gesucht
 
*kratz*

Äh... nein? Der ist doch durch das Verhältnis b/c und die Strecke a festgelegt.

Klaus01 5. Feb 2007 15:05

Re: Abschusswinkel gesucht
 
Wenn nur die Seiten a, b und c bekannt sind:

α = arccos ((b^2 + c^2 − a^2) / (2b*c))
β = arccos ((a^2 + c^2 − b^2) / (2a*c))
γ = arccos ((a^2 + b^2 − c^2) ÷ (2a*b))

Aus: -> http://de.wikipedia.org/wiki/Dreieck

Oder habe ich das auch falsch verstanden?

Grüße
Klaus

3_of_8 5. Feb 2007 15:09

Re: Abschusswinkel gesucht
 
Ähm... Das gilt nur im rechtwinkligen Dreieck, oder?

sirius 5. Feb 2007 15:10

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
*kratz*

Äh... nein? Der ist doch durch das Verhältnis b/c und die Strecke a festgelegt.

Du willst also ein Dreieck berechnen, wo du "nur" eine Seitenlänge kennst und zudem noch das Verhältnis der zwei anderen Seiten?
Das dürfte nicht klappen.

Klaus01 5. Feb 2007 15:13

Re: Abschusswinkel gesucht
 
Zitat:

Ähm... Das gilt nur im rechtwinkligen Dreieck, oder?
Nö, ich denke nicht, geht mit allgemeinen Dreiecken

Der Kosinussatz ist eine verallgemeinerte Form des "Pythagoras", mit dem sich die Seiten eines beliebigen Dreiecks berechnen lassen:

<Grafik fehlt >


Wenn nur die Seiten a, b und c bekannt sind:

α = arccos ((b2 + c2 − a2) ÷ (2bc))
β = arccos ((a2 + c2 − b2) ÷ (2ac))
γ = arccos ((a2 + b2 − c2) ÷ (2ab))
Handelt es sich um ein rechtwinkliges Dreieck, so beträgt der Winkel γ 90°. Damit gilt: . Für ein rechtwinkliges Dreieck gilt somit die Formel c2 = a2 + b2

Grüße
Klaus

3_of_8 5. Feb 2007 15:14

Re: Abschusswinkel gesucht
 
@sirius: Sehe ich anders.

@Klaus01: Die Seiten sind nicht bekannt.

sirius 5. Feb 2007 15:19

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
@sirius: Sehe ich anders.

Schön, mal über Grundlagen der Mathematik zu philosophieren. :mrgreen:

Ein Dreieck, dass einem Kongruenzsatz genügt, kann man berechnen.
Aber ein dreieck, dass "nur" einem Ähnlichkeitssatz genügt (eigentlich) nicht :gruebel:

Abgesehen, davon: Auf welchen Ähnlichkeitssatz spielst du denn an. Wennn ich mir die Dreiecke so bildlich vorstelle, ist da nix ähnlich (da ja "a" konstan bleibt).


Edit: Ö-Strichelchen vergessen :oops:

3_of_8 5. Feb 2007 15:21

Re: Abschusswinkel gesucht
 
Auf den letzten. Und ich will ja nicht das ganze Dreieck, mir reicht prinzipiell schon der Winkel. Und Winkel sind in ähnlichen Dreiecken generell gleich.

sirius 5. Feb 2007 15:25

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
Auf den letzten.

Du kennst ja nicht einmal einen Winkel, und S:s:W sagt, ja dass du eben einen Winkel kennen musst :roteyes:

Vielleicht solltest du deine Frage eher hier stellen.

3_of_8 5. Feb 2007 15:27

Re: Abschusswinkel gesucht
 
*kratz*

Äh

Stimmt.

:wall:

Aber eigentlich müsste es gehen. Kennt ihr diese Weltraumshooter wie Freespace2/Descent? Da gibts immer so eine Vorhalteanzeige. Ist prinzipiell das gleiche Problem, nur in 3D und bei mir in 2D.

Cöster 5. Feb 2007 15:28

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
b=t*vb
c=t*vg

Laut deiner Skizze müsste es eher heißen:
b=t*vg
c=t*vb

Zum Rest des Problems:
Du kannst die Geradengleichungen für c und b errechnen. Diese lässt du dann schneiden und du hast den Punkt C. Ob in diesem Punkt nun wirklich eine Kollision stattfindet prüfst du, indem du die Zeit t errechnest, die gebraucht wird, bis das Geschoss an diesem Punkt ist. Anschließend kannst du berechnen, wo das Ziel sich nach der Zeit t befindet. Daran lässt sich dann ablesen, ob es eine Kollision gibt.

Wenn du den Punkt C hast, dürfte es auch kein Problem darstellen, den Winkel zu errechnen.

sirius 5. Feb 2007 15:32

Re: Abschusswinkel gesucht
 
Zitat:

Aber eigentlich müsste es gehen. Kennt ihr diese Weltraumshooter wie Freespace2/Descent? Da gibts immer so eine Vorhalteanzeige. Ist prinzipiell das gleiche Problem, nur in 3D und bei mir in 2D.
Nee, kenne ich nicht.
Aber die kennen bestimmt die Bewegung des Zielobjektes, und damit den Winkel ac.

3_of_8 5. Feb 2007 15:48

Re: Abschusswinkel gesucht
 
Haaalt, den kenne ich auch (seh ich grad). Das ist kein Problem.

EDIT: Da schlägt jetzt auch der S:s:W-Satz zu.

Sidorion 5. Feb 2007 15:56

Re: Abschusswinkel gesucht
 
Das Problem ist die berechnung des Punktes C. Hier kann man sich prima der Vektorrechnung bedienen und folgende zwei Gleichungen aufstellen (^bedeutet Vektor. bei Großbuchstaben Ortsvektoren, bei Kleinbuchastaben Richtungsvektoren):
C^=B^+t*b^
C^=A^+t*g^
Diese setzen wir gleich und lösen nach t auf:
B^+t*b^=A^+t*g^
t*b^-t*g^=A^-B^
t=(A^-B^)/(b^-g^)
diese t setzen wir in eine der beiden Gleichungen ein und erhalten C^ (brauchen wir aber nicht, siehe unten).
C^=B^+(A^-B^)/(b^-g^)*g^
Auf diesen Punkt muss der Panzer zielen. Die ganze Winkelrechnerei kann man sich übrigens sparen, wenn diese (dritte) Gleichung in die 2. einsetzt und dann nach g^ umstellt, denn das ist der Richtungsvektor für den Schuss (und wie man aus einem Richtungsvektor einen Winkel errechnet sollte klar sein).

Hierbei kann man diese resultierende Gleichung noch in zwei zerlegen, indem man je eine Koordinate benutzt (jeweils immer x und y)

sirius 5. Feb 2007 16:08

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von 3_of_8
Haaalt, den kenne ich auch (seh ich grad). Das ist kein Problem.

EDIT: Da schlägt jetzt auch der S:s:W-Satz zu.

Na, wie wärs dann mal ganz billig mit: arcsin(c/b*sin(winkel ac))

ichbins 5. Feb 2007 16:37

Re: Abschusswinkel gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Um mal die Grundlagendiskussion fortzuführen: Ich bin der Meinung das Dreieck ist nicht Eindeutig und lässt sich nicht berechnen. Gegenbeispiel angehängt.


//edit
Ist ja auch eigentlich ganz logisch und durch den freien Willen des Gegners bedingt. Er kann frei entscheiden in welche Richtung er mit welcher Geschwindigkeit geht, also kann der Winkel Beta nicht aus dem Verhältniss der Geschwindigkeiten und aus a folgern. Wobei er aus a eh nicht folgen kann da a ja die einzige bekannte Strecke ist. Dein Panzer muss ja unterschiedlich schiessen je nachdem in welche Richtung der Gegner davonläuft --> folglich muss Beta auch (zusammen mit den Geschwindigkeiten) eine Rolle spielen und gegeben sein.

3_of_8 5. Feb 2007 16:56

Re: Abschusswinkel gesucht
 
Ich habe ja schon längst gesagt, dass der Winkel ac, also die Laufrichtung des Gegners, bekannt ist.

ichbins 5. Feb 2007 16:59

Re: Abschusswinkel gesucht
 
achso dann würde ich jetzt einfach mal sagen: sin(beta)*c = sin(alpha)*b für c ist Weg des Gegners und b ist Weg des Geschosses, also

alpha = sin-1(sin(beta)*c/b) = sin-1(sin(beta)*vg/vb)

dann kannst du über ein Differenzial ja sogar den Vertikalen Abschusswinkel und die Energie berechnen... *träum*

Sidorion 6. Feb 2007 08:50

Re: Abschusswinkel gesucht
 
Hat überhaupt jemand mal meinen Post gelesen?
Ihr braucht für diesen Spass nicht einen Winkel! Die Abschussrichtung gv lässt sich direkt aus den gegebenen Punkten und Vektoren berechnen. Aus dem Vektor gv lässt sich dann diskussionsfrei der Abschusswinkel bestimmen mit cos(gv.x) oder sin(gv.y), je nach Gusto.

Der_Unwissende 6. Feb 2007 11:28

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von Sidorion
Hat überhaupt jemand mal meinen Post gelesen?

Die Idee des Gleichseztens ist doch schon mehrfach genannt wurden (Beitrag #2, #23 und eben in #26), da weiß ich jetzt nicht wie Du auf die Idee kommst das den Post keiner gelesen hat :wink:

ichbins 6. Feb 2007 13:18

Re: Abschusswinkel gesucht
 
Zitat:

Zitat von Sidorion
Hat überhaupt jemand mal meinen Post gelesen?
Ihr braucht für diesen Spass nicht einen Winkel! Die Abschussrichtung gv lässt sich direkt aus den gegebenen Punkten und Vektoren berechnen. Aus dem Vektor gv lässt sich dann diskussionsfrei der Abschusswinkel bestimmen mit cos(gv.x) oder sin(gv.y), je nach Gusto.

Hat überhaupt jemand meinen Post gelesen?

Jenachdem ob der Gegner jetzt nach oben oder unten (Winkel) fährt brauchst du ein anderes Alpha, also MUSS die Formel zwingend irgendwie das Beta enthalten.

Cöster 6. Feb 2007 14:00

Re: Abschusswinkel gesucht
 
@Sidoron: Das Missverständnis liegt wohl darin, dass du, Der_Unwissende und ich dachten, dass es sich vb und vg um Vektoren handelt, die Richtungen also bekannt sind.

@ichbins: Du präsentierst in Beitrag #30 exakt die gleiche Lösung wie sirius in Beitrag #27.

Sidorion 6. Feb 2007 14:11

Re: Abschusswinkel gesucht
 
na zumindest vb sollte bekannt sein, das ist die Richtung, in der das Ziel fährt. |vb| sollte dann die Geschwindigkeit des Ziels sein. |vg| sollte auch bekannt sein, das ist die Geschwindigkeit des Geschosses. die Richtung von vg wird ja erst berechnet. Im Grund braucht man nur A, B, vb und entweder Betrag oder Richtung von vg.

Der_Unwissende 6. Feb 2007 14:44

Re: Abschusswinkel gesucht
 
Was fehlt denn im Moment noch?

Ich meine man hat die Startpunkte von Geschoss (A) und Ziel (B). Das Geschoss entfernt sich von A mit einer konstanten Geschwindigkeit vg. Der Abstand des Geschosses zum Abschusspunkt ist also unabhängig von der Richtung des Schusses. Das Fahrzeug wiederum näher oder entfernt sich vom Abschusspunkt A ebenfalls mit einer konstanten Geschwindigkeit. Hier ist zudem die Richtung bekannt, man kann also leicht den Abstand zwischen dem Fahrzeug zum Zeitpunkt t und dem Punkt A berechnen.
Um die Länge des Weges des Geschosses zu berechnen reicht es jetzt also, dass man diese beiden Abstände gleich setzt, oder übersehe ich irgendwas?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz