2013-04-29 3 views
2

J'ai quelques centaines de points. Les relier me donne quelques centaines d'avions. J'ai besoin de contrôler la direction du vecteur normal, de sorte que je regarde toujours cet avion de l'extérieur du bâtiment.Contrôle de la direction du vecteur normal, matlab

Voici quelques points.

XYZ=[1,26.7801084079290,10.9279762852855,5.90125567150161; 
1,26.7801084079290,10.6329762852855,5.90125567150161; 
1,26.7801084079290,10.6329762852855,7.78125567150161; 
1,26.7801084079290,10.9279762852855,7.78125567150161; 
1,26.7801084079290,10.9279762852855,5.90125567150161; 
2,31.2001083983270,10.9279762852855,5.89675567150161; 
2,31.2001083983270,10.6329762852855,5.89675567150161; 
2,31.2001083983270,10.6329762852855,7.77675567150161; 
2,31.2001083983270,10.9279762852855,7.77675567150161; 
2,31.2001083983270,10.9279762852855,5.89675567150161; 
2,31.2001083983270,10.9279762852855,5.89675567150161;] 

montage d'un plan avec méthode des moindres carrés me donne des paramètres folloing

1 1 0 0 26.78 % [plane number, n, d] 
2 1 0 0 31.2 

tracer ces points

enter image description here

Comme je suis à la recherche de l'extérieur vers l'intérieur du bâtiment, avion Le numéro 2 est ok. Mais comment puis-je changer de direction de l'avion 1. Il me montre la direction de la normale à l'intérieur du bâtiment. Il devrait être direction oppsite.

Note: J'ai des centaines de plans, j'ai donc besoin d'un moyen systémique pour obtenir ces normales planes dans la bonne direction.

% ----------------------- Édité --------------------- ---------------------------------%

% Pour les aiguilles d'une montre et l'anticlock % Je fais la même chose résultent

XYZ=[1,26.7801084079290,10.9279762852855,7.78125567150161; 
    1,26.7801084079290,10.6329762852855,7.78125567150161; 
    1,26.7801084079290,10.6329762852855,5.90125567150161; 
    1,26.7801084079290,10.9279762852855,5.90125567150161;   
    2,26.7801084079290,10.6329762852855,5.90125567150161; 
    2,26.7801084079290,10.6329762852855,7.78125567150161; 
    2,26.7801084079290,10.9279762852855,7.78125567150161; 
    2,26.7801084079290,10.9279762852855,5.90125567150161; ] 

enter image description here

Répondre

1

Vous pouvez déterminer si un point est derrière d'un avion avec le terme D de l'équation générale

N.P0 + D0 = 0 => D0 = - N.P0 (dot product) 

où P0 est un point à l'intérieur du plan et N est le

normal si vous faites les calculs avec un autre point (P1) pour obtenir (D1), si D1> D0 signifie que P1 est derrière P0.

P1 est facilement calculable si le bâtiment est convexe.

Autre approche est d'assurer que les points qui génèrent les avions, sont dans l'ordre des aiguilles d'une montre (ou gauche)

+0

@ Blau s'il vous plaît voir modifié. – Shahgee