Registriert: Mi Jan 08, 2003 15:49 Beiträge: 266 Wohnort: Aachen
ich muss direkt von vorne rein sagen das ich in Mathe nicht sehr fit bin, also wer mit hohe Mathematik ankommt, da verstehe ich so wieso nichts , aber ein versuch ist es wert .
Also ich habe eine Kugel, mit der Position und dem Radius.
Mit dieser Funktion prüfe ich ob ein bestimmter Punkt im Kreis ist.
Code:
function PointInKugel(Kugel: TGLVertex3f; point: TGLVertex3f; r: single): boolean;
Registriert: Sa Jan 04, 2003 21:23 Beiträge: 674 Wohnort: Köln
deine Punkt-Kugel-Kollision ist nicht sehr effizient, da man noch quadrieren muss usw...
so müsste es (wenn ich mich da nicht grad vertue) wesentlich einfacher gehen:
Code:
result :=(abs(kugel.x-point.x)<r)and(abs(kugel.y-point.y)<r)and(abs(kugel.z-point.z)<r);
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Wenn ich mich nicht täuschen sollte, musst du einfach nur die Eckpunkte deines Rechteckes jeweils um den Kreisradius entlang jeder Achse erweitern. Dann prüfst du einfach, ob der Kreismittelpunkt im Rechteck liegt.
Anschließend musst du noch prüfen, ob ein Eckpunkt des Rechtecks im Kreis liegt.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Fiji-Fighter hat geschrieben:
deine Punkt-Kugel-Kollision ist nicht sehr effizient, da man noch quadrieren muss usw... so müsste es (wenn ich mich da nicht grad vertue) wesentlich einfacher gehen:
Code:
result :=(abs(kugel.x-point.x)<r)and(abs(kugel.y-point.y)<r)and(abs(kugel.z-point.z)<r);
Nein das würde so wie ich das sehe nicht gehen.
Nehm dir doch mal folgende Werte
Punkt=(0,0,0)
Kugel=(0.9,0.9,0.9)
r=1
Der Punkt läge auserhalb der Kugel, aber innerhalb des Würfels mit der Seitelänge 2r, für den deine Überprüfung gilt.
Auch bei Magellan gibt es einen Haken da das zu überprüfende "Rechteck" runde Ecken hat.
Die erste Methode ist zwar auch vom Ansatz her nicht schlecht, nur könnte auch ein Rechteck/Quadrat einen Kreis auch so schneiden, ohne das ein Eckpunkt des Qudarates im Kreis liegt.
MfG
IFlo
PS: Mir fällt auf die schnelle aber auch nichts ein...
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Die runden Ecken wurden schon bedacht aber ich habe mich vielleicht etwas undeutlich ausgedrückt.
Zitat:
Anschließend musst du noch prüfen, ob ein Eckpunkt des Rechtecks im Kreis liegt.
Diese Überprüfung würde wenig Sinn machen, wenn man nicht zuvor prüft ob der Mittelpunkt in einem Quadrat zwischen einem originalen Eckpunkt des Rechtecks und dem dazugehörigen Eckpunkt des erweiterten Rechtecks liegt.
Also Schritt für Schritt:
1) prüfen, ob der Kreismittelpunkt im erweiterten Rechteck liegt. Liegt der Mittelpunkt nicht im erweiterten Rechteck, dann findet auch keine Kollision statt.
2) Trifft Fall 1) zu muss geprüft werden ob der Mittelpunkt in einem der Quadrate zwischen den Originaleckpunkten und den erweiterten Eckpunkten des Rechtecks liegt. Trifft dieser Fall nicht zu, findet eine Kollision statt
3) Trifft auch Fall 2) zu, muss geprüft werden ob ein Eckpunkt des Originalrechtecks im Kreis liegt. Trifft dieser Fall zu findet eine Kollision statt. Andernfalls nicht.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.