|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Victor Anikeev 2:5043/3.88 28 May 2003 18:32:06 To : Gapon Dmitry Subject : кватернион и углы в декартовой системе -------------------------------------------------------------------------------- 27 May 03 21:07, Gapon Dmitry -> Victor Anikeev: GD> Голова сегодня уже совсем не соображает...Если не трудно можно GD> поподробнее? Пршу прщения, но x, y, z - чего? Если можно объясни на GD> примере. У меня езь тело, повернутое скажем на 45 градусов отн оси y, GD> то бишь направо. Теперь я его поворачиваю на 45 градусов относительно GD> собственной продольной оси, т.е. той которая была осью z до того как GD> его повернули относительно оси y. Для этого я делаю мцу поворота GD> относительно оси x и домножаю ее на мцу поворота отн оси z. У меня езь GD> конечная мца... Hо как теперь получить углы GD> относительно осей x, y, z? Твоя последняя матрица (которая получилась после перемножения двух предыдущих) - это форма записи направляющих векторов новой системы координат в которой находится твое тело (впрочем и все остальные матрицы афинных преобразований - тоже). Если считать, что _изначально_ в исходной системе координат тело HЕ было повернуто, то и в новой системе то же самое. Изменилась система координат. Осталось только найти углы между соответсвующими осями новой и старой систем координат, так ты найдешь углы поворота своего тела относительно _старой_ системы. В зависимости от типа матриц которые ты используешь возможно понадобится транспонирование. Тут ты сам разберешься. Значит твоя последняя матрица: xx yx zx 0 xx xy xz dx xy yy zy 0 или yx yy yz dy xz yz zz 0 zx zy zz dz dx dy dz 1 0 0 0 1 (Первый вид более предпочтителен, потому что тогда порядок умножения матриц естественнен, то есть не надо перемножать их в обратном порядке относительно последовательности преобразований). Hаправляющий вектор (ортом кажется называется?) новой оси OX имеет координаты {xx, xy, xz}. Все остальные соответственно. По-хорошему они должны быть нормированы (то есть их длина должна быть равна единице - sqrt(xx*xx+xy*xy+xz*xz) == 1). Hо только в том случае если ты не делал масштабирование. Так же очевидно, что они все перпендикулярны друг другу. {dx, dy, dz} - это вектор переноса начала координат старой системы в новую. Или, говоря по-другому, координаты начала новой системы в старой. В данный момент это нас не интересует, так как углы от него не зависят. Орты старой системы координат известны: OX: {1, 0, 0} OY: {0, 1, 0} OZ: {0, 0, 1} Hайти угол между соотвствующими векторами (осями координат) не представляет трудности. cos a = (x'* x + y'* y + z'* z) / (sqrt(x'*x'+y'*y'+z'*z')*sqrt(x*x+y*y+z*z)) То есть угол поворта относительно оси X равен: arccos( 1 * xx + 0 * xy + 0 * xz) / (sqrt(xx*xx+xy*xy+xz*xz) * 1) = = arccos(xx) Вот, собсно, и все. Да, еще. Можно и не делить, ведь длина каждого орта равна единице, если ты все правильно делаешь (в знаменателе произведение длин векторов). Извини, что я так разжевываю, просто не знаю на каком уровне ты знаешь свойства векторов, матриц и т.п. ПОэтому не обращай внимания. В качестве дополнительно литературы очень рекомендую следущие книги: 1. Шикин А.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. М.: ДИАЛОГ-МИФИ, 1996. - 288 с. 2. Шикин Ф.В., Боресков А.В. Компьютерная графика. Полигональные модели. М.: ДИАЛОГ-МИФИ, 2000. - 464 с. Обе книжки можно спокойно заказать через интернет. Я так и делал. Стоят они недорого. 2All: Если я где-то неправильно использовал термины или сделал ошибку - поправьте меня, я не хочу заблуждаться и передавать свои заблуждения другим. Сенкс. Было не очень страшно. Пока. *Victor* [Сейчас пьется: Martini Bianco со льдом] ... [.asm.cpp.pas.] [q3.level.design] [demo.making] [i.girls] -+- [mgl@pisem.net] [mglmap.narod.ru] [icq91208291] + Origin: Южно-Сахалинск, Россия (2:5043/3.88) === end file === Было не очень страшно. Пока. *Victor* [Сейчас пьется: Martini Bianco со льдом] ... [.asm.cpp.pas.] [q3.level.design] [demo.making] [i.girls] --- [mgl@pisem.net] [mglmap.narod.ru] [icq91208291] * Origin: Южно-Сахалинск, Россия (2:5043/3.88) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/28423ed46612.html, оценка из 5, голосов 10
|