Wie ein Tischtennisball doch einen Kopf zum glühen bringen kann...
-
Hallo!
Schickes Thema, oder?
ABer es stimmt...
Ichhabe vor, ein Programm zu schreiben, welches eine Flugbahn eines Tischtennisballs berechnet und in 3D ausgibt.
Vorgbeben muss man:Drehung der Kelle auf X-Achse und Y-Achse, Schlagkraft, Drehung des Balles in alle drei Richtungen.
Ich glaube, ich habe mal in der Schule gelernt, dass ein Ball eine Parabel fliegt, oder?
Nun will ich aus diesen Angaben eine Funktionsglecihung aufstellen, aber ich kriege das nicht hin.Anfange will ich so:
Der winkel wird berechnet, in die der Ball fliegt.Ich muss irgend´wie auf den Scheitelpunkt kommen, ich dachte mir das irgendiwe so:
|\ | \ | \ <- L der Strecke = Schlagstärke | \ |h \ | \ | \ <- Winkel |-------------- s /* DAnach wäre h=sin(Winkel)*l s = cos(WInkel)*l der Scheitelpunkt wäre dann also bei S(-s, h) Dann muss ich eine Parabel finden, die diese zwei Punkte schneidet: S(-s, h) und(s, 0) Das geht, es isnd ja zwei gleichungen->Lösbar. So, aber das ist eigentlich falsch, denn ich schlage den Ball dann in einem kleinereenm Winkel als angegeben. Eine andere Lösung fällt mir aber auch nciht ein.+ Habt ihr Links/Vorschläge/Suchbegriffe`? Ich weiß nciht, wie sich dieses Thema der Physik nennt, wonach ich suchen kann. */ Gruß, MAxi
-
-
So einfach ist das nicht, bei Berücksichtigung der Drehung des Balles wird das echt krass
-
Tja, ich weiß, deshlab will ich mir erstmal um die Drehung keine Sorgen machen, sondern einfach mal ne Gleichung finden, mit der sich die Flugbahn beschreiben lässt...
@Link: WAs soll ich damit? Brauch man dafür extra ne eigene Engine?
Gruß, Maxi
-
Dein Ansatz führt zu keinem Erfolg.
Grundsätzlich ist es gar nicht so schwierig, wenn Du mit dem Begriff "Integration eines Differentialgleichungssystems 1. Ordnung" etwas anfangen kannst.
Bereits der Ball wird recht knifflig... fang erst Mal mit einer Punktmasse (ohne räumliche Ausdehnung) an:
Dein Punkt-Ball wird beschrieben durch einen Zustandsvektor:
x, y, z, vx, vy, vz
Ich spanne das Koordinatensystem so auf:
y
^
|
---> x
z (geht nach Vorne)x,y,z ist der Ort
vx, vy, vz die Geschwindigkeit in die jeweilige RichtungEs gilt dann jeweils für einen Zeitpunkt t:
x(t) = x(t-deltaT) + vx(t-deltaT) * deltaT
y(t) = y(t-deltaT) + vy(t-deltaT) * deltaT
z(t) = z(t-deltaT) + vz(t-deltaT) * deltaT(wegen dx/dt = v, Umkehrung der Ableitung, das oben ist eine angenäherte Integration durch Summenformel).
vx(t) = vx(t-deltaT)
vy(t) = vy(t-deltaT) - g * deltaT
vz(t) = vz(t-deltaT)Das - g * deltaT ergibt sich so:
Die Geschwindigkeit ist v = v0 + at
F = ma, d.h. hier wirkt also eine beschleunigende Kraft nach unten mit F = mg, also eine Beschleunigung von g nach unten. Die dadurch verursachte Änderung von v ist a * deltaT, also g * deltaT. Abziehen, da y nach oben gerichtet ist.
Und nun merkst Du bereits, daß Dein Ball in in x und z-Richtung unendlich weit fliegen wird! Ist auch richtig, da dieses Modell nur im Vakuum ohne Luftreibung gilt. Du müßtest nun noch eine Reibung für die Luft hinzubringen, diese übt eine Kraft aus, die dann über F = ma in eine Beschleunigung umgerechnet wird und die Geschwindigkeit ändert.
Als deltaT setzt man eine kleine Zeit, z.B. 1ms. Und nun läßt Du ein schönes t = 0; t < ... ; t += deltaT drüberlaufen und rechnest zu jedem Zeitpunkt den Zustandsvektor x,y,z,vx,vy,vz aus.
Noch ein Wort zu den Anfangsbedingungen:
x(0), y(0), z(0) ist der Anfangspunkt des Balles
vx(0), vy(0), vz(0) die Anfangsgeschwindigkeit, wie der Ball also geschlagen wurdeViel Spaß. Als Ergebnis kommt übrigens eine Parabelbahn raus.
Du kannst die Berechnung z.B. abbrechen, sobald y = 0 wird (dann liegt der Ball am Boden).
Willst Du noch Rotation hinzu nehmen, so ergeben sich 6 weitere Vektoren, die dann die Drehung in x, y, z-Richtung und die Winkelgeschwindigkeit in x,y,z angeben (in Winkelgraden pro Sekunde). Die Berechnung dafür wird dann ähnlich, nur kommt dann Massenträgheitsmoment und Drehmoment ins Spiel. Zusammen mit der Luftreibung wird das richtig lustig. Aber der Ansatz bleibt so erhalten!
Falls jemand noch Einwände hat, ich habe das jetzt nur kurz aufgeschrieben, evtl. fehlt noch eine Kleinigkeit. Aber das ist bereits das komplette Zustandssystem.
-
Zur Parabelbahn würde ich einmal ins Physikbuch 11. Klasse gucken (falls vorhanden). Ich meine da wurd sowas behandelt.
-
He Marc++us, erstaunlich dass du immer wieder so viel Zeit in deine Antworten investiert
. Bist du nicht ausgelastet bei der Arbeit ?
-
Hey, Danke.
Auch, wenn ich es nicht richtig verstanden habe(gehe ja erst 10. Klasse...), denke ich, dass damit rechnen kann.
Mit der Drehung dachte ich mir so, dass ich erst die Position ausrechne, ohne Drehung und dann einen Richtungsvektor addiere, der durch die Drehung ausgerechnet wird. Das dachte ich mir so, dass Ich die Zeit nehme und die mit der Bewegung pro 1 ms z.B. multipliziere. Und davon ziehe ich dann z.B. e^-t*Bewegung ab, wiel der Ball sich ja immer langsamer dreht, je lnger er fliegt, wegen dem Luftwiderstand.Ist der Ansatz so machbar?
-
Bist du nicht ausgelastet bei der Arbeit ?
Welche Arbeit?
Er sitzt irgendwo an der Südküste, in einem schönen grossen Büro mit Kühlschrank
und scheucht die Mitarbeiter durch die Gegend.
Also ich sehe da keine Arbeit.
Du?
-
Original erstellt von <C.F. Gauß>:
He Marc++us, erstaunlich dass du immer wieder so viel Zeit in deine Antworten investiert. Bist du nicht ausgelastet bei der Arbeit ?
Also solche 5 Minuten zählen bei mir eher als Pause. :p Ansonsten gilt das von Frau Möller gesagte.
@Maxi: Dein Ansatz für die Drehung ist so wohl machbar, er geht ja in eine ähnliche Richtung wie von mir dargestellt. Beachte nur, daß Du Drehungen in 3 Richtungen hast. Rotation um jede Achse ist möglich. Wobei ein Ball wohl meistens nur entlang einer Achse dreht. e-Funktion ist da aber trotzdem keine im Spiel...
Du könntest die Drehung einfach so linear runterrampen.
-
aber wird der Ball denn immer gleich schnell langsamer? Ich dachte, er wird anfangs viel schneller alngsamer als am Ende.
-
Bei Geschwindigkeitsgesetzen kommen normal noch Quadrate vor, kein e. Bei der Drehung wirken die Sachen mit Drehmoment und Massenträgheit, diese Gesetze sind analog zur Bewegung und daher maximal quadratisch. Nur weiß man natürlich nicht, wie die Kraft die Drehung tatsächlich verlangsamt. Luftwiderstand ist die bremsende Kraft hier, aber nach welchem Gesetz die nun die Drehung verlangsamt... Du solltest Dir für diese Simulation zunächst mal eine recht einfache hemmende Wirkung raussuchen, daher der Vorschlag mit der Linearität.
-
OK, ich werds so machen. Und dann später, wenn alles funktioniert, dann werden die Rechnungen noch etwas komplizierter und genauer.
-
Frage: Fliegt der Ball im Vakuum? Ansonsten wird nämlich keine Parabel sondern eine nette ballistische Kurve draus ;).
Da wird die Formel je nach Detailgrad dann etwas öhm länger ;).
MfG SideWinder
-
Ich dachte, der Ball fliegt auch in der Luft eine Parabel?
Nein, der Ball fleigt an unserer ganz normalen Luft...
-
Wenn du die Drehung berücksichtigst kommt noch der Magnus-Effekt dazu: http://iva.uni-ulm.de/PHYSIK/VORLESUNG/fluidemedien/node29.html http://www.geocities.com/k_achutarao/MAGNUS/magnus.html http://www.google.de Und komm nicht auf die Idee den zu vernachlässigen, jeder halbwegs fortgeschrittene Spieler nutzt den gnadenlos aus. Die Luftreibungskraft ist ansonsten (wg. turbulenter Strömung) übrigens quadratisch proportional zur Fluggeschwindigkeit. Insgesamt wird das ganze damit extrem spaßig.
-
Wir haben gelernt, dass der Ball nicht wie hier gezeigt:
+++++++++ +++ +++ ++ ++ + +
fliegt sondern durch die Luft gebremst wird und daher zu so einer Bewegung kommt:
++++++++ +++ ++ <- durch Luftwiderstand steilere Fallkurve ++ + + +
Da ja die Luft die Geschwindigkeit bremst (wie auch Marcus bereits gesagt hat). Daher ist eine einfache Parabelgleichung imho falsch?!
MfG SideWinder
-
Mathematiker haben oft das Problem, daß sie eigentlich nur statische Systeme beschreiben können oder wollen, und daher selbst einfachste Dinge wie den circle-hack
x+=dy;
y-=dx;
als komische kurven wie "kreis" beschreiben wollen. es ist nicht immer angebracht, wie man auf jeder chaos-tagung lernt.Fang mal schlicht mit nem Ball an, der keinen Lustwiderstand und keine Drehung kennt.
Und dann sag in der Huptschleife:
position+=dgeschwindigkeit;
geschwindigkeit+=dbeschleunigung;fang zum Bleistift an mit
vector geschwindigkeit(1,1,0);//schräg nach rechts
vector position(0,0,0);//da findet man ihn gut
double d=0.01;//ka, wie schnell der nu ist
vector beschleunigung(0,9.81,0);//mit g senkrecht nach untenund nu ein wenig basteln, um das höbsch anzuzeigen. das modell würd ich in si-einheiten stehen lassen, ist im zweifelsfall einfach besser. anpassungen an bildschirm geht auch anders.
und dann kannste coole widerstände und alles einbauen. annahme, es gäbe eine widerstandskraft, die schlicht cw-Wert des balls mal geschwindigeitsquadrat gegen ballrichtung wäre?
vector lustwiderstand=cw*geschwindigkeit.abs*geschwindigkeit.normiere()*-1;
und das in die hauptschleife rein.hat der drall nen effekt? na, sicher. der ball wird ja dadurch zur seite gezogen. ich nehme an, duch den größeren unterdruck (also kleineren überdruck) an der seite, wo sich der ball durch den drall dem wind schneller entgegenwirft. für rotierende zylinder hab ich dafür auch mal formeln gesehen.
aber bleib bei den momentaufnahmen, und versuch erst gar nicht, so ein nichtlineares dynamisches system erst mit viel mühe zu line*****ätzen, und dann integrieren, und dann (und jetzt kommts:) die entstanden formel doch wieder stückweise abzufahren, um die punkte zu kriegen, wo der ball zu sehen ist.
[ Dieser Beitrag wurde am 16.06.2003 um 21:47 Uhr von volkard editiert. ]
-
Uiuiuiui, ich hab mir da ganz schön was vorgenommen...
Ich muss mir das alles nochmal ganz genau durchdenken und dann nur erstmal mi den wichtigsten Dingen anfangen und nach und nach es immer komplizierter werden lassen, wenn mein PC da mit amcht(PIII, 500MhZ)
Gruß, Maxi
-
Original erstellt von volkard:
... keinen Lustwiderstand ...HEHE
hast du lustwiderstand, volkard?wenn dich deine frau fragt: KOMM VOLKARD WIR GEHN FIGGN
dann sagst du: NEIN MEIN LUSTWIDERSTAND IST ZU HOCH