Недавно мне пришлось работать с задачами, где приходилось оперировать кватернионами и перепроецировать векторы в разные системы координат (это еще называется заменой базиса).
Сначала воспользовавшись чужими формулами - с опечатками и даже, как оказалось, фактическими ошибками - а затем по аналогии составив свою.
И всё даже работало! Но все еще оставался некоторый туман в понимании происходящего.
И все, как оказалось, было из-за этих ошибок: их сочетание давало систему, которая в целом сохраняла корректность, но правильный результат достигался неправильным путем.
Но такая удача сильно мешала пониманию проблемы и выяснению природы феномена «правильных результатов с подозрительными формулами».
При этом не было времени во всем разбираться досконально — работает, цифры выдает правильные, что еще нужно, собака? Вперёд, нам нужно больше кодового золота! Но вот настал момент, когда я, кажется, наконец-то всё понял, и хочу поделиться получившейся картинкой с другими.
Если кому-то будет полезно, напоминалка для себя.
Заранее оговорюсь, что материал не претендует на академическое изложение, а просто описывает легко запоминающийся способ интерпретации того, что происходит при перепроецировании векторов.
Поэтому мы будем говорить особо о проекциях и вращениях.
Начальные посылки
Я опущу описание кватернионов и матриц вращения как таковых; Я предполагаю, что читатели с ними знакомы.Под вектором здесь будем понимать его интуитивное представление, как отрезок прямой в трехмерном пространстве, имеющий длину и направление.
Начальное положение вектора будет иметь индекс «–», конечное положение будет иметь индекс «+».
Кватернионы и матрицы вращения могут использоваться как для пространственного вращения векторов, так и для описания относительной ориентации систем координат. В частности, описать ситуацию цель система координат относительно оригинальный : как повернуть источник, чтобы его оси совпадали с одноименными целевыми осями.
Матрица вращения (также известная как матрица ориентации для случая описания взаимной ориентации систем координат) может быть получена из нормированного кватерниона ориентации по известным из литературы формулам.
Верно и обратное: можно получить кватернион ориентации из матрицы.
Вектор
, подверженная вращению, задается значениями ее проекций (длин проекций) на оси исходной системы координат: три числа – проекции на три ортогональные оси
.
В результате получается матрица-столбец 3x1, которую также называют вектором.
Чтобы не путать в тексте такую запись проекций вектора с интуитивным представлением о нем, я продолжу называть эту запись «матрицей-столбцом».
Поворот вектора
Повернуть вектор, как уже говорилось, можно, используя как матрицу, так и кватернион.
Вращение с использованием матрицы: матрица вращения
умножается на исходную матрицу-столбец.
На выходе мы имеем еще одну результирующую матрицу-столбец:
Вращение с использованием кватерниона ориентации выполняется в два этапа:
- Из исходной матрицы столбцов
и кватернион
вычисляется промежуточный столбец матрицы
, Где
– операция векторного произведения векторов; - Значение полученного столбца матрицы рассчитывается по формуле
оригинальный системы координат.
С вращением вектора дело понятно, вопросов нет.
Векторное перепроецирование
Но задача перепроецирования вектора из одной системы координат в другую несколько противоречива.Формулировка задачи: необходимо выяснить, как некий вектор, указанный в оригинальный система координат, смотрит цель система.
Другими словами, по проекциям вектора на оси исходной системы найти проекции вектора на оси целевой системы.
В этом случае указывается кватернион или матрица ориентации целевой системы относительно исходной.
Может показаться, что для решения этой задачи нужно просто повернуть вектор из исходной системы координат в целевую, используя кватернион или матрицу ориентации второго относительно первого.
Однако это не так! Проделав подобную операцию, мы лишь узнаем, как выглядит новый, повернутый вектор в осях той же исходной системы, а это не то, что нас интересует .
Важно, однако, обратить внимание на то, что после такого поворота сам вектор будет ориентирован относительно целевой системы координат так же, как он был ориентирован относительно исходной до операции.
Это залог правильного курса действий.
Чтобы получить проекции интересующего нас вектора на целевую систему координат, нам необходимо выполнить операцию «в обратную сторону»:
- Установлен в цель система координат, «временный» вектор с теми же значениями проекции на ось этой целевой системы, что и интересующий нас вектор («данный») на ось исходной системы.
Таким образом, «временный» вектор будет ориентирован относительно целевой системы так же, как заданный вектор ориентирован относительно исходной;
- Определить ориентацию оригинальный системы относительно цель .
Здесь все просто: требуемая ориентация описывается либо кватернионом, сопряженным с существующим (
), или матрица
, обратный существующему; При этом для матрицы ориентации, определитель которой всегда равен 1, обратная матрица совпадает с транспонированной
, поэтому достаточно транспонировать существующую матрицу ориентации; - Поверните «временный» вектор, используя полученный кватернион/матрицу.
Вектор будет вращаться относительно целевой системы координат так же, как исходная система вращается относительно него.
В этом случае в силу всего сказанного ранее, а) «временный» вектор станет ориентирован относительно исходной системы так же, как он был ранее ориентирован относительно целевой, и, следовательно, будет в точности совпадать с заданным вектор, и б) результатом операции будет матрица-столбец, описывающая, как теперь выглядит «временный» (а значит, заданный) вектор в осях целевой системы координат.
Так что, конечно, можно смело брать сам исходный вектор и проводить с ним операции.
Описание выше лишь более подробно иллюстрирует смысл происходящего.
Пример приложения В задачах навигации необходимо из показаний датчиков угловой скорости вычитать скорость вращения Земли.
Вращение Земли задается вектором, например, в геоцентрической системе координат (ГСК, прямоугольная декартова система, начало координат находится в центре Земли, ось Z направлена на Северный полюс, ось X находится в точке пересечения экватора и нулевого меридиана, ось Y находится в точке пересечения экватора и 90-го меридиана, получается правая система координат).
Геоцентрическая система удобна, кроме всего прочего, и тем, что в ней вращение Земли происходит только вокруг оси Z. Также в любой момент известна ориентация связанной системы координат (CCS, прямоугольная декартова система, начало координат – центр масс аппарата, ось X направлена к его носу, ось Z – вправо крыла, ось Y направлена вверх, также правая тройка) самолета относительно геоцентрической, а оси датчиков угловой скорости в первом приближении совпадают с осями соответствующей системы координат. Необходимо определить, как скорость вращения Земли отображается в показаниях датчиков угловой скорости, чтобы можно было вычесть вызванные ею составляющие из их показаний и рассчитать вращение самолета чисто относительно местной вертикали.
.
Дается итог: исходная система координат – НСК, целевая система координат – НСК, известен кватернион ориентации НСК относительно НСК.
.
Решение: установить вектор
, мы получаем сопряженный кватернион
, мы используем его для вращения вектора.
Вуаля: у нас есть матрица 3х1 проекций скорости вращения Земли на ось SSC. Вы можете вычесть.
P.S. Не могу не упомянуть огромный материал по кватернионам - серию постов в Живом Журнале, созданную неким многозаслуженным знатным человеком под ником Наббла, содержащую масса информация по теме: первый пост в серии .
Среди прочего в материале объяснил например, почему метод вращения вектора с помощью кватерниона имеет именно ту форму, которую он имеет. Я ему чрезвычайно благодарен за его работу.
Теги: #математика #матрицы #вращение #кватернионы #системы координат #замена базиса
-
Все Об Услугах Интернет-Факса
19 Oct, 24 -
Выбор Спортивных Наушников До 2500 Рублей.
19 Oct, 24 -
Yahoo Наняла Банкира
19 Oct, 24 -
Реализация Механизма Событий В Oracle Bpm
19 Oct, 24