控制法向量的方向,matlab

时间:2013-04-29 11:17:42

标签: matlab plane

我有几百分。连接它们给了我几百架飞机。我需要控制法线向量的方向,这样我总是从建筑物外面看这个平面。

以下是一些观点。

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

用最小二乘法拟合平面给出了以下参数

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 个答案:

答案 0 :(得分:1)

您可以确定一个点是否在具有一般方程式的D项的平面后面

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

其中P0是平面内的一个点,N是法线

如果你用其他点(P1)进行计算得到(D1),如果D1> D0意味着P1落后于P0。

如果建筑物凸起,P1很容易被煅烧。

其他方法是确保生成平面的点按顺时针顺序(或逆时针方向)