Registriert seit: 23. Jan 2008
3.686 Beiträge
Delphi 2007 Enterprise
|
Re: Konzept für saubere Kollisionserkennung
20. Jul 2009, 13:09
Etwas Linderung verschafft man sich schon durch einen algebraischen Ansatz. Du wirst Position und Geschwindigkeit (gerichtet) ja als Vektoren vorliegen haben. Dann kannst du dir 2 Kugeln nehmen und Position+Geschw. als Geradengleichungen auffassen, und einen Schnittpunkt berechnen - sowie die neuen Geschwindigkeiten und Positionen. Gerade im Fall von Kugeln ist das noch relativ einfach, da man dies dann nicht für jedes Polygon / jede Linie der Objekte veranstalten muss, da der Radius da ja ne recht dankbare Sache ist.
Du betrachtest zwar noch immer 2er Kombinationen, aber diese dafür wenigstens deutlich richtiger. Das verhindert dann auch ein Durchstoßen bei zu großen Geschwindigkeiten im Verhältnis zur Objektdicke in der Flugrichtung!
Die Sache mit der gegenseitigen und u.U. vielfachen Kollisionen wird dann schon deutlich kniffliger, da man dann ja schon fast im Bereich von Fluiden ist - und da gibt's bisher nicht wirklich einfache und schnelle Verfahren, und selbst die langsamen komplizierten sind nur Näherungslösungen bzw. Modelle.
Fall du nicht gerade davon ausgehen musst dass 1000 sich berührende Kugeln tummeln, sondern immer nur ein paar wenige Kollisionen auftreten, könnte man sich ein quasi rekursives Verfahren ausdenken.
1. Wähle zufälliges Startobjekt
2. Berechne Kollision mit einem anderen
3. Falls Kollision: Pos/Geschw berechnen, und dann beide Objekte erneut betrachten, weiter bei Punkt 2
4. Falls keine Kollision, nächstes Objekt und weiter bei Punkt 2
5. Fortführen bis man wieder beim 1. Objekt ist, dann Bildausgabe, weiter bei Punkt 1
Nachteil ist eben, dass man bei sehr komplexen Szene sehr lange braucht, und man sicherlich auch endlose Szenarien konstruieren kann. Da müsste man im Zweifel mit einer maximalen Iterationstiefe bei Schritt 2 entgegenwirken - zulasten der Qualität der Simulation natürlich.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
|