Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Нормаль к плоскости


Автор: DragonFire 9.12.2006, 17:50
Вобщем вот в чем задача: 
у нас есть 3 точки, образующие плоскость. Необходимо найти коордаты вектора нормали к этой плоскости в общем случае - тоесть не в конкретной точке а вообще.

Суть в том что у нас есть 3 координаты вектора нормали и мы можем приложить этот вектор к любой точки плоскости и получится вертор нормали.

Извините, язык может быть кривой, но задача вроде как несложная, просто я это только начал в институте проходить. Знаю уравнение плоскости Ax+By+Cz+D=0, знаю как определители считаются, а алгоритм придумать сам не могу)) Направьте на путь истинный.  smile 


Автор: Sartorius 9.12.2006, 17:54
 n =[AB , BC] (для точек A B и C)
ЗЫ AB, BC - вектора. [, ] векторное произведение

Автор: DragonFire 9.12.2006, 18:00
Верторное произведение векторов AB и BC?

А как это в координатах считается? 
Так чтоли:
             | i       j        k     |
AB*BC=|  AB.x AB.y AB.z | 
             | BC.x BC.y BC.z |
и отсюда находим искомые i,j,k равные i=N.x j=N.y k=N.z
так?

Автор: Dottik 9.12.2006, 18:03
http://algolist.manual.ru/maths/geom/equation/plane.php

Автор: Sartorius 9.12.2006, 18:06
DragonFire, да, определитель правильный

Автор: DragonFire 9.12.2006, 18:10
Dottik, по-моему через это уравнение можно только проверить, является вектор нормалью к плоскости, но не найти его координаты, а до второго способа не догнал сходу))

Sartorius, ну а i, j и k и будут искомыми координатами вектора нормали так?

Автор: Dottik 9.12.2006, 18:15
Ax + By + Cz + D = 0 

( A/sqrt(A*A+B*B+C*C), B/sqrt(A*A+B*B+C*C), C/sqrt(A*A+B*B+C*C)) чем не вектор нормали?

Автор: DragonFire 9.12.2006, 18:19
Dottik, круто, толко не понял откуда это берется, а разобраться то хочется))
Ведь на сколько я понял, x,y,z это не координаты вектора нормали и почему нужно делать на длинну вектора?

Тогда уж Nx=A Ny=B Nz=C из статьи той, и будут равны:
Код

A = y1 (z2 - z3) + y2 (z3 - z1) + y3 (z1 - z2) 
B = z1 (x2 - x3) + z2 (x3 - x1) + z3 (x1 - x2) 
C = x1 (y2 - y3) + x2 (y3 - y1) + x3 (y1 - y2) 

Автор: Dottik 9.12.2006, 18:27
Цитата

Тогда уж Nx=A Ny=B Nz=C из статьи той, и будут равны:

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

Автор: DragonFire 9.12.2006, 18:33
Совсем запустался)) про длинну понял, все круто и умно очень)) 
Только я не понял, чему у тебя равны A,B и C в этой формуле:
Код

( A/sqrt(A*A+B*B+C*C), B/sqrt(A*A+B*B+C*C), C/sqrt(A*A+B*B+C*C)) чем не вектор нормали? 

У меня же есть как раз координаты 3х точек, задающьх плоскость.

Автор: DragonFire 9.12.2006, 18:53
Так я и не получил простого вразумительного ответа.

Автор: Aloha 9.12.2006, 19:47
DragonFire

user posted image

Автор: DragonFire 9.12.2006, 21:04
Aloha, вот спасибо!!!
Достойный итог всей прошедшей теме... Обо всем этом было сказано, но теперь все на ладони. Я думаю многим эта тема поможет в будущем) 

Автор: DragonFire 17.2.2007, 09:57
тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)