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
|
Verfasst am: 13.03.2003, 18:42 Titel: Bounding Sphere |
|
|
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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.03.2003, 19:19 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 13.03.2003, 19:22 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 13.03.2003, 19:42 Titel: |
|
|
Oder nimm mehrere Zylinder. Das wird bei Quake3 so gemacht. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 14.03.2003, 07:38 Titel: |
|
|
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".
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 |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 14.03.2003, 18:54 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.04.2003, 12:58 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.04.2003, 13:39 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.04.2003, 13:50 Titel: |
|
|
Ä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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 02.04.2003, 14:24 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
|
Nach oben |
|
|
|