|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Victor A. Pavlov 2:5025/81 31 Jul 2002 09:58:22 To : Oleg Sysoev Subject : Повоpот в 3d --------------------------------------------------------------------------------
Как то раз (Чет Июл 25 2002 20:42) Oleg Sysoev написал письмо All:
OS> Hо это в 2d. А как быть, если точка pасположена в 3d?
OS> Большая пpосьба поделиться со мной соответствyющей литеpатypой/линком,
OS> либо готовым алгоpитмом. Очень хотелось бы полyчить фyнкцию со входными
OS> паpаметpами, как glRotatef в opengl.
Во-первых, если тебе посоветуют умножать на матрицы 4х4 - не пытайся. Метод,
конечно, классический, но крайне медленный, особенно, если нужно делать поворот
не только вокруг координатных осей, а вообще вокруг произвольлной прямой.
Имеется более быстрый (и более простой) метод поворота точки на произвольный
угол вокруг произвольной прямой в постранстве.
Hачальные данные: _
Точка задается радиус-вектором p=(px,py,pz).
Угол задается числом phi (в радианах). _
Прямая (ось) задается, двумя векторами: радиус-вектором точки на прямой s =
_ _ (sx,sy,sz) и вектором
направления n=(nx,ny,nz), |n|=1.
_ _ _ _ _ _
1. s := s+s*(s&(p-s)); _ _
операция & - скалярное произведение векторов: a&b=ax*bx+ay*by+az*bz
___ _ _
2. tmp := p-s;
_ ___ ___ _ _
3. p' := tmp*cos(phi)+(tmp^s)*sin(phi)+s; _ _
операция ^ - векторное произведение векторов: a^b=(ay*bz-az*by,az*bx-ax*bz,
ax*by-ay*bx)
_
Точка p' - и есть результуриющая точка.
Геометрический смысл данных преобразований также довольно прост.
Всего хорошего - Victor
--- GoldED/W32 3.0.1
* Origin: Red Station, Voronezh, Russia (2:5025/81)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18393d47bafd.html, оценка из 5, голосов 10
|