2009-09-06 14 views
5

Estoy intentando construir renderizar los datos brutos de un archivo .map de Quake 3 con Java. El formato .map almacena información de pincel (forma) como una serie de planos, pero me gustaría convertirlos en puntos de la forma (x, y, z). Las matemáticas involucradas son un poco más allá de mí en este momento, así que ¿alguien tiene algún consejo sobre cómo puedo hacer esto? Estoy de acuerdo con el uso de bibliotecas externas si es necesario, pero prefiero usar mi propio código si es posible.¿Cómo puedo encontrar el punto de intersección de tres planos?

Algunos datos con los que jugar:

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) 

Editar:

Estos datos se muestra un cubo, que tiene 6 lados. Cada uno de estos seis lados se puede almacenar como un plano, con tres coordenadas para mostrar la posición y la orientación. Cada fila de los datos anteriores muestra un plano, y las 6 filas forman los 6 planos que forman un cubo.

Esta imagen ayuda a ilustrar mi punto: Three Points Defining a Plane

puntos P1, P2 y P3 son lo que estoy dando por fila, en los datos anteriores.

El motor Quake 3 tiene que determinar qué partes de los planos se deben mantener en tiempo de compilación, pero no estoy interesado en eso en este momento. Si desea más información, ¡siéntase libre de preguntar!

+2

¿Puede explicar cómo sus datos representan tres planos y no 18 vectores? –

+0

Por supuesto. He editado mi pregunta. – Fiarr

Respuesta

3

Voy a Wolfram Mathworld cada vez que tengo preguntas como esta. Para este problema, trate de esta página: Plane-Plane Intersection

Ecuación 8 en esa página da la intersección de tres planos. Para usarlo, primero necesita encontrar las unidades normales para los planos. Esto es fácil: dado tres puntos un, b, y c en el avión (que es lo que tienes, ¿verdad?), Tomar el producto vectorial de (un - b) y (a - c) para obtener una normal, luego divídala por su propia magnitud para obtener una unidad normal.

+0

¡Eso ayudó! ¡Muchas gracias! – Fiarr

Cuestiones relacionadas