AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Der Schiefe Wurf

Ein Thema von Neutral General · begonnen am 5. Feb 2008 · letzter Beitrag vom 5. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Der Schiefe Wurf

  Alt 5. Feb 2008, 15:42
Hi,

Das ist mein offizieller Thread zum schiefen Wurf
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:12
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:18
Was ist denn t? Normerweise die Zeit. Man setzt doch die Zeit nicht zurück.

Edit:
Zitat:
Falls jemand das Problem versteht ...
Nö.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:21
Soweit ich weiß, habe ich den "Schiefen Wurf" in folgendem Programm recht ordentlich implementiert:
http://www.delphipraxis.net/download.php?id=29988
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:25
Hi,

Naja ich habe vorher diese einfache Formel benutzt:

http://upload.wikimedia.org/math/1/5...e4ec64ec18.png

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...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:44
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 16:51
Hi,

Ja wie ich das ganze ausrechne habe ich schon verstanden.
Da hat mir folgende Seite gehofen:

Matheplanet - Schiefer Wurf

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:
//
    Figur
      | <--- Wind
      | <--- Wind
 ----------------------
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?^^
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 17:29
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:
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;
Und wenn du jetzt Wind haben willst, dann setze eben Ax auf einen Wert<>0 (z.B. -0.1)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#10

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 17:40
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:
Vx:=Vx+Ax;
Vy:=Vy+Ay;
du kannst doch keine beschleunigung mit einer geschwindigkeit addieren. du musst berechnen wie lange beschleunigt wird.

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz