Управление направлением вектора нормали, 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;]

установка плоскости методом наименьших квадратов дает мне следующие параметры

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

введите здесь описание изображения


person Shahgee    schedule 29.04.2013    source источник


Ответы (1)


Вы можете определить, находится ли точка за плоскостью, с помощью члена D общего уравнения

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

где P0 — точка внутри плоскости, а N — нормаль

если вы делаете расчеты с другой точкой (P1), чтобы получить (D1), если D1>D0 означает, что P1 находится за P0.

P1 можно легко вычислить, если здание выпуклое.

Другой подход заключается в обеспечении того, чтобы точки, генерирующие плоскости, располагались по часовой стрелке (или против часовой стрелки).

person Blau    schedule 29.04.2013