В случае если итоговое положение твердого тела получается в результате комбинаций поворотов, то кватернион, задающий положение твердого тела относительно неподвижного базиса, можно получить при помощи теоремы о сложении поворотов. Давайте покажем это на примере уже знакомой вам задачи с конусом. Напомним условия: у нас есть круговой конус с углом при вершине π / 3 и радиусом основания R. Этот конус в начальный момент времени расположен таким образом, что его ось симметрии расположена в плоскости zOy. В процессе движения конус катится без проскальзывания по горизонтальной плоскости, и конечное его положение определяется, задается таким образом, что ось симметрии конуса также лежит в плоскости zOy, но с другой стороны. Посмотрите, пожалуйста, на анимацию, чтобы вспомнить, как конус движется, и обратите внимание на то, где оказывается точка касания в начальный и конечный момент времени. [БЕЗ_ЗВУКА] [БЕЗ_ЗВУКА] Теперь давайте выпишем сначала кватернион, задающий положение твердого тела относительно неподвижного базиса в начальный момент времени. [ШУМ] Для этого давайте введем систему координат. Система координат, связанная с конусом, следующая: ось симметрии — это ось z', ось x' пусть совпадает с осью x, и ось y' мы рисовать не будем, но вы понимаете, что она расположена в плоскости zOy перпендикулярно оси z'. Что значит «задать кватернион, описывающий положение твердого тела относительно неподвижного базиса»? Это значит, что нужно задать ось поворота и задать угол, на который мы поворачиваем. Обратите внимание, что в данном случае, чтобы совместить подвижную и неподвижную систему отсчета, достаточно повернуть вокруг оси x на угол −π / 3. Обратите внимание, что поворот — по часовой стрелке, поэтому угол отрицательный. И кватернион, задающий положение начальное, следующий. Скалярная часть: косинус угла поворота пополам, косинус — функция четная, так что минус не пишем, cos(π / 6). Поворот осуществляем вокруг оси x, поэтому векторная часть — 1, 0, 0, которую необходимо домножить на синус от половины угла поворота, sin(−π / 6), sin(−π / 6). Подставим значения. cos(π / 6) — корень из 3 / 2, sin (−π / 6) — − 1 / 2. А две остальные компоненты равны 0. Это кватернион, задающий начальное положение. Обратите внимание на то: мы эту задачу уже решали, когда изучали углы Эйлера. И сколько времени у нас понадобилось на то, чтобы задать углы Эйлера, которые помогают определить ориентацию базиса, связанного с телом относительно неподвижного базиса. И как быстро мы получили ответ здесь. Почему? Потому что углы Эйлера — это ненаблюдаемые величины, а кватернион имеет наглядную геометрическую интерпретацию. Теперь давайте перейдем к конечному положению твердого тела. [ШУМ] Неподвижная система координат, как и раньше — xyz. Конус в конечном положении занимает, принимает следующую ориентацию: что ось симметрии конуса — точно так же в плоскости zOy. Как вы видели на анимации, ось x' направлена противоположно оси x. И ось y' мы рисовать не будем — вы понимаете, что это ось, ортогональная z' и x' и составляющая с ними правую тройку. Теперь нам необходимо задать кватернион, который описывает положение базиса, связанного с твердым телом в текущий момент времени, относительно неподвижного базиса. Чтобы перевести неподвижную систему координат в подвижную, необходимо осуществить три последовательных поворота. Первый мы с вами уже осуществили, давайте будем двигаться при помощи начального положения. То есть первый кватернион — это кватернион, задающий начальное положение. Далее, из начального положения нам необходимо перевести ось z' в новое положение. Это кватернион, который задает поворот вокруг оси z на угол π. И последнее: вы обратили внимание на то, что точка касания осталась в том же самом месте, то есть снова касается оси y, а это значит, что конус повернулся вокруг своей оси на угол 2π. И такой хороший угол в 2π получился только за счет таких геометрических характеристик нашего конуса — что угол при вершине = π / 3. Ну что, давайте выпишем кватернион, задающий конечное положение твердого тела относительно неподвижного базиса. Выпишем кватернион поворота вокруг оси z на угол π. Это кватернион λ2, и равен он: cos(π / 2) — это скалярная часть, и 0, 0, sin(π / 2) — это его векторная часть. Кватернион — [0, 0, 0, 1]. Кватернион, задающий поворот вокруг оси z' — это следующий кватернион: cosπ, и далее мы должны ось z', выписанную в неподвижной системе координат, умножить на sinπ. То есть обратите внимание на то, что это обычный, единичный кватернион, на который домножать необязательно, на результат он влиять не будет. Что у нас есть? У нас есть два кватерниона: кватернион, задающий начальное положение, и перекидывающий из начального положения в конечное. И обратите внимание на то, что оба кватерниона выписаны в неподвижной системе координат, то есть мы с вами можем пользоваться активной точкой зрения на повороты, а значит кватернион, задающий конечное положение твердого тела, получается в результате перемножения кватернионов в обратном порядке. То есть λ3 * λ2 * λ, задающий начальное положение. λ3 — это единичный кватернион, умножение на него не даст никакого нового эффекта, поэтому перемножаем только λ2 и λ начальный. λ2 — [0, 0, 0, 1] — кватернионно умножаем на кватернион λ начальный — [корень из 3 / 2, −1 / 2, 0, 0]. Скалярная часть кватерниона, задающего конечное положение равна 0. Теперь давайте получим векторную часть. Сначала скалярную часть первого кватерниона умножим на векторную часть второго и получим 0, нулевой вектор. Теперь скалярную часть второго кватерниона умножим на векторную часть первого, получим 0, 0, корень из 3 / 2. Теперь перемножим векторные части кватерниона. Первая компонента — нулевая, вторая компонента — −1 / 2, и третья компонента — нулевая. Получаем следующий кватернион: [0, 0, −1 / 2, корень из 3 / 2]. Видим, что это кватернион, который задает поворот вокруг оси с координатами 0, −1 / 2, корень из 3 / 2. При этом поворот осуществляется на такой угол, косинус половины которого равен 0, а синус половины которого равен 1, то есть угол θ = π. Давайте покажем эту ось на нашем рисунке. Ось следующая: проходит по образующей нашего конуса, которая лежит в плоскости zOy. И вы можете заметить, что, действительно, поворотом вокруг этой оси на угол π мы можем совместить неподвижную систему координат с подвижной. Теперь мы воспользовались активной точкой зрения, теперь давайте пару слов скажем про пассивную точку зрения. В пассивной точке зрения мы должны были записать кватернион второго поворота в системе координат, из которой он производит этот поворот. То есть наш кватернион λ2 — давайте его обозначим со звездочкой — выпишем в системе координат z'x'y', связанной с начальным положением конуса. Что этот кватернион делает? Он производит поворот на угол π, то есть скалярная часть — это cos(π / 2), и поворачивает вокруг оси z, выписанной в системе z'x'y' — можно выписать, чему равны координаты z, — на угол π. Координаты оси z в системе z'x'y' равны: 0 по оси x, по оси y — −sin (π / 3), и по оси z — cos (π / 3). И необходимо еще домножить на sin(π / 2), то есть sin(π / 2) и sin(π / 2). То есть кватернион, осуществляющий перевод из начального положения в конечное, следующий: скалярная часть — 0, иксовая компонента — 0. Дальше, игрековая компонента: sin60° — корень из 3 / 2, то есть −корень из 3 / 2, и 1 / 2. Теперь, чтобы получить кватернион, задающий конечное положение твердого тела, при использовании пассивной точки зрения, мы должны перемножить кватернионы в прямом порядке, то есть мы должны кватернион, задающий начальное положение, умножить на кватернион, задающий второй поворот, записанный в собственном базисе. И можете проверить, что, действительно, результат получается точно такой же, как мы получили при активной точке зрения. Спасибо за внимание, задача решена.