55 lines
No EOL
3.5 KiB
Text
55 lines
No EOL
3.5 KiB
Text
# Версоры
|
||
|
||
Кватернионы - это гиперкомплексные числа, у которых имеется одна вещественная
|
||
компонента и три комплексных компоненты.
|
||
|
||
Кватернион можно рассмотреть как четырёхмерный вектор:
|
||
1. сложение и вычитание кватернионов точно такое же, как и у обычных четрыхмерных
|
||
векторов в евклидовом пространстве;
|
||
|
||
2. кватернионы точно также как и четрыхмерные векторы могут быть умножены или
|
||
разделены на число;
|
||
|
||
3. модуль кватерниона вычисляется точно также как модуль вектора в четырёхмерном
|
||
евклидовом пространстве;
|
||
|
||
4. а умножение кватернионов можно представить как произведение матрицы 4x4 на
|
||
четырёхмерный вектор.
|
||
|
||
Кватернион имеет четыре степени свободы. Но если ввести ограничение в виде
|
||
требования, чтобы модуль этого кватерниона был равен единице, то такое множество
|
||
кватернионов будет иметь только три степени свободы.
|
||
|
||
Эти кватернионы представляют собой сферу радиуса 1 в четырёхмерном пространстве.
|
||
"Поверхность" этой сферы имеет размерность равную трём.
|
||
|
||
Кватернионы единичной длины очень хорошо описывают повороты в трёхмерном
|
||
пространстве. И это логично, потому что повороты в трёхмерном пространстве имеют
|
||
три степени свободы, точно также как и сфера в четырёхмерном пространстве
|
||
|
||
Для кватерниона единичной длины существует специальное название: версор.
|
||
|
||
Версоры - это кватернионы единичной длины.
|
||
|
||
## Версоры в библиотеке
|
||
|
||
Библиотека имеет отдельную реализацию для версоров в виде специальных структур и
|
||
набора функций, которые поддерживают модуль версоров близким к единице.
|
||
|
||
Для описания версора имеется две структуры: **BgFP32Versor** и **BgFP64Versor**:
|
||
|
||
typedef struct {
|
||
const float s0, x1, x2, x3;
|
||
} BgFP32Versor;
|
||
|
||
typedef struct {
|
||
const double s0, x1, x2, x3;
|
||
} BgFP64Versor;
|
||
|
||
Поля намеренно объявлены констрантными (const), чтобы у разработчика,
|
||
использующего данные структуры, не было соблазна изменять значения полей
|
||
напрямую.
|
||
|
||
С данными структурами лучше использовать специальные функции, которые позволяют
|
||
устанавливать новые значения в поля структур **BgFP32Versor** и
|
||
**BgFP64Versor**. |