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
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.
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.
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)
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)
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.
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).
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.