# Библиотека *quat* Библиотека для работы с кватернионами. Кватернионы задаюся таблицей, состоящей из 4 компонентов: `{w, x, y, z}` ## Кватернион из матрицы - *quat.from_mat4(...)* ```lua -- создаёт кватернион на основе матрицы вращения quat.from_mat4(m: matrix, [опционально] dst: quat) -> quat ``` ## Кватернион из углов Эйлера - *quat.from_euler(...)* ```lua -- создаёт кватернион на основе вектора, содержащего углы Эйлера в порядке XYZ (pitch, yaw, roll) -- (значения углов строго в градусах) quat.from_euler(euler: vec3, [опционально] dst: quat) -> quat ``` ## Композиция кватернионов - quat.mul(...) ```lua -- Умножает два кватерниона (композиция поворотов) quat.mul(a: quat, b: quat, [опционально] dst: quat) -> quat ``` ## Поворот 3д вектора на кватернион - quat.mul_vec3(...) ```lua -- Поворачивает вектор на заданный кватернион quat.mul_vec3(a: quat, b: vec3, [опционально] dst: vec3) -> vec3 ``` ## Сферическая линейная интерполяция - *quat.slerp(...)* Интерполяция всегда выполняется по короткому пути, а вращение выполняется с постоянной скоростью. ```lua -- создаёт кватернион как интерполяцию между a и b, -- где t - фактор интерполяции quat.slerp(a: quat, b: quat, t: number, [опционально] dst: quat) -> quat ``` ## Перевод в строку - *quat.tostring(...)* ```lua -- возвращает строку, представляющую содержимое кватерниона quat.tostring(q: quat) -> string ```