Написание документации: кватернионы и версоры

This commit is contained in:
Andrey Pokidov 2024-11-25 01:57:35 +07:00
parent 5c80084b1e
commit 3ff894cf5d
21 changed files with 114 additions and 18 deletions

104
docs/quaternion-rus.md Normal file
View file

@ -0,0 +1,104 @@
# Кватернионы
Кватернионы - это гиперкомплексные числа, у которых имеется одна действительная
компонента и три комплексных компоненты:
![Определение кватерниона](./media/quaternion_definition.png)
Кватернион можно представлять по-разному, например, в виде кортежа
(последовательности) из четырёх чисел также как четырёхмерный вектор:
![Кватернион-кортеж](./media/quaternion_vector4_form.png)
Можно представлять как пару из числа и трёхмерного вектора:
![Кватернион как число и вектор](./media/quaternion_mixed_form.png)
Кватернионы можно легко вывести из обычных комплексных чисел. Обычные
комлексные числа в качестве в качестве компонент имеют вещественные
числа *a* и *b*:
![Определение комплексного числа](./media/compex_number_000.png)
Но, что если представить, что компоненты *a* и *b* тоже комплексные
числа, но с другой мнимой единицей *j* вместо *i*, при этом
мнимая единица *j* имеет такие же свойства, что и *i*:
![Комплексная единица j](./media/imaginary_j.png)
Тогда компоненты *a* и *b* можно представить следующим образом:
![Комплексные компоненты](./media/compex_number_001.png)
Если подставить их в формулу комплексного числа, то получается:
![Гиперкомплексное число](./media/compex_number_002.png)
В этом выражении наиболее интересно произведение мнимых единиц *ij*. Если
представить, что произведение антикоммутативно, то у произведения
получаются интересные свойства.
![Антикоммутативность](./media/imaginary_anticommutative.png)
Например, если взять квадрат произведения, то получается, что оно ведёт себя
как мнимая единица:
![Квадрат произведения](./media/imaginary_anticommutative2.png)
Таким образом, произведение мнимых единиц *ij* можно обозначить новой мнимой
единицей:
![Новая мнимая единица](./media/imaginary_k.png)
И тогда получается полноценный кватернион:
![Кватернион](./media/quaternion_result.png)
Кватернионы обладают массой интересных свойств и применений. В геометрии
основным применением является описание поворотов в трёхмерном пространстве.
Кватернионы, которые описывают поворот в трёхмерном пространстве называются
[версорами](./versor-rus.md).
## Реализация кватернионов в библиотеке
В библиотеке кватернионы реализованы как в виде обычных кватернионов, так и
в виде веросоров.
Главное отличие в том, что реализация версоров ориентирована именно для
представления поворотов в трёхмерном пространстве.
Версоры нельзя складывать, вычитать, что можно делать с кватернионами. Также
версоры нельзя умножать и делить на вещественные числа.
Но версоры можно комбинировать. Операция комбинирования версоров по является
обычным произведением кватернионов. Единственное отличие в том, что операция
комбинирования версоров обеспечивает, чтобы результат комбинации также был
версором, то есть, имел модуль, равный единицы.
Для описаия кватернионов есть две структуры:
typedef struct {
float s0, x1, x2, x3;
} BgFP32Quaternion;
typedef struct {
double s0, x1, x2, x3;
} BgFP64Quaternion;
Для описания версоров также имеется две структуры:
typedef struct {
const float s0, x1, x2, x3;
} BgFP32Versor;
typedef struct {
const double s0, x1, x2, x3;
} BgFP64Versor;
Уже в определении структур можно заметить разницу между в реализации
кватернионов и версоров: поля версоров объявлены как константы.
Это сделано намеренно, чтобы разработчик, использующий библиотеку мог считывать
данные из полей, но для изменения состояния версора прибегал к использованию
специальных функций, которые обеспечивают, чтобы модуль версора был равен 1.