Forum: PC-Programmierung Idee für Algorithmus für Sprung-Laufbahn


von Peter P. (uncle-sam7)


Angehängte Dateien:

Lesenswert?

Hallo,

gegeben sei ein Feld mit 5x5 Rechtecken. Ich würde nun gerne einen 
"Stein" von einem der Felder auf ein anderes Feld "werfen".

Also soll das "Zielfeld" nicht einfach nur über eine Gerade verbunden 
werden, sondern eher etwas in der Form wie die Flugbahn eines geworfenen 
Steins. Die höchste Stelle des Bogens sollte dabei auch immer etwas über 
dem Zielfeld, bzw. des Startfeldes sein, so dass der Eindruck eines 
Wurfs entsteht.

Hat da evtl. jemand von euch eine Idee, wie man sowas berechnen kann? So 
ein eifaches Springen über SIN / TAN bekomme ich schon hin, aber für 
diesen Fall ist es wohl etwas schwieriger...

Programmiersprache wäre Java, aber C#, PHP etc. wären auch OK.

Vielen Dank für jede konstruktive Idee,
Peter

von Ich (Gast)


Lesenswert?

Parabelgleichung:
y = ax² + bx + c

Drei Punkte für x und y einsetzen (Startpunkt, Zielpunkt, Scheitel), die 
Parameter a, b und c ermitteln und dann für alle x-Werte die Höhe 
berechnen.

Scheitel müsst man ausprobiern, ist ein festes Verhältnis zwischen 
x-Abstand der Start- und Zielpunkte und Höhe über dem Mittelwert der 
Höhen von Start- und Zielpunkt. Könnte man aber auch als Lookup-Table 
speichern, nach Höhendifferenz und Wurfweite sortiert.

von Phantomix (Gast)


Lesenswert?

Dabei handelt es sich um eine Parabel, nicht um eine Kreisbahn, die mit 
Sin/Tan zu erschlagen wäre.

aus dem Physik-Unterricht:

Eine balistische Bahn ist eine überlagerte Bewegung bestehend aus einer 
gleichförmigen x-Komponente und einer gleichmäßig beschleunigten 
(-9,81m/s²) y-Komponente.

Mit dem Wissen sollte dir dein Programm (oder auch Excel) erstklassige 
Wurfbahnen zeichnen können.

von rf (Gast)


Lesenswert?

das kann man mathematisch korrekt mit vektoren machen

du musst mathematisch korrekt die flugbahn berechnen, dann diese 
funktion aus einem kamerapunkt auf die ebene projizieren(einfach gerade 
durch kamera- und funktions punkt und schnittpunkt gerade ebene 
berechnen)

von Phantomix (Gast)


Lesenswert?

Ja und um dann Startkoordinate -> Zielkoordinate hinzubekommen musst du 
die Koordinaten dann in die Wurf-Funktion eintragen und voila... 
Übrigens solltest du eine Reihe an gültigen Parabeln dabei 
herausbekommen aus der du dir eine aussuchen kannst (zb könntest du nach 
der suchen, bei der y um 20% größer ist als Start/Zielpunkt)

von Peter P. (uncle-sam7)


Lesenswert?

Phantomix schrieb:
> Dabei handelt es sich um eine Parabel, nicht um eine Kreisbahn, die mit
> Sin/Tan zu erschlagen wäre.
>
> aus dem Physik-Unterricht:
>
> Eine balistische Bahn ist eine überlagerte Bewegung bestehend aus einer
> gleichförmigen x-Komponente und einer gleichmäßig beschleunigten
> (-9,81m/s²) y-Komponente.
>
> Mit dem Wissen sollte dir dein Programm (oder auch Excel) erstklassige
> Wurfbahnen zeichnen können.

Hmm, das habe ich verstanden, und ich denke, dass ich so auch schöne 
Bögen berechnen könnte. Allerdings möchte ich im Endeffekt, dass der 
Startpunkt und der Zielpunkt feststeht, sowie der höchste Punkt des 
Bogens.

von Gernot B. (gernot_b)


Lesenswert?

Peter Pippinger schrieb:
> Hmm, das habe ich verstanden, und ich denke, dass ich so auch schöne
> Bögen berechnen könnte. Allerdings möchte ich im Endeffekt, dass der
> Startpunkt und der Zielpunkt feststeht, sowie der höchste Punkt des
> Bogens.

Was gefällt dir denn an der Methode des zweiten Postings (von "Ich 
(Gast)") nicht? Start, und Endpunkt hast du ja, den Scheitelpunkt kannst 
du dir ja einfach definieren (z.B. in der Mitte und gleich hoch wie die 
Grundstrecke lang).

von Martin S. (sirnails)


Lesenswert?

Die Physik sagt:

von peter (Gast)


Lesenswert?

Hallo,

also ich habe mich jetzt dafür entschieden, die oberen 180° von SIN zu 
nehmen (0, -1, 0).

Als Startpunkte y / Endpunkte y nehme ich dann
die Schnittpunkte von x
bei jeweils y 0.166, 0.166*2, 0.166*3, 0.166*4, 0.166*5, 0.166*6

Den "Abstand" kann ich dann einer gleichmäßigen "Bewegung" von x Start 
nach x Ende durchgehen...

Ich denke, das dürfte super aussehen. Werde das mal umsetzten und die 
Ergebnisse posten...

Viele Grüße,
Peter

von Vlad T. (vlad_tepesch)


Lesenswert?

wo ist denn das Problem eine einfache ballistische Flugbahn zu 
berechnen?

http://de.wikipedia.org/wiki/Wurfparabel
1
x(t) = v_0 * t * cos(winkel)               (1)
2
y(t) = V_0 * t * sin(winkel) - g/2 * t²    (2)

willst du nur die Parabel zeichnen, kannst du (1) nach t umstellen und 
in (2) einsetzen und hast eine y(x)-Funktion

von gerd b. (Gast)


Lesenswert?

Hallo Peter,
wenn man die Wurfbahn nachbilden möchte, sind die Bewegungsgleichungen 
sehr einfach. Die Position muss nur um die Geschwindigkeit erhöht 
werden:
1
// Bewegung des Steines simulieren
2
x += v_x;
3
y += v_y;
4
z += v_z;

und für die Z-Richtung wird zusätzlich die Geschwindigkeit um die 
Erdbeschleunigung erhöht:
1
// Z-Richtung hat zusätzlich die Erdbeschleunigung
2
v_z += -9.81 m/s²;

Wie das ganze dann in JAVA aussieht, hab ich hier mal gezeigt. Ich hab 
zusätzlich noch einen Schatten eingefügt, die X und Y Position ist die 
gleiche, wie die des Steines. Die Höhe (Z) ist jedoch immer 0.

Gerd

von gerd b. (Gast)


Lesenswert?

ups ..
Hier der Link zum Java-Applet:

http://www.sebulli.com/SprungLaufbahn/

von Peter P. (uncle-sam7)


Lesenswert?

Hallo Gerd,

Hut ab meine Herren. Das hast Du echt super gemacht! Sieht echt klasse 
aus. Allerdings möchte ich meine Variante in 2D auch mal testen. Würde 
mich einfach interessieren, ob das auch so realistisch wie bei Dir 
aussieht.

Viele Grüße,
Peter

von gerd b. (Gast)


Lesenswert?

Hallo Peter,

Ist eigentlich kein "3D". eher ein "2.5D".

Ich rechne zwar im 3D Raum, übernehme dann für den 2D Raum die x und 
y-Koorindaten und rechne auf die y-Koordinate noch einen Z-Anteil drauf. 
Dadurch entsteht der Eindruck der "Höhe"
1
// Transformation der 3D Koordinaten in den 2D Raum
2
stein_2D_x = stein_3D_x; 
3
stein_2D_y = stein_3D_y-stein_3D_z*3;

Sourcecode ist ja untenhalb des Applets als ZIP angefügt.

Gerd

von Sam .. (sam1994)


Lesenswert?

da ist ein kleiner bug drin: Wenn man den Button drückt bevor der Stein 
landet, kann es sein dass die neuen Kordinaten außerhalb des Spielfeldes 
liegen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.