2009-09-06 8 views
5

J'essaye de construire le rendu des données brutes à partir d'un fichier Quake 3 .map avec Java. Le format .map stocke les informations de forme (brush) sous la forme d'une série de plans, mais je voudrais les convertir en points du formulaire (x, y, z). Les maths impliqués sont un peu au-delà de moi à ce stade, donc quelqu'un a des conseils sur la façon dont je peux faire cela? Je suis d'accord avec l'utilisation de bibliothèques externes si nécessaire, mais je préfère utiliser mon propre code si possible.Comment puis-je trouver le point d'intersection de trois plans?

Quelques données pour jouer avec:

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:

Ces données sont montrant un cube, qui a 6 côtés. Chacun de ces six côtés peut être stocké comme un plan, avec trois coordonnées pour montrer la position et l'orientation. Chaque rangée des données ci-dessus montre un plan, et toutes les 6 rangées font les 6 plans qui composent un cube.

Cette image permet d'illustrer mon point: Three Points Defining a Plane

Points p1, et p2 p3 sont ce que je donne par ligne, dans les données ci-dessus.

Le moteur Quake 3 doit trier les parties des plans à conserver au moment de la compilation, mais cela ne m'intéresse pas pour le moment. Si vous souhaitez plus d'informations, n'hésitez pas à demander!

+2

Pouvez-vous expliquer comment vos données représentent trois plans, et non 18 vecteurs? –

+0

Bien sûr. J'ai édité ma question. – Fiarr

Répondre

3

Je vais à Wolfram Mathworld chaque fois que j'ai des questions comme celle-ci. Pour ce problème, essayez cette page: Plane-Plane Intersection

L'équation 8 sur cette page donne l'intersection de trois plans. Pour l'utiliser, vous devez d'abord trouver des normales unitaires pour les avions. C'est facile: étant donné trois points un, b, et c sur le plan (c'est ce que vous avez, non?), Prendre le produit croisé (un - b) et (a - c) pour obtenir une normale, puis la diviser par sa propre amplitude pour obtenir une unité normale.

+0

Cela a aidé! Merci beaucoup! – Fiarr

Questions connexes