Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.052 c
6-1188144637
Max.66RUS
2007-08-26 20:10
2008.06.08
Отследить момент подключения компьютера к интернет...


6-1188424434
aRTes
2007-08-30 01:53
2008.06.08
Сплайсинг


4-1190891664
apic
2007-09-27 15:14
2008.06.08
usb


6-1188565957
Андрей Пл
2007-08-31 17:12
2008.06.08
Как узнать программно имя машины и IP адрес


15-1209119813
sql
2008-04-25 14:36
2008.06.08
MS SQL 2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский