2009-09-06 11 views
5

Sto provando a creare il rendering dei dati grezzi da un file .map di Quake 3 con Java. Il formato .map memorizza le informazioni del pennello (forma) come una serie di piani, ma mi piacerebbe convertirli in punti del modulo (x, y, z). La matematica coinvolta è un po 'oltre me a questo punto, quindi qualcuno ha qualche consiglio su come posso farlo? Sto bene con l'uso di librerie esterne, se necessario, ma preferisco usare il mio codice, se possibile.Come posso trovare il punto di intersezione di tre piani?

alcuni dati con cui giocare:

Dimensions: 64*64*64 
Position:  All sides are equidistant from the origin (0,0,0) 
Shape:  Cube 
(64 64 64) (64 -64 64) (-64 64 64) 
(64 64 64) (-64 64 64) (64 64 -64) 
(64 64 64) (64 64 -64) (64 -64 64) 
(-64 -64 -64) (64 -64 -64) (-64 64 -64) 
(-64 -64 -64) (-64 -64 64) (64 -64 -64) 
(-64 -64 -64) (-64 64 -64) (-64 -64 64) 

Edit:

Questi dati sta mostrando un cubo, che ha 6 lati. Ciascuno di questi sei lati può essere memorizzato come un piano, con tre coordinate per mostrare la posizione e l'orientamento. Ogni riga dei dati di cui sopra mostra un piano, e tutte e 6 le righe fanno i 6 piani che compongono un cubo.

Questa immagine aiuta ad illustrare il mio punto: Three Points Defining a Plane

punti P1, P2 e P3 sono quello che sto dando per riga, i dati di cui sopra.

Il motore di Quake 3 deve risolvere le parti degli aerei da conservare in fase di compilazione, ma al momento non mi interessa. Se desideri maggiori informazioni, non esitare a chiedere!

+2

Puoi spiegare come i tuoi dati rappresentano tre piani e non 18 vettori? –

+0

Naturalmente. Ho modificato la mia domanda. – Fiarr

risposta

3

Vado a Wolfram Mathworld ogni volta che ho domande come questa. Per questo problema, prova questa pagina: Plane-Plane Intersection

L'equazione 8 in quella pagina indica l'intersezione di tre piani. Per usarlo devi prima trovare le unità normali per i piani. Questo è facile: dato tre punti un, b, e c sul piano (che è quello che hai, giusto?), Prendere il prodotto incrociato di (un - b) e (a - c) per ottenere un valore normale, quindi dividerlo per la propria magnitudine per ottenere un'unità normale.

+0

Questo ha aiutato! Molte grazie! – Fiarr

Problemi correlati