Запутался в матрицах вращения

Применение матрицы вращения к вектору означает смещение его координат для выполнения эффекта вращения.

Применение матрицы поворота к модели в начале координат ( 0 , 0 , 0 ) это не то же самое, например, при повороте модели в перемещенной позиции ( 2 , 2 , 2 ) .

Самый распространенный способ повернуть объект « вокруг собственной оси » — это перевести его в исходное положение перед применением матрицы поворота, а затем перевести обратно в предыдущее положение:

Т ( Икс , у , г ) * р * Т ( Икс , у , г ) ( п )

Если вы этого не сделаете, вращение не будет происходить относительно оси объекта, поэтому форма слегка деформируется (см. рисунок).

Я хотел бы знать, есть ли способ напрямую вычислить правильное представление оси-угла, имитируя вращение вокруг собственной оси моего объекта одним способом, без перевода обратно в исходное положение?

Кроме того, я заметил, что при последующем использовании матриц углов Эйлера возникает « карданная блокировка », разбивая процесс на три матрицы вращения для Икс , Д и Z оси. А как насчет матрицы поворота оси-угла, которая выполняет поворот за один шаг, а не за три:

[ потому что θ + р Икс 2 ( 1 потому что θ ) р Икс р у ( 1 потому что θ ) р г грех θ р Икс р г ( 1 потому что θ ) + р у грех θ 0 р у р Икс ( 1 потому что θ ) + р г грех θ потому что θ + р у 2 ( 1 потому что θ ) р у р г ( 1 потому что θ ) р Икс грех θ 0 р г р Икс ( 1 потому что θ ) р у грех θ р г р у ( 1 потому что θ ) + р Икс грех θ потому что θ + р г 2 ( 1 потому что θ ) 0 0 0 0 1 ]

Предотвращает ли такая матрица « карданную блокировку »? В чем разница между этой матрицей и матрицей, вычисленной из кватерниона а + б я + с Дж + г к (используя таблицу умножения кватернионов):

[ а г б с г а с б б с а г с б г а ]

Муаровый узор

Ответы (1)

В трех измерениях а 3 × 3 Матрица вращения может выполнять любое мыслимое вращение, которое вы можете захотеть для вектора.

Но вектор сам по себе не имеет «местоположения», вокруг которого можно вращаться. Он просто меняет направление. Даже большая коллекция векторов все еще не имеет «местоположения».

Тот факт, что вы хотите повернуть модель, у которой есть положение, означает, что вы имеете дело с пространственными координатами, а не просто с векторами. Один из способов работы с пространственными координатами, конечно, состоит в том, чтобы назначить одну точку в пространстве «началом» и идентифицировать каждую точку. п с вектором из начала в п . Когда вы это сделаете, повороты по-прежнему изменяют направления векторов; поскольку мы по-прежнему идентифицируем каждую точку по ее вектору из начала координат, вращение этого вектора вращает эту точку вокруг оси, проходящей через начало координат.

Это означает, что начало координат, представленное нулевым вектором (все координаты равны нулю), никогда не перемещается, когда вы применяете 3 × 3 матрица вращения в трех измерениях. На самом деле, несмотря ни на что 3 × 3 матрицу, которую вы умножаете на нулевой вектор, вы все равно получаете нулевой вектор, даже если матрица не представляет собой истинное вращение.

Если вы хотите повернуть модель вокруг ее собственного центра, который не является исходной точкой, то, если вы случайно не выберете одну ось вращения, которая также проходит через исходную точку, ваше вращение сместит исходную точку. Следовательно, невозможно сделать с 3 × 3 матрица.

Что вы можете сделать, если хотите, так это построить вращение р на желаемый угол вокруг оси в желаемой ориентации (параллельно оси, которую вы действительно хотите). Тогда, если точка С является центром вашего объекта, вычислите р ( С ) . Теперь найдите вектор в "=" С р ( С ) . Затем вы можете выполнить желаемое вращение любой точки п вокруг собственного центра вашего объекта, применяя вращение р и перевод Т в (добавляя вектор в к координатам точки):

Т в ( р ( п ) ) .

Теперь это всего лишь один перевод в дополнение к повороту.

Показанная вами матрица «поворот оси-угла», которая представляет собой 4 × 4 Однако матрица на самом деле больше, чем просто матрица вращения. Это работает так, что любая точка п представлен четырехкоординатным вектором,

[ Икс п у п г п 1 , ]
который вы можете вращать, умножая на матрицу в приведенном вами виде; но для того, чтобы следовать вращению по переносу, вам просто нужно заменить нули в правом столбце вашей матрицы на координаты вектора переноса.

Вы также можете просто взять верхний левый 3 × 3 подматрицу вашей матрицы «ось-угол» и умножьте ее на трехкоординатный вектор от начала координат до каждой точки, но тогда это просто вращение вокруг начала координат, как и любой другой 3 × 3 вращение матрицы в трех измерениях.

Избегает ли это «замка карданного подвеса», зависит от того, что вы хотите с ним делать. Если вы на самом деле используете его для отслеживания вращения трехосного стабилизатора, вы все равно можете «заблокировать» стабилизатор, проведя его через некоторую последовательность поворотов оси-угла. Если у вас есть свободно плавающий в пространстве объект, а не настоящий карданный вал, то может применяться «фиксация кардана», если вы используете набор углов Эйлера для представления каждой ориентации объекта относительно его исходной ориентации. Некоторая последовательность ориентаций заставит вас внезапно «перевернуть» один из ваших углов Эйлера, что является своего рода манипуляцией, которая «запирает» реальный подвес. То есть углы Эйлера — это своего рода вымышленный кардан. Но пока у вас нет настоящего или вымышленного стабилизатора, вы не можете его «заблокировать».


Разница между матрицами и кватернионами — это отдельный вопрос. Но когда они применяются к трехмерным вращениям, каждый по-своему, каждый представляет собой просто другой способ представления вращения. И у каждого свой способ подсчета результатов ротации. О любой из этих техник написано много, что вы можете изучить.

Спасибо за ваш подробный ответ. Что касается « карданного замка », я понимаю, что вы имели в виду. Если бы я использовал мою « одностороннюю » матрицу вращения для выполнения трех последовательных вращений по методу Эйлера (например, для представления карданного подвеса в программе), я бы заблокировать мой карданный подвес, решением было бы использовать здесь кватернионы, не так ли?
Я просто не понимаю, как одно вращение, выполненное одной матрицей вращения, может «заблокировать» подвес.
@Prion Если у вас трехсторонний подвес, объект внутри имеет подшипники «сверху» и «снизу», а крайние подшипники находятся в фиксированных местах. Поверните объект так, чтобы его «верхний» и «нижний» подшипники были выровнены с крайними подшипниками. Теперь ваш подвес заблокирован. (Это не означает, что вы больше не можете вращать его, это просто означает, что начальное направление вращения ограничено.)
Единственной « реальной » опасностью карданного замка для математического приложения будет камера или плоскость (как в 3D-играх), которую вы можете вращать последовательно, если вам случится вращаться в « односторонней » матрице вместо трех последовательных вращений. тогда в этом нет никакой опасности.
Как я уже сказал, если нет стабилизатора, нет возможности блокировки стабилизатора. Поэтому все, что вам нужно сделать, это выяснить, есть ли в вашем приложении подвес (реальный или воображаемый). Если вы вращаете свободное тело с одной матрицей для каждого поворота, я согласен, что нет ни карданного подвеса, ни блокировки карданного подвеса.
Но я могу реализовать воображаемый карданный подвес, например, в программном обеспечении, используя кватернионы для представления трех последующих вращений, не рискуя заблокировать свой карданный подвес, не так ли?
Вы можете использовать один кватернион для представления всего вращения. Вам не нужно делать из него кардан.
Нет, я имею в виду, если я хочу внедрить карданный подвес с единственной целью его реализации, как я могу избежать блокировки кардана? Избежали бы этого кватернионы?
Подвес, смоделированный кватернионами, по-прежнему остается подвесом, так что нет.
Так зачем же использовать кватернионы вместо матрицы «одного вращения», которую я показал в своем посте? Каковы преимущества ? Кватернионы часто представляются как решение карданной блокировки, но каким образом?
Многие люди писали о причинах использования (или не использования) кватернионов, например, в ответах на math.stackexchange.com/questions/71/… , stackoverflow.com/questions/8919086/… и stackoverflow.com/questions . /1840314/…