bgc-c/docs/quaternion-rus.md

104 lines
No EOL
5.8 KiB
Markdown
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.

# Кватернионы
Кватернионы - это гиперкомплексные числа, у которых имеется одна действительная
компонента и три комплексных компоненты:
![Определение кватерниона](./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.