ddd.quaternion
-
struct
Кватернион
;Гиперкомплексное число (w,x,y,z), определяющее повороты объектов в 3D-пространстве.
Для кватернионов определены:
Преобразование в матрицу поворота и обратно.
Унарные операции: обратить - получение кватерниона, реализующего поворот в обратную сторону на тот же угол. нормализовать - получение кватерниона единичной длины, реализующего тот же поворот.
Бинарные операции: умножение * на другой кватернион - результирующий кватернион реализует поворот, соответствующий последовательному применению поворотов двух перемножаемых кватернионов. умножение * на скаляр. скалярное_произведение кватернионов.
Функции интерполяции для анимации поворотов во времени: линейная_интерполяция - быстрый вариант интерполяции (ошибка до 4% в случае угла между кватернионами pi/2), используется для интерполяции между кватернионами, не сильно различающимися между собой. сферическая_интерполяция - точная, но более медленная реализация интерполяции.-
static const Кватернион
НОЛЬ
;Кватернион, не выполняющий поворотов
-
this(float
fW
, floatfX
, floatfY
, floatfZ
);Конструктор, принимающий 4 числа
-
this(const(Кватернион)
другой_кватернион
);Конструктор копирования
-
this(Матрица3
поворот
);Конструктор из матрицы поворота 3x3
-
this(float
угол
, const(Вектор3)оси
);Конструктор, создающий кватернион из угла/
оси
-
this(Вектор3
x_ось
, Вектор3y_ось
, Вектор3z_ось
);Конструктор, создающий кватернион из 3 ортонормированных локальных осей
-
this(float[]
массив
);Конструктор, создающий кватернион напрямую из 4 чисел w/x/y/z
-
void
из_матрицы_поворота
(const(Матрица3)матрица_поворота
);Функция, строящая кватернион из матрицы поворота
-
void
из_угла_и_оси
(floatугол
, const(Вектор3)ось
);Функция, строящая кватернион из угла/оси
-
void
из_осей
(Вектор3x_ось
, Вектор3y_ось
, Вектор3z_осьs
);Функция, строящая кватернион из 3 ортонормированных локальных осей
-
const Матрица3
в_матрицу_поворота
();Построение матрицы поворота 3x3 из этого кватерниона
-
Кватернион
opBinary
(string операция)(const(Кватернион)к2
) if (операция == "*");Умножение на другой кватернион. Результирующий кватернион реализует поворот, соответствующий последовательному применению поворотов двух перемножаемых кватернионов.
Умножение не коммутативно! k1*k2 != k2*k1
-
Кватернион
opBinary
(string операция)(const(Кватернион)к2
) if (операция == "+" || операция == "-");Сложение-вычитание с другим кватернионом. Смысл операции сложения можно описать как "смесь" вращений, т.е. мы получим вращение, которое находится между this и
к2
. -
Кватернион
opOpAssign
(string операция)(const(Кватернион)к2
) if (операция == "*");Версия умножения с последующим присваиванием
-
Кватернион
opBinary
(string операция)(floatскаляр
) if (операция == "*");Умножение кватерниона на
скаляр
-
const float
скалярное_произведение
(const(Кватернион)к2
);Скалярное произведение кватернионов
-
const float
Norm
();Квадрат абсолютного значения кватерниона
-
const Кватернион
обратить
();Обращение кватерниона - получение кватерниона, реализующего поворот в обратную сторону на тот же угол.
-
float
нормализовать
();Нормализация кватерниона - получение кватерниона с единичным абсолютным значением, реализующего поворот на тот же угол
-
const Кватернион
UnitInverse
(); -
Вектор3
opBinary
(string операция)(Вектор3v
) if (операция == "*");Умножение кватерниона на вектор - реализация поворота этого вектора.
Возвращаемое значение:
Вектор той же длины, что и переданный на вход, повёрнутый на угол этого кватерниона.
-
bool
equals
(const(Кватернион)к2
, floatдопуск
);Сравнение кватернионов на равенство с погрешностью
Параметры:
const(Кватернион)
к2
сравниваемый кватернион
float
допуск
максимальная погрешность в значении разницы углов между кватернионами, при котором они считаются равными
-
const string
toString
();Вывод значения кватерниона
-
const Кватернион
линейная_интерполяция
(const(Кватернион)к2
, floatt
);Линейная интерполяция между этим кватернионом и переданным.
Линейная интерполяция работает быстрее сферической, но даёт погрешность, которая тем больше, чем больше угол между кватернионами. В DDD для покадровой скелетной анимации используется линейная интерполяция.
Параметры:
const(Кватернион)
к2
Второй кватернион
float
t
Параметр интерполяции. При
t
=0 результат равен этому кватерниону, приt
=1 результат равенк2
.Возвращаемое значение:
Кватернион, являющийся результатом интерполяции между этим кватернионом и
к2
. -
const Кватернион
сферическая_интерполяция
(const(Кватернион)к2
, floatt
);Сферическая интерполяция между этим кватернионом и переданным.
Параметры:
const(Кватернион)
к2
Второй кватернион
float
t
Параметр интерполяции. При
t
=0 результат равен этому кватерниону, приt
=1 результат равенк2
.Возвращаемое значение:
Кватернион, являющийся результатом интерполяции между этим кватернионом и
к2
.
-