JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=cc65ac237655de3714f804b086476aa1Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Bounding Sphere

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.03.2003, 18:42    Titel: Bounding Sphere Antworten mit Zitat

Hi,
ich arbeitete ja zurzeit an einem kleinen Asteroiden-Spiel. Heute wollte ich die Kollisionserkennung einbauen, allerdings bin dabei auf massive Probleme gestoßen.

Eine BoundingBox(grün) bietet sich ja nicht an, da diese einfach zu groß wäre. Auch eine verkleinerte BoundingBox(blau) wäre schlecht, da so die Flügel kaum Beachtung finden. Eine Bounding Sphere(rot), die wohl einfachste Methode, ist ebenfalls zu groß. Die Ideale Lösung wäre also eine ovale Sphere(weiss).
Aber leider weiss ich nicht wie ich eine ovale Sphere benutzen soll(vom mathematischen her.). Mit meinen bescheidenen 9. Klasse Mathematikkenntnissen bin ich da schnell an meine Grenzen gekommen.

Könnt ihr mir sagen, wie ich eine ovale, wie im Fall oben berechnen kann?

PS.:Ich will kein Code, mir geht es hier rein ums Mathematische.
PPS.:Leider setzen alle Tutorials ebensolche Kenntnisse voraus, bin also "aufgeschmissen".
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.03.2003, 19:19    Titel: Antworten mit Zitat

Hallo,

ich würde das Modell einfach in zwei Bounding Boxes aufteilen, eine um das Cockpit und eine für die Flügel, also rechteckig.





Christian


Zuletzt bearbeitet von Christian Rousselle am 13.03.2003, 19:23, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 13.03.2003, 19:22    Titel: Antworten mit Zitat

Eine Ellipse hat 2 Mittelpunkte - oder wie es bei Ellipsen genauer heisst Brennpunkte. Von diesen Brennpunkten nimmt man einen Strick mit einer festen Länge und verknüpft sie mit den beiden Brennpunkten und strafft sie. der 3. Punkt liegt dann genau auf deiner Ellipse.
Mathematisch läßt sich das in etwa so berechnen, das du dir die beiden Brennpunkte bestimmst und den Kollisionstestpunkt festlegst. Wenn dann die Entfernung zu Brennpunkt 1 und Brenpunkt2 zusammenaddiert die Festgelegte länge unterschreitet hast du eine Kollision.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 13.03.2003, 19:42    Titel: Antworten mit Zitat

Oder nimm mehrere Zylinder. Das wird bei Quake3 so gemacht.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 14.03.2003, 07:38    Titel: Antworten mit Zitat

Hi,
falls dich die Ovale echt interessieren sollte, so kannst du hier die Gleichung für die Ovale in Ursprungslage haben, diese musst du dann durch kleinere Verschiebung deinem Schiff anpassen oder du lässt dein Schiff einfach immer genau den Koordinatenursprung "besetzen".

Code:
x^2/a^2+y^2/b^2=1


So nun habe ich mir noch schnell die Mühe gemacht und dir die Gleichung für einen beliebigen Mittelpunkt M(c;d) aufgestellt.

Code:
(x-c)^2/a^2+(y-d)^2/b^2=1


Also hier nun noch Kurz die erklärung x und y sind die Koordinaten des Punktes den du überprüfen willst. c und d sind die Koordinaten des Mittlepunktes. a und b wirst du aus der Skizze ablesen können, aber ich würd an deiner Stelle das auch eher in zwei Boundingboxes aufteilen vielleicht sogar in drei, so dass jeder Flügel seine eigene Box hat, das könnte vielleicht nützlich sein, wenn du ein Schadensmodell mit einfügen willst oder so.

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 14.03.2003, 18:54    Titel: Antworten mit Zitat

Danke.

Nach einigen Überlegungen hab ich mich dann doch für 3(oder besser 4, eine große um Berechnungen zu sparen). Leider sind so einige Manöver, wie Drehungen nicht mehr möglich, da es mir dann doch zu kompliziert sein würde. Aber es ist am einfachsten und genauesten.

@ApniK->Tarek
Das mit den Schadensmodell lass ich bei mir im Hinterkopf, danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 12:58    Titel: Antworten mit Zitat

Lässt sich die Entfernung zweier Punkte, die auf keiner waagerechten oder senkrechten Geraden liegen, nur mit Pythagoras ausrechnen, oder gibts da noch ne andere Funktion?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 13:39    Titel: Antworten mit Zitat

Wenn die Punkte auf einer Senkrechten liegen:

Code:

delta_y = fabs(y1 - y2); // fabs() gibt den Betrag zurück, wir wollen
                                   // ja keine negative Länge


Das geht natürlich auch analog zu 2 Punkten, die auf einer Waagerechten liegen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 13:42    Titel: Antworten mit Zitat

Ach ja, ist mir entfallen. Wollte das schon seit Ewigkeiten posten: http://www.fluidstudios.com/publications.html

Hier wird unter anderem beschrieben, wie man eine Kollisionsabfrage für Ellipsen programmiert(Source Code gibts weiter unten).
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 13:50    Titel: Antworten mit Zitat

Ähm...
ich schrieb:
The Lord of Programming hat Folgendes geschrieben:
...zweier Punkte, die auf keiner waagerechten oder senkrechten Geraden liegen...

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 14:24    Titel: Antworten mit Zitat

Sorry tut mir leid. Ich hab ne Lungenentzündung und übelste Kopfschmerzen... das sollte das entschuldigen. ;)

Geht nur mit dem Pythagoras wenn du es genau haben willst. Anonsten habe ich irgendwo ne Näherungsfunktion... die werd ich heute aber nicht suchen. :p
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.04.2003, 14:27    Titel: Antworten mit Zitat

Gude besserung Very Happy
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum