![]() |
|
Модераторы: Rickert |
![]()
|
|
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Ребят, кто-нибудь может объяснить сабж ?
Кватернион - это вектор с добавленной четвёртой составляющей, смысл которой - "угол поворота". Введён в качестве замены матрицам 4x4, т.к. по идее полностью содержит все их данные в компактном виде. Во что я не могу "вьехать" - так это в то, какой смысл вкладывается в сочетание (x, y, z, w)... Если задать значения "обычных" координат кватерниона - всё ок. Начинаешь изменять w - и всё плывёт ! Невозможно даже определить законы, по которым x, y и z зависят от w ! В принципе, кватернион очень круто выручает в ситуации, если нужно "плавно перенести точку А в точку В, зная их координаты (x, y, z)". Для этого используется общепринятая ф-ция Slerp (Spherical Linear Interpolation). Но вот в ситуации, когда есть сфера, заданная векторами AxisX, AxisY, AxisZ, и хочется "по-простому" провращать точку от нулевого положения к определённым углам от осей X, Y, Z - тут уже кватернионы становятся поистине китайской грамотой... Пожалуйста, кто-нибудь, кто может - помогите разобраться в трёхмерной арифметике ! Или хотя бы на пальцах объясните, как вычислять трёхмерные преобразования "по простому" ? -------------------- ![]() |
|||
|
||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 2 Всего: 10 |
mr.DUDA
насколько я знаю, кватернионы используется в тех случаях, когда необходима интерполяция между различными положения объекта. Это требуется когда необходимо хранить вращение, если использовать углы Эйлера или матрицы, интерполяция будет довольно дорогостоящая. В кватернионе компоненты {x, y, z} - вектор, , лежащий на оси вращения, а длина вектора зависит от угла поворота. w зависит только от величины угла поворота. Насчет зависимости x, y, z от w - она такая: если взять единичный вектор V = {x, y, z} за ось вращения и угол alpha за вращение вокруг этой оси, тогда кватернион представляющий это вращение можно записать как: q = [ V*sin(alpha/2), cos(alpha/2) ] Для понимания того, как хранит вращение кватернион, вспомни про двумерные вращения. Вращение в плоскости можно задать матрицей 2x2, в которой будут записаны косинусы и синусы угла поворота. Можно представить, что кватернион хранит комбинацию оси вращения и матрицы половины поворота вокруг этой оси. Вообще более подробно про кватернионы можно посмотреть тут и тут. Собственно оттуда я и освежал свою память Это сообщение отредактировал(а) Alastis - 18.7.2005, 09:13 -------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Alastis, спасибо !
-------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |