Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 21:55

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Intersection Ray/Cube
BeitragVerfasst: So Jan 07, 2007 19:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

kennt jemand einen guten und vorallem schnellen Algorithmus um zu überprüfen ob ein Strahl (Undendlich lang) einen Würfel trifft?
Wo der schnittpunkt etc ist, ist dabei völlig egal, mir reicht nen Boolean wert der sagt "getroffen" oder "nicht getroffen" :)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 08, 2007 01:15 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Mit einer sphere Vortesten und anschließend den Schnittpunkt mit 3 zuzr Strahlquelle gerichtenen Flächen überprüfen. (Man kann immer nur 3 Flächen eines Würfels gleichzeitig sehen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 08, 2007 09:01 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Die sind eigentlich fast alles schnell, weils bei kisten recht einfach geht... Darf ich fragen, ob wir Orientierte Kisten oder Achsenparallele AABBs reden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 08, 2007 11:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

also ich hätte da einen Ansatz für einen allgemeinen Quader und einen Strahl.

Sagen wir einmal der Strahl ist gegeben durch die Gleichung f(x)=P+w*x, wobei P ein Aufpunkt des Strahls und w der Richtungsvektor ist.
Der Quader ist gegeben durch die Gleichung g(a,b,c)=Q+a*v1+b*v2+c*v3, wobei Q ein Eckpunkt ist, v1, v2 und v3 Vektoren, die den Quader vom Punkt Q aus aufspannen und a, b, c aus dem Intervall [0,1] sind.

Der Strahl schneidet den Quader, falls f(x)=g(a, b, c), also P+w*x=Q+a*v1+b*v2+c*v3

Daraus ergeben sich drei einzelne Gleichungen, jeweils für die Koordinaten x, y, z, also z.B.
P.z+w.z*x=Q.z+a*v1.z+b*v2.z+c*v3.z

Wenn man nach x umstellt bekommt man z.B.
x=((Q.z-P.z)+a*v1.z+b*v2.z+c*v3.z)/w.z

Jetzt muss man nur noch den minimalen und maximalen Wert für x berechnen.
Dazu muss man a, b und c (die immernoch aus dem Intervall [0,1] sind) so wählen, dass die rechte Seite der Gleichung minimal und maximal wird.

Für das Minimum : Falls z.B. v1.z, v2.z oder v3.z negativ sind, setzt man a=1, b=1 oder c=1, ansonsten 0
Für das Maximum : Falls z.B. v1.z, v2.z oder v3.z positiv sind, setzt man a=1, b=1 oder c=1, ansonsten 0

Man erhält dann für die drei Gleichungen drei Intervalle für x. Wenn man von diesen einen nichtleeren Durchschnitt erhält, schneidet der Strahl den Quader.

Ein Sonderfall ist noch, falls z.B. w.z=0 ist (dann ist die Division ja nicht erlaubt)
Dann lautet die Gleichung 0=x*w.z=((Q.z-P.z)+a*v1.z+b*v2.z+c*v3.z)
Man berechnet wieder Minimum und Maximum für die rechte Seite.
Gilt dann Minimum<=0<=Maximum ist alles ok, ansonsten ist ein Schnitt nicht möglich.

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 08, 2007 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

hab es hinbekommen :)
Hab nen PDF über nen schnellen effektiven Algo gefunden~

Aya~

PS: Es ging um Axis-Aligned Boxen :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]