![]() |
Der Schiefe Wurf
Hi,
Das ist mein offizieller Thread zum schiefen Wurf :mrgreen: Versuche ihn gerade in ein Programm von mir einzubauen. Bisher hatte ich nur eine einfache Formel für den freien Fall im Vakuum benutzt. Und sobald der Spieler auf dem Boden aufknallt habe ich die "Fallzeit" t wieder auf 0 gesetzt. Beim schiefen Wurf habe ich ja jetzt auch noch andere Möglichkeiten. z.B. könnte ich damit einfach den Spieler nach hinten beschleunigen während er auf dem Boden steht. Z.B. ein Wind oder so der ihn etwas nach hinten drückt. Das Problem ist ja das ich t dann nicht = 0 setzen kann wenn die Spielfigur den Boden berührt. Falls jemand das Problem versteht ... :? Gruß Neutral General |
Re: Der Schiefe Wurf
Wenn du es richtig korrekt haben willst, dann musst du die Reibung unter anderem beachten und die hängt ja bekanntlich vom Material und der Figur deines Objektes ab .. Das dürfte leicht kompliziert werden.
|
Re: Der Schiefe Wurf
Ja ich werde später den Luftwiderstand miteinberechnen aber das reicht dann auch. Mein Problem ist ja eher die Zeit. Ich meine man beschleunigt ja und die Geschwindikeit nimmt immer weiter zu, umso länger man beschleunigt. Beim freien Fall hab ich t auf 0 gesetzt wenn die Figur den Boden berührt hat. Das geht ja jetzt nichtmehr weil man ja z.B. nach hinten oder vorne beschleunigt werden kann und gleichzeitig auf dem Boden steht.
|
Re: Der Schiefe Wurf
Was ist denn t? Normerweise die Zeit. Man setzt doch die Zeit nicht zurück.
Edit: Zitat:
|
Re: Der Schiefe Wurf
Soweit ich weiß, habe ich den "Schiefen Wurf" in folgendem Programm recht ordentlich implementiert:
![]() |
Re: Der Schiefe Wurf
Hi,
Naja ich habe vorher diese einfache Formel benutzt: ![]() Und sobald die Spielfigur auf den Boden aufgeknallt ist, wird t wieder auf 0 gestellt weil sonst würde man beim nächsten Fall ja mit der Geschwindigkeit "weiterfallen" mit der man aufgeknallt ist... |
Re: Der Schiefe Wurf
Ach, du bist noch bei den Grundlagen der Dynamik. (Oh, da muss ich mal tief kramen; mal sehen ob etwas Sinnvolles herauskommt)
Ja, in dem Fall ist es gut die Zeit auf 0 zu setzen. So und jetzt benötigst du beim schrägen wurf eben eine Anfangsgeschwindigkeit. Desweiteren gilt das Superpositionsprinzip. Du kannst also alle Dimmensionen einzeln betrachten. Beim schrägen Wurf (von (0,0) aus) für y gilt für dich y(t)=vy0*t-1/2g*t^2 und für die x richtung einfach x(t)=vx0*t wobei vx0 und vy0 die Anfangsgeschwindigkeiten sind. Das kannst du jetzt natürlich so analytisch durchrechnen und für bestimmte Zeitpunkte die Position berechnen. Wenn das Objekt dann irgendwo abprallt musst du eben mit neuen Anfagsgeschwindigkeiten und wieder mit t=0 reingehen. Möglichkeit Zwei (habe ich immer bevorzugt) macht das ganze etwas numerischer. Du legst dir anfangs drei Werte zurecht: Geschwindigkeit, Ort und Beschleunigung Und das am besten für die x und die y Richtung. Und dann errechnest du wie in einer Folge aus den vorangegangenen werten einfach die nächssten. Und wenn irgendwo ein Abpraller ist änderst du halt das Vorzeichen einer Geschwindigkeitskomponente. |
Re: Der Schiefe Wurf
Hi,
Ja wie ich das ganze ausrechne habe ich schon verstanden. Da hat mir folgende Seite gehofen: ![]() Habs bis 3.2 durchgelesen und mittlerweile denke ich mal auch verstanden. Aber die Frage ist ja, wann ich t auf 0 setze wenn die Figur schon auf dem Boden steht also:
Delphi-Quellcode:
bei so einem Fall kann ich ja auch die Regeln des schiefen Wurfs anwenden soweit ich das verstanden habe aber sofern die Windkraft parallel zum Boden verläuft bleibt die Figur ja stehen und so kann ich nicht die Regel anwenden - "Wenn die Figur den Boden berührt oder irgendwo gegenknallt, dann setze ich t=0" weil die Figur ja die ganze Zeit den Boden berührt und eben nur zurückgedrückt würde. Versteht ihr?^^
//
Figur | <--- Wind | <--- Wind ---------------------- |
Re: Der Schiefe Wurf
Ich habe mal diese analytischen Formeln völlig links liegen gelassen und lieber Variante 2 gewählt:
Weg ist Integral der Geschwindigkeit und Geschwindigkeit ist Integral der Beschleunigung. Also müssen wir nur immer die Beschleunigung zur Geschwindigkeit addieren und die Geschwindigkeit zum Weg (oder zur Position)
Delphi-Quellcode:
Und wenn du jetzt Wind haben willst, dann setze eben Ax auf einen Wert<>0 (z.B. -0.1)
type
TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; procedure FormPaint(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } Pos:array of TPoint; PosX,PosY:double; Vx,Vy:double; Ax,Ay:double; procedure add(x,y:double); public { Public-Deklarationen } end; var Form1: TForm1; const ScaleX=1; ScaleY=2; implementation {$R *.dfm} procedure TForm1.FormPaint(Sender: TObject); begin if length(Pos)>1 then canvas.Polyline(Pos); end; procedure TForm1.add(x,y:double); var p:integer; begin p:=length(Pos); setlength(Pos,length(Pos)+1); Pos[p].X:=round(X*scaleX); Pos[p].Y:=clientheight-round(Y*scaleY); end; procedure TForm1.Button1Click(Sender: TObject); begin PosX:=0; PosY:=0; Vx:=10; Vy:=12; Ax:=0; Ay:=-1; setlength(pos,0); add(PosX,PosY); timer1.Interval:=20; timer1.Enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin PosX:=PosX+Vx; PosY:=PosY+Vy; if PosY<=0 then begin //Korrektur bei Abprall (kann noch verbessert werden) PosY:=-PosY+Vy; Vy:=-Vy; if PosY<>0 then add(Posx-Vx/2,0); //Abprallpunkt auf der Hälfte des Weges zeichnen end; Vx:=Vx+Ax; Vy:=Vy+Ay; add(PosX,PosY); if Pos[high(pos)].X>clientwidth then timer1.enabled:=false; repaint; end; |
Re: Der Schiefe Wurf
Wenn v << c dann gilt:
vv = Geschwindigkeit vertical vh = Geschwingigkeit horizontal vv = g * t vh = a * t + v0 v² = (vh)² + (vv)² v = (g * t)² + (a * t + v0)² v = g² + 2gt + t² + a² + v0² + t² + 2at + 2av0 + 2tv0 v = g² + 2gt + a² + 2at + 2t² + 2tv0 + 2av0 Zitat:
angenommen ein ball fällt 10 sek lang herunter. und hat dabei eine beschleunigung durch den wind von a = 1m/s², dann ist vh = a * t + v0 //v0 ist Null vh = 1m/sek² * 10 sek vh = 1m/s wenn du jetz den ort bestimmen willst an dem der ball einschlägt, so ist dies s = v * t s = 1m/s * 10 sek s = 10m der ball schlägt also 10 meter entfernt ein*** . *** = entfernt vom einschlagspunkt beim Fall ohne wind, in richtung der beschleunigungskraft. gruß snow |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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