2013-07-30 3 views
-3

У меня есть три очкаВычисление нормали от 3-х точек

P0=[x0,y0,z0] 
P1=[x1,y1,z1] 
P2=[x2,y2,z2] 

и я хочу, чтобы вычислить нормаль из них. То, что я сделал это:

normal = cross(P0-P1, P0-P2); 

, а затем я хотел бы построить нормальный, так что я сделал есть

c = normal + P0 %end position of normal vector 
quiver3(P0(1), P0(2), P0(3), c(1), c(2), c(3)); 

, но это не сработало (Похоже, есть угол между линией и самолет, так что это не нормально).

Любые предложения, пожалуйста?

+2

Что вы подразумеваете под "не работает"? Я предлагаю вам добавить пример: значения 'P0',' P1' и 'P1' и снимки экрана вашего' quiever3'. – Shai

+0

Может оказаться полезным: http://stackoverflow.com/questions/2035659/normal-vector-of-three-points – amustafa

+0

Полный код может помочь нам помочь вам, а также содержимому вашего рабочего пространства. Что «не работает» означает btw? Вы получили сообщение об ошибке? – CTZStef

ответ

5

«У этого есть угол, так что это не нормально». Есть две проблемы.

Первая проблема - вы неверно истолковываете, как работает команда quiver3. Первые три элемента - это начало колчана (обратная сторона стрелки), но следующие три не являются конечной точкой (ваш normal + P0) - это направление . Так что я думаю, что вы должны изменить свой код

normal = cross(P0-P1, P0-P2); 
normal = normal/norm(normal); % just to make it unit length 
figure 
quiver3(P0(1), P0(2), P0(3), normal(1), normal(2), normal(3)); 
axis equal 

Вы можете подтвердить вектор нормали к вашей плоскости, подтвердив, что скалярное произведение равно нулю:

disp(dot((P0 - P1, normal)); 
disp(dot((P0 - P2, normal)); 

Вы бы ожидать, что результат будет «число, очень близкое к нулю» - ошибка округления обычно препятствует тому, чтобы вещи были точно равны нулю (считайте, что любое значение меньше 1е-16 меньше длины векторов как «ноль»).

+1

dotprodut не равен нулю. -1.084202172485504e-019 –

+1

Хорошо! Это «нуль в пределах ошибки округления». Это -0.000000000000000000108. Достаточно близко для почти чего угодно. Как выглядят вещи, когда вы устанавливаете оси равными? – Floris

Смежные вопросы