Einzelnen Beitrag anzeigen

Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#6

Re: Konzept für saubere Kollisionserkennung

  Alt 20. Jul 2009, 15:36
hallo, mit der problematik habe ich mich auch schon eingehend beschäftigt!
Möglichkeit 1
Eigentlich so, wie du es gemacht hast, prüft ob der radius einer Koordinate irgendwo in einem anderen Radius drinnhängt; falls ja:
Kollisionsroutine, in der mit der Formel des elastischen Stosses die Geschwindigkeiten berechnet werden.
Außerdem hab ich eine boolsche Variable für jedes Objekt, die dafür sorgt, dass kein Viech mit einem anderen Viech immer wieder kollidiert, weil die beiden Kreise noch ineinander hängen und sich so verkeilen [schöner bug =) ] Nach jedem Vorgang wird die "kollidiert gerade"-Variable aller Objekte, die nirgendwo drinhängen, wieder auf 'false' gesetzt.
Vorteil: Funktioniert schnell und tadellos, auch mit vielen [ca.200] Objekten und einigermaßen physikalisch korrekt.
Nachteil: Falls 2 Kugeln oder mehr gleichzeitig auf eine Kugel drauffallen, muss man was extra programmieren, da das sonst einen Bug auslöst; Zuweilen kommt es vor, dass Kugelhaufen entstehen, die sich völlig seltsam verhalten [selten]

Möglichkeit 2:
Es wird bei jedem "Bewegungsvorgang" geprüft, ob die Kugel irgendwo reinfallen "könnte", falls das der Fall sein sollte, wird die zu berechnende Zeit so lange verringert, bis der Abstand zu dem Kollisionsobjekt einen Grenzwert besitzt (~0). Wenn dieser Wert erreicht wird, können die Geschwindigkeiten oder sogar Verformungen berechnet werden.
Vorteil: perfekt, um Verformungen und physikalisch korrekte Bewegungen berechnen und visualisieren zu können.
Nachteil: Bisweilen ist der Rechenaufwand so groß, dass die Bewegungen nicht mehr zeitlich korrekt ausgeführt werden; Große Objektanzahlen sind nahezu unmöglich.
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat