Kollision - Körper kommen nicht zur Ruhe :)
-
Hallo zusammen. Ich habe folgendes Problem:
Ich habe mir nach dem Tutorial -->http://uk.geocities.com/olivier_rebellion/Polycolly.zip<-- eine eigene kleine Kollisions-Physik zusammengeschußtert.
Hier mein Programm-->http://rapidshare.com/files/40829915/Project2.exe<-- (nach unten scrollen - aus "free" klicken - nach unten scroolen und code eingeben)
Die Kollision selber funktioniert wunderbar.
Die Berechnung der Eigenschaften (wie Trägheitsmoment) ebenso.Um den genauen "Ablauf" der Kollision zu "beobachten", habe ich das Programm so geschrieben, dass man sich die Frames mit der linken (Frame Rückwärts) und rechten Pfeiltaste (Frame Vorwärts) im 0.03s Takt angucken kann. (erst nach dem ersten Pfeiltastendruck wird gezeichnet - also nicht wundern, wenn die Form leer ist :))
Wie gesagt, die Kollision funktioniert - nur der Körper kommt nie zum fölligen erliegen ... leider ist mir für das Problem noch keine Lösung eingefallen ...
Ich hoffe es kann mir jemand bei meinem Problem helfen.
(
-die Roten Linien und Kreise zeigen den Verbindungsvektor zwischen Massepunkt und Kollisionspunkt, des jeweiligen Körpers, der rote Pfeil zeigt den MTD Vektor [die Kollisionsnormale]
- die ganzen Zahlen links oben sind die Eigenschaften des ersten [oberen] Körpers: V = Geschwindigkeitsvektor, R = Rotationsgeschwindigkeit, A = Flächeninhalt, m = Masse, 1/m = invertierte Masse [nützlich, da man so ausdrücken kann, dass ein Körper unendlich schwer ist], J = Trägheitsmoment, d = unwichtig, MTD = Kollisionsnormale
- das Koordinatensystem ist y - verkert, d.h. der negative Bereich ist oben
- der Koordinatenursprung ist oben, links
- die Physik funktioniert nur für konvexe Körper
)LG und Vielen Dank!
-
-Thomas- schrieb:
Wie gesagt, die Kollision funktioniert - nur der Körper kommt nie zum fölligen erliegen ... leider ist mir für das Problem noch keine Lösung eingefallen ...
Ohne mir die Programme angesehen zu haben: Geht in deinem System denn irgendwo während der Stoßprozesse Energie verloren? Wenn nicht, dann ist das doch genau das gewünschte Verhalten.
-
Ja. Es geht ein Teil (etwa 50%) der Stoßenergie verloren. Das Problem betrifft nur die Situation, wenn der Körper auf der Oberfläche eines anderen Körpers ist. Dann wackelt er leicht hin und her. Ich weiß nicht, wie ich das Problem beschreiben soll - darum würde es helfen, dass von mir geschriebene Programm einfach mal anzusehen.
LG
-
AFAIK ist das "normal", die ganzen Physic Engines schummeln sich das zusammen dass die Körper komplett ruhig liegen bleiben.
-
Es wäre mir gleich, ob das "Liegenbleiben" korrekt oder "zusammengeschummelt" ist. Letztlich zählt nur, ob es realistisch wirkt. Die Frage ist nur, wie ich mein Ziel erreichen kann, denn dazu fehlt mir der Ansatz.
LG
-
So spontan wuerd ich sagen: Wenn die kinetische Energie (oder die Geschwindigkeit) kleiner als ein bestimmter Schwellenwert ist, laesst du die Bewegung einfach ganz aufhoeren (Geschwindigkeit = 0).
-
Das Problem ließe sich so nicht lösen ...
Wenn ein Körper nach oben fliegt und durch die Gravitation richtung Boden gezwungen wird, gibt es einen Pubnkt, wo die Geschwindigkeit gegen 0 geht. würde ich sie nun Null setzten, würde der Körper in der Luft schweben.
LG
-
-Thomas- schrieb:
Das Problem ließe sich so nicht lösen ...
Wenn ein Körper nach oben fliegt und durch die Gravitation richtung Boden gezwungen wird, gibt es einen Pubnkt, wo die Geschwindigkeit gegen 0 geht. würde ich sie nun Null setzten, würde der Körper in der Luft schweben.
LG
Geschwindigkeit != Beschleunigung, und mit ein bischen Phantasie kaemst du ausserdem wohl selber auf die Loesung "Wenn Geschwindigkeit & Einwirkende Kraefte Kleiner Schwellenwert: ignoriere Kraefte und Geschwindigkeit = 0"
-
Das verstehe ich nicht!
Die Geschwindigkeit ist genau am Wendepunkt zwischen entgegen/Richtung Gravitation 0. Ich bin weiterhin der Meinung, Der Körper würde dann in der Luft schweben.
LG
-
-Thomas- schrieb:
Das verstehe ich nicht!
Die Geschwindigkeit ist genau am Wendepunkt zwischen entgegen/Richtung Gravitation 0. Ich bin weiterhin der Meinung, Der Körper würde dann in der Luft schweben.
LG
die Beschleunigung ist aber negativ, also ist der Körper noch nicht in ruhe, sondern wird sich gleich nach unten bewegen.
-
Die Gravitation wirkt permanent ... d.h. es gibt immer eine Beschleunigung. Wann erkenne ich:
Geschwindigkeit != Beschleunigung, und mit ein bischen Phantasie kaemst du ausserdem wohl selber auf die Loesung "Wenn Geschwindigkeit & Einwirkende Kraefte Kleiner Schwellenwert: ignoriere Kraefte und Geschwindigkeit = 0"
LG
-
-Thomas- schrieb:
Die Gravitation wirkt permanent ... d.h. es gibt immer eine Beschleunigung. Wann erkenne ich:
Geschwindigkeit != Beschleunigung, und mit ein bischen Phantasie kaemst du ausserdem wohl selber auf die Loesung "Wenn Geschwindigkeit & Einwirkende Kraefte Kleiner Schwellenwert: ignoriere Kraefte und Geschwindigkeit = 0"
LG
Rein physikalisch gesehen kannst du das erkennen, wenn die aus der Beschleunigung resultierende Kraft auf eine ständig größere Gegenkraft trifft. Da F = m * a, würde eine erheblich größere Masse (also die Erde) mal Erdbeschleunigung diese Bedingung erfüllen.
-
Naja, die Lösung sollte wohl auch damit klarkommen wenn z.B. eine Schachtel bzw. 2 Schachteln übereinander auf einer Liftplattform steht/stehen die sich nach oben oder unten bewegt. In dem Fall sollten die Schachteln ja auch nicht rumzittern - befinden sich aber nicht in Ruhe.
Wie sich sowas genau lösen lässt weiss ich leider nicht, aber es sollte eigentlich Papers dazu geben - würde mich wundern wenn nicht. Kann die ODE das? Wenn ja könnte man vielleicht in der Doku bzw. im Sourcecode nachgucken wie die das macht.
-
man erhöht auf nem fahrstuhl einfach künstlich die gravitation um faktor 10 und schon klebt alles ^^