【问题标题】:Controlling direction of normal vector, matlab控制法线向量的方向,matlab
【发布时间】:2013-04-29 20:56:46
【问题描述】:

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

这里有几点。

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

绘制这些点

当我从建筑物的外部向内部看时,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; ]

【问题讨论】:

    标签: matlab plane


    【解决方案1】:

    你可以用一般方程的D项判断一个点是否在平面的后面

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

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

    如果用其他点(P1)计算得到(D1),如果D1>D0表示P1落后于P0。

    如果建筑物是凸面的,P1很容易计算。

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

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2023-04-06
      • 2011-03-28
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多