2010-09-23 7 views
3

Ceci est une republication d'une question qui est restée sans réponseComment obtenir les sommets d'un polygone décrit par des avions

fondamentalement, je suis en train de modéliser une carte qui a le format suivant:

Chaque brosse définit un région solide. Les pinceaux définissent cette région comme l'intersection de quatre plans ou plus. Chaque plan est défini par trois points non-linéaires. Ces points doivent aller dans une orientation dans le sens horaire:

 
1--2-----------------> 
| 
3 
| 
| 
| 
| 
| 
, 

Chaque instruction brosse ressemble à ceci:

 
{ 
    (128 0 0) (128 1 0) (128 0 1) //plane 1 
    (256 0 0) (256 0 1) (256 1 0) //plane 2 
    (0 128 0) (0 128 1) (1 128 0) //plane 3 
    (0 384 0) (1 384 0) (0 384 1) //plane 4 
    (0 0 64) (1 0 64) (0 1 64) //plane 5 
    (0 0 128) (0 1 128) (1 0 128)//plane 6 
} 

C'est probablement juste un peu déroutant quand vous le voyez. Il définit une région rectangulaire qui s'étend de (128,128,64) à (256,384,128). Voici ce que signifie un seul ligne:

 
    (128 0 0) (128 1 0) (128 0 1) 
    1st Point 2nd Point 3rd Point 

Je dois trouver les points d'intersection des plans, je peux dessiner la forme uniquement à l'aide d'une méthode qui peut dessiner des panneaux 2d dans l'espace 3D. Le code suivant dessiner un triangle dans l'espace, par exemple:

 
beginShape(); 
vertex(x0,y0,z0); 
vertex(x1,y1,z1); 
vertex(x2,y2,z2); 
vertex(x0,y0,z0); 
endShape(); 

Y at-il une meilleure façon de calculer les sommets que la boucle à travers toutes les possibilités de interesctions d'avion?

+0

Quelques termes: "région solide" = "volume", "intersection de quatre plans ou plus" = "volume délimité par quatre plans ou plus" (intersection de deux plans est une ligne ou rien) ... "région rectangulaire "=" prisme rectangulaire "... ne veut pas dire être pédant mais la question est déjà assez difficile;) – sje397

+0

Le pédantisme accepté gracieusement – mna

Répondre

4

Je ne pense pas qu'il existe une autre option: la seule information que vous avez sur les sommets est contenue dans les plans, et la seule façon d'obtenir les sommets des avions est de déterminer leurs intersections, de sorte que vous aurez faire une boucle à travers les possibilités.

Pour commencer:

Si vous êtes sûr que les avions ne fait liés un volume, et qu'aucun des plans sont parallèles, chaque combinaison de 3 adjascent avions devraient produire un sommet (juste en résolvant simultanément le plane equation pour tous 3). Vous pouvez facilement éliminer les sommets en dehors de votre volume (pour faire partie de la forme, ils doivent être sur ou derrière tous les plans), vous pouvez donc tester chaque combinaison de 3, si vous n'avez pas cette 'adjacence' informations et rejeter les points externes.

Il me semble que vous aurez seulement convex volumes en utilisant cette méthode - donc vous pouvez probablement faire un 3D convex hull sur tous ces sommets pour obtenir des triangles pouvant être dessinés pour les faces.

+0

Oui, ils seront convexes. Tout volume non-convexe est séparé en volumes convexes. Yuk ... Je vais bidouiller je suppose. – mna

Questions connexes