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