Векторные значения

Кватернионы

Во время работы с объектами сцены непосредственно в пользовательском интерфейсе 3dsMax ограничения, присущие эйлерову представлению вращения во­круг осей X,Y и Z, зачастую никак не мешают поворачивать объекты и получать вполне предсказуемые результаты. Для этого просто выбирается система координат, наиболее подходящая для конкретной ситуации, и далее вращение выполня­ется визуально для достижения желаемого результата.

При написании сценариев возможность манипулировать моделью визуально отсутствует. Вращение объекта приходится обозначать точно с помощью конкретных чисел, чтобы добиться искомого результата.

И в этом случае на помощь приходит метод представления процесса вращения с помощью кватернионов. Кватернионы явно обозначают всякое возможное вращение, что позволяет точно и однозначно задать вращение вокруг осей X, Y и Z.

Значение кватерниона выражается в виде угла и значения типа Point3, описывающего некий вектор: quat <угол> <вектор>

Векторная часть данного выражения относится к выражению типа Point3. Отдельные значения в выражении типа Point3 всегда находятся в пределах от -1 до 1. Ниже приведены некоторые примеры обозначения кватернионов:


Преобразования и анимация

quat 30 [1, 0, 0]

quat 30 [0.266917, 0.534798, 0.801715]

Для того чтобы лучше понять кватернионы, представьте себе сферу с вектором, направленным от центра сферы к ее поверхности. Векторная часть кватерниона обозначает направление вектора, в угол — количество градусов, на которое объект должен повернуться вокруг данного вектора.

Если векторное значение состоит из единицы и двух нулей, то вектор нетрудно себе представить направленным вдоль одной из осей X, Y или Z. При этом 1 опре­деляет ось, вдоль которой вектор направлен.

Так, векторное значение [1, 0, 0] направляет вектор вдоль оси X.

В более сложном вектором выражении, как, например, [0.266917, 0.534798, 0.801715], вектор направлен из воображаемого центра сферы к точке поверхности, определяемой данным выражением типа Point3. Объект будет вращаться вокруг данного вектора на количество градусов, определяемых угловым значением кватер­ниона. В приведенных выше примерах это угловое значение равно 30.

Как правило, используются векторы, направленные вдоль оси X, Y или Z. А для того чтобы использовать векторы, имеющие другое направление, нужно знать, как их строить.

Векторные значения кватернионов следует рассчитывать очень аккуратно. Квадратный корень из суммы квадратов всех составляющих должен быть

равен 1. Так, из приведенного выше примера кватерниона

quat 30 [0.266917, 0.534798, 0.8 01715] можно установить, что квадратный корень из суммы (0.266917)2 +(0.534798)2 +(0.801715)2 = 1

Это ограничение объясняется тем, что длина вектора должна быть всегда равна 1. Следовательно, длина вектора всегда равна квадратному корню из суммы х2 + у2 + z2.

Правильное определение векторных значений кватерниона — занятие долгое и утомительное. Поэтому для упрощения расчетов применяется метод normalize.

rot_vect = normalize [10, 14, 5] q = quat 90 rot_vect