bgc-c/docs/russian/Versor.txt

55 lines
No EOL
3.5 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Версоры
Кватернионы - это гиперкомплексные числа, у которых имеется одна вещественная
компонента и три комплексных компоненты.
Кватернион можно рассмотреть как четырёхмерный вектор:
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**.