Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 12:25

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 00:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich habe einen Richtungsvektor, eine Masse und eine Position für mein Objekt.

Wenn ich jetzt mein Objekt mit einer geschwindigkeit X losschieße... wie berechne ich da die flugbahn? :oops:

Sollte eigentlich ganz simpel sein und ich weiß das ich das schon zig-mal gemacht hab... aber steht grad total auf dem schlauch..

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 02:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Position(t+1)=position(t)+richtungsvektor*geschwindigkeit

Wobei man davon ausgeht, dass Geschwindigkeit angibt, wie sehr sich die Position in einer Zeiteinheit ändert.
Die Masse ist dabei egal.
Wenn du die Gravitation noch reinrechnest (ohne finde ich eine Flugbahnrecht recht lame), musste du "nur" die y-Komponte (wenn y oben und unten angibt) jede Step um einen konstanten Wert (die Gravitation) verkleinern. Also wieder in Pseudocode:

Position(t+1)=position(t)+richtungsvektor(t)*geschwindigkeit
richtungsvektor(t+1).y=richtungsvektor(t).y-gravitationskonstante

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 07:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Bei dir würde aber alles mit gleicher Geschwindigkeit nach unten bewegt, egal ob Ferder oder Amboss. Von daher würde ich das ganze so ändern das die Masse mit der Konstante multipliziert wird und dann abgezogen wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 07:57 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Zitat:
Bei dir würde aber alles mit gleicher Geschwindigkeit nach unten bewegt, egal ob Ferder oder Amboss.

Ist doch korrekt. Von Luftwiderstand/Reibung hat noch keiner gesprochen.

Bei der Änderung des Richtungsvektors müsste man aber eigentlich auch die Zeit berücksichtigen.

@Aya: Du nutzt doch jME, oder? Da könnte vielleicht jme2physics für dich interessant sein.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 08:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Ein Objekt, unabhängig seiner Masse, wird mit jeder Zeiteinheit um den Wert der Gravitation schneller. Da g auf der Erde 9.81m/s² ist und auf den Erdmittelpunkt zielt nehme ich das mal als Beispiel.

Op = Objekt-Positionsvektor [m aus R³]
Ov = Objekt-Bewegungsvektor (Betrag = Geschwindigkeit , Richtung = Bewegungsrichtung) [m/s aus R³]
g = Gravitation [9,81m/s² aus R³]
dt = Zeit seit letzter Berechnung in sekunden

Da ich überall R³ zugeschrieben habe ist hoffentlich erkenntlich, dass es sich hierbei um Vektoren im 3-dimensonalen Raum handelt. sogar bei der Gravitation, da diese ja eigentlich nur eine Beschleunigung in eine Richtung ist. 'm' meint hier die Maßeinheit Meter, da g sich auf Meter bezieht. Hast du für dein Koordinaten-System einen anderen Maßstab zur Umrechnung musst du das natürlich berücksichtigen.

Die bewegung des Objektes ergibt sich aus seiner aktuellen Position zuzüglich der zurückgelegten Distanz seit der letzten Berechnung.
D.h.: Op' = Op + Ov*dt
da Ov als Einheit m/s hat und dt in Sekunde angegeben ist, kürzt sich die Sekunde von Ov weg. Es bleiben Meter über. So wie für unsere Position vorgegeben.
Jetzt gilt zuberücksichtigen, dass sich nicht nur die Position des Objektes verändert, sondern auch seine Bewegung. Das heißt auch Ov muss erneut berechnet werden. Die neue Bewegung eines Objektes ergibt sich aus der vorherigen Bewegung zuzüglich der Beschleunigung über das vergangene Zeitintervall seit der letzten Berechnung.
D.h.: Ov' = Ov + g*dt
Auch hier kürzen sich wieder Sekunden weg, allerdings werden aus m/s² (Beschleunigung) m/s (Geschwindigkeit), was für unsere Bewegung notwendig ist.

Diese Rechenschritte musst du nun für jedes Objekt in jedem Frame/Berechnungsschritt durchführen. Es macht Sinn, jedem Objekt einen Zeiger (in C++ einfach zu realisieren durch statics) auf die Variable zu geben, mit der du die Zeit zwischen den Frames misst. Auf diese Weiße sind alle Objekte immer auf den laufenden, ohne dass doppelte Daten existieren, oder Daten verschoben werden müssen.

Der Kehrwert der gemessenen Zeit ist übrigens die Framerate.

Edit: g kann als Vektor auch so geschrieben werden (0,-9.81,0). Zeigt also nach unten, wodurch eine Beschleunigung nach unten auf das Objekt wirkt, die unserer Erdgravitation ja am nähesten kommt. Genauso kann man auch Beschleunigungen aus anderen Richtungen wirken lassen um zum Beispiel einen "Magneten" zu erstellen (g zeigt dann vom Objekt aus auf den Magneten mit beliebiger Länge).

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 09:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
FrenK hat geschrieben:
Bei dir würde aber alles mit gleicher Geschwindigkeit nach unten bewegt, egal ob Ferder oder Amboss. Von daher würde ich das ganze so ändern das die Masse mit der Konstante multipliziert wird und dann abgezogen wird.

Man könnte das Verhalten über die Dichte simulieren. Mit Dichte gegen unendlich geht die reele Gravitationsbeschleinigung gegen eine feste maximale Konstante, sonst halt kleiner.
Die Masse würde sich hier nur schlecht Eignen, weil 1kg Federn genauso fällt wie 10 kg Feder, gleiches für einen Stahlklumpen.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 10:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Wenn man es ziemlich korrekt machen möchte, muss man die Dichte des Mediums in dem sich das bewegte Objekt mit der Dichte des bewegten Objektes verrechnen und den Auftrieb mit in die Bewegung hineinrechnen.
Ein weiteres Problem ist die Verwirbelung von Medien, die nicht Fest sind, in denen das Objekt sich bewegt. Dieser Prozess ist allerdings physikalisch so kompliziert, dass man ihn evtl. über zufällig veränderte Rotationen (abhängig vom Verhältnis der Dichten) und Auftriebe simulieren sollte.
Allerdings auch nur bei Objekten, deren Verhältnis Eigengewicht zu Grundfläche sehr große Werte liefert. die Grundfläche ergibt sich aus der Projektion des Objektes auf die Ebene, deren Normale entgegengesetzt der Bewegungsrichtung ist.
Das sollte einigermaßen real (und performance bremsend) sein.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Gravitation und Beschleunigung
BeitragVerfasst: Mi Mär 17, 2010 12:47 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Es gibt für fast alles eine physikalische Vereinfachung. Ao auch für den Luftwiderstand eines Objekts bzw. für die Gegenkraft, die es beim "durchgleiten" durch ein nicht festes Medium erfährt. Sie ist abhängig von Dichte des Mediums, Geschwindigkeit und dem sog. cW-Wert, der experimentell ermittelt wird oder auch irgendwie sehr kompliziert und sicher nicht in Echtzeit mit FEM berrechnet werden kann.

In der Luft kann man die Auftriebskomponente getrost vernachlässigen, solange es nicht um Gase als oben definiertes Objekt geht. Aber dafür ist die Gleichung ohnehin nicht zu gebrauchen nehme ich an.

FL = 0.5 * A * Dichte(medium) * v² * cW


Problematisch: So ziemlich alle Körper bis auf eine Kugel haben bei unterschiedlicher Strömungsrichtung einen unterschiedlichen cW Wert. Will man das auch noch berücksichtigen brauch man alle cW Werte in einer für seine Zwecke hinreichenden Auflösung. Um die in Echtzeit mit einzurechnen, würde ich die persönlich auf ne Cubemap drücken und per Shader abfragen =)

MFG

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]