Пришлось это мне в последнее время поработать с задачами, где нужно было оперировать кватернионами и заниматься перепроецированием векторов в разные системы координат (это еще называется заменой базиса). Сначала по чужим формулам — причем с опечатками и даже, как выяснилось, с фактическими ошибками — а потом делать свои, по аналогии. И всё даже работало! Но сохранялся какой-то туман в понимании происходящего. А всё, как оказалось, из-за этих ошибок: их комбинация давала систему, в целом сохраняющую корректность, неверным путем таки достигался верный результат. Зато такая удача сильно мешала осознанию проблемы и прояснению природы феномена «верный итог при подозрительных формулах». При этом разбираться досконально времени все не было — работает же, числа выдает правильные, чего тебе еще надо, собака? Вперед, нужно больше золота кода! А вот сейчас пришел момент, когда я, похоже, окончательно всё понял, и хочу поделиться получившейся картинкой с окружающими. Вдруг кому пригодится, и себе памятка.
Заранее оговорюсь, что материал не претендует на академичность изложения, а скорее просто описывает удобный для запоминания способ интерпретации того, что происходит при перепроецировании векторов.
Стало быть, речь у нас пойдет в особенности о проекциях и поворотах.
Описание кватернионов и матриц поворота как таковых опущу, предполагаю, что читатели знакомы с ними. Вектор здесь будет пониматься в его интуитивном представлении, как отрезок прямой в трехмерном пространстве, имеющий длину и направление. Исходное положение вектора будет иметь индекс «–», конечное — индекс «+».
Кватернионы и матрицы поворота могут быть использованы как для выполнения пространственного поворота векторов, так и для описания взаимной ориентации систем координат. В частности, для описания положения целевой системы координат относительно исходной: как нужно повернуть исходную, чтобы ее оси совпали с одноименными осями целевой. Матрица поворота (она же матрица ориентации, для случая описания взаимной ориентации систем координат) может быть получена из нормированного кватерниона ориентации по известным из литературы формулам. Обратное тоже верно: можно получить кватернион ориентации из матрицы.
Вектор
Поворачивать вектор можно, как уже сказано, и с помощью матрицы, и с помощью кватерниона.
Поворот с использованием матрицы: матрица поворота
Поворот с использованием кватерниона ориентации выполняется в два шага:
Числа в результирующей матрице-столбце, полученной любым из этих способов — это проекции вектора в его новом, повернутом положении, на оси все той же исходной системы координат.
С поворотом вектора дело ясное, вопросов нет.
А вот задача перепроецирования вектора из одной системы координат в другую несколько контринтуитивна. Формулировка задачи: необходимо узнать, как некоторый вектор, заданный в исходной системе координат, выглядит в целевой системе. Иначе говоря, по проекциям вектора на оси исходной системы узнать проекции вектора на оси целевой. При этом задан кватернион или матрица ориентации целевой системы относительно исходной.
Может показаться, что для решения этой задачи нужно просто повернуть вектор из исходной системы координат в целевую, пользуясь кватернионом или матрицей ориентации второй относительно первой. Однако это не так! Выполнив подобную операцию, мы узнаем только, как новый, повернутый вектор выглядит в осях все той же исходной системы, а это не то, что нас интересует.
Важно, однако, обратить внимание на то, что после проведения подобного поворота сам вектор окажется ориентирован относительно целевой системы координат так же, как он был до операции ориентирован относительно исходной. В этом кроется ключ к правильному ходу действий. Для получения проекций интересующего нас вектора на целевую систему координат нужно выполнить операцию «в обратную сторону»:
Ура, это именно то, что нам нужно!
P.S. Не могу не упомянуть огромный материал по кватернионам — серию постов в ЖЖ, созданных неким благородным мужем многих достоинств под ником Nabbla, содержащий массу информации по теме: первый пост из серии. Среди прочего в материале поясняется, например, почему способ поворота вектора с помощью кватерниона имеет именно такой вид, какой имеет. Чрезвычайно ему благодарен за труд.
Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…
Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…
Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…
У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…
24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…
27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…