2013-04-29 163 views
2

我有几百个点。连接它们会给我几百架飞机。我需要控制法向矢量的方向,以便我总是从建筑物外面看这架飞机。控制法向矢量的方向,matlab

这里有几点。

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;] 

拟合平面最小二乘法给我folloing参数

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

绘制这些点

enter image description here

,因为我从外面看在建筑内部,飞机数字2是好的。但是我怎样才能改变飞机1的方向。它向我展示了建筑物内部的正常方向,它应该是反方向的。

注意:我有数百个平面,所以我需要一些系统的方法来使这些平面法线正确。

%-----------------------编辑--------------------- ---------------------------------%

%对于顺时针和逆时针 %我正在变得相同导致

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

回答

1

您可以确定的一点是飞机的后面与一般方程的d项

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

其中P0是平面内的一个点,N是正常

如果进行与其他点(P1)的计算以获得(D1)中,如果D1> D0意味着P1是后面P0。

如果建筑物是凸面的,则可以很容易地计算出P1。

其他方法是确保生成飞机的点顺时针顺序(或逆时针)

+0

@ Blau请参阅编辑。 – Shahgee 2013-04-29 13:10:19