Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

Как повернуть матрицу вокруг заданного вектора на определённый   Найти похожие ветки 

 
TGLCube   (2007-02-04 04:14) [0]

угол?

1) Так, правильно поворачивать?
 M1 := GLCube.Matrix;
 RotateVector(M1[0], RotVector, RotAngle);
 RotateVector(M1[1], RotVector, RotAngle);
 RotateVector(M1[2], RotVector, RotAngle);
 GLCube.Matrix := M1;

Это GLScene.

2) Более быстрый способ?


 
Rial ©   (2007-02-05 06:53) [1]

При повороте вектора на угол используются простые формулы.
Например, при повороте по оси Z:
OutX :=X * Cs - Y * Sn;
OutY :=Y * Cs + X * Sn;

Теперь, если нужно сделать поворот не в 2х координатах,
а относительно вектора.
(поворачиваем A относительно B)
1) С помощью обратной формулы полуаем коэффициенты
поворота, на которые нужно было бы повернуть B,
чтобы он был || Z. Поворачиваем его.
Т.е. имеем повороты по X и по Y.
Нужно вычислить сначала поворот по X, переместив т.о.
вектор B в плоскость XY.
Следующим поворотом делаем его ||Z.
Все четыре коэффициента (Sn1, Cs1, Sn2, Cs2) запоминаем.

2)Теперь все просто - поворот опять в 2х координатах,
т.к. вектор, относительно которого вращаем - перпендикулярен XY.

3)Не забываем, что B был повернут.
Имея старые коэффициенты поворативаем координаты A,
компенсируя поворот B.

Итого получаем для 1 поворота 4 * 10 умножений,
2 * 10 сложений и 1 вызов SinCos (нахожнение Cs0, Sn0).
Формулы не пишу - найди их сам.

Т.к. RotAngle постоянный, то желательно Cs0, Sn0 посчитать
1 раз, т.о. в итоге поучется опять же всего один вызов
медленного SinCos.


 
@!!ex ©   (2007-02-05 09:30) [2]


> вокруг заданного вектора на определённый угол


Это описание кватерниона в чистом виде.


 
TGLCube   (2007-02-06 07:47) [3]


> Rial ©   (05.02.07 06:53) [1]

Нужна не лекция, а функция. ПонимаешЬ?


> @!!ex ©   (05.02.07 09:30) [2]
> > вокруг заданного вектора на определённый угол
> Это описание кватерниона в чистом виде.

Уговорил. Как повернуть кватернион вокруг заданной оси на заданной угол.


 
Rial ©   (2007-02-06 09:40) [4]

> > Rial ©   (05.02.07 06:53) [1]
>
> Нужна не лекция, а функция. ПонимаешЬ?

Я например люблю лекции.
У меня функция работает точно так, как я описал.
Скорости мне лично хватает.
Тебе осталось только вывести 1 формулу из 2 строк самому
и написать 40-50 строк кода.
Функцию ему... а я ленивым помогать не подписывался %).


 
@!!ex ©   (2007-02-06 10:09) [5]


> TGLCube   (06.02.07 07:47) [3]

Кватернион - это скаляр и вектор. :)
Где вектор - это ось, а скаляр - угол.
Я могу дать тебе формулы, но не вижу смысла.
Копай в инете по кватернионам, благо инфы по ним вагоны.
Пригодиться и понимание кватернионов(там на самом деле нет ничего сложного, хоть в начале и кажеться иначе) и умение правильно искать инфу в инете.


 
TGLCube   (2007-02-07 02:59) [6]


> Rial ©   (06.02.07 09:40) [4]
> помогать не подписывался %).

Тогда чего на форум вообще пришёл?


> @!!ex ©   (06.02.07 10:09) [5]
> Копай в инете

Какой ты банальный.


 
@!!ex ©   (2007-02-07 12:10) [7]


> TGLCube   (07.02.07 02:59) [6]

Помощь и разжевывание - разные вещи.
Инфы у тебя более чем достаточно. Если не умеешь ею пользоваться, это уже твои проблемы.


 
Rial ©   (2007-02-07 18:56) [8]

> [6] TGLCube   (07.02.07 02:59)
> Тогда чего на форум вообще пришёл?

Вот сейчас обижусь и не приду больше :).

http://ln.com.ua/~openxs/articles/smart-questions-ru

Если прочитаешь, то как вывод:
давать готовый код - это не итересно.
Готовый код - это работа, на крайний случай - учеба.
А форум - это место для обсуждение чего либо.
И в чем интерес обсуждать готовый рабочий код ?


> Какой ты банальный.

После такого ответа ты значительно снижаешь
свои шансы на успех.



Страницы: 1 вся ветка

Текущий архив: 2008.06.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
2-1211054755
Катя
2008-05-18 00:05
2008.06.08
Нужна помощь в написании дипломного проекта


15-1209060669
wl
2008-04-24 22:11
2008.06.08
программа для переключения раскладки по Ctrl+Shift "И" Alt+Shift


2-1211043834
snake-as
2008-05-17 21:03
2008.06.08
Создать строку в таблице


2-1211008716
Sloosar
2008-05-17 11:18
2008.06.08
Доступ из delphi в Microsoft Word


2-1211107765
Alexei
2008-05-18 14:49
2008.06.08
Как узнать версию файла?