Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Algorithmus : "Elastischer Stoß"


Udontknow - Do 14.10.04 13:37
Titel: Algorithmus : "Elastischer Stoß"
Hallo allesamt!

Daß ich Physik hatte, ist schon eine Weile her, ich bräuchte mal eure Hilfe. :)

Ich habe zwei Objekte (Meshes, also Drahtgittermodelle) im 3-dimensionalen Raum. Jedes Objekt hat eine Matrix, die Infos über die Position und Ausrichtung im Raum enthält, und eine, über die die Bewegung pro Frame realisiert wird. Der Massenschwerpunkt ist der Nullpunkt der Objekte. Die Masse eines Objekts ist ebenfalls bekannt.

Wenn es nun zu einer Kollision (der Kollisionspunkt für jedes Objekt ist halbwegs genau bekannt) kommt, sollen die Abläufe nach den gegebenen physikalischen Gesetzen erfolgen, die Bewegungsmatrizen müssen sich dementsprechend ändern.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
I3DObject=interface
  ...
  property Mass:Single read GetMass write SetMass;
  property Matrix:TD3DXMatrix read GetMatrix write SetMatrix;
  property DeltaMatrix:TD3DXMatrix read GetMatrix write SetMatrix;
end;

procedure GenerateCollideMatrices(Obj1,Obj2:I3DObject;CollisionPoint1,CollisionPoint2:T3DXVector3;var NewMatrix1,NewMatrix2:TD3DXMatrix)
begin
end;


Diese Infos sollten meiner Meinung nach alles sein, was man für eine realistische Darstellung benötigt, oder?

Diese Prozedur gilt es nun mit Leben zu füllen, und da habe ich irgendwie einen totalen Blackout. :oops:

Cu,
Udontknow


jasocul - Do 14.10.04 13:47

Fehlt nicht noch die Elastizität, um den Energieverlust bei der Kollision zu berechnen?


Udontknow - Do 14.10.04 13:49

Äh, ich dachte ein elastischer Stoss hat keinen kinetischen Energieverlust zur Folge...? :oops: Wie gesagt, ist lange her mit Physik.

Naja, gut, wenn man den Algo verallgemeinern will, kann man das natürlich noch mit einbeziehen.

Cu,
Udontknow


raziel - Do 14.10.04 13:52

Udontknow hat folgendes geschrieben:
Äh, ich dachte ein elastischer Stoss hat keinen kinetischen Energieverlust zur Folge...?

War ich mir bis vor 5 Minuten auch noch ziemlich sicher, dass dem so ist. :gruebel:


Udontknow - Do 14.10.04 13:57

Hier [http://de.wikipedia.org/wiki/Sto%C3%9F_%28Physik%29]gibt´s die Erklärung :
Wikipedia:
Ideal elastischer Stoß
Zwei Körper stoßen aufeinander, ohne dass dabei Energie in innere Energie umgewandelt wird, z.B. Wärme oder Deformationsenergie.
In Wirklichkeit gibt es diesen Stoß natürlich nicht, aufgrund diverser Faktoren, wie z.B. der Reibung.

Cu,
Udontknow


.Chef - Do 14.10.04 14:04

Nimm doch den Impulserhaltungssatz. Spart zumindest die Quadrate.


Udontknow - Do 14.10.04 16:20

Nun, ich muss sowohl Impuls- als auch Energie-Erhaltungs-Satz berücksichtigen.

Hmm, hat vielleicht jemand Erfahrung mit der Open Dynamics Engine [http://ode.org/] gemacht?

Cu,
Udontknow


P_G - Di 19.10.04 12:16
Titel: Elastischer Stoß...
Hi,

Die Open Dynamics Engine ist eine der führenden Physics Engines zur Zeit und wird von vielen 3d-Game-Engines genutzt (z.T. in modifizierter Form).
Es gibt eine Delph-Version unter http://www.cambrianlabs.com/Mattias/DelphiODE/
Ich fürchte nur, die Einarbeitung in diese Materie wird etwas dauern...

Gruß, P_G


Udontknow - Mi 20.10.04 16:09

Ah, das ist ja gut, danke! :)


kachel81 - Mi 20.10.04 16:32

Wenn sich Deine Körper nach dem Stoß im Raum bewegen sollen benötigst Du mindestens noch 2 andere Formeln neben dem elastischen Stoß:

Reflexionssatz - wie prallen die Körper voneinander ab
Schräger Wurf - wie verläuft die weitere Flugbahn

Wenn Du den Luftwiderstand berücksichtigen willst, wirds dann nochmal komplizierter.

Tafelwerk hab ich hier, falls die Formeln benötigt werden.


Udontknow - Do 21.10.04 14:18

Nichts für ungut, aber weder der Reflexionssatz noch der schräge Wurf haben irgendetwas mit dieser Problematik zu tun, ebensowenig der Luftwiderstand. :)

Cu,
Udontknow


kachel81 - Do 21.10.04 14:27

Dann rollen die Objekte also nur auf einer Ebene aufeinander zu? Ich dachte die treffen sich "schwebend" im Raum und prallen voneinander ab oder so, naja?