Написание документации: кватернионы и версоры
BIN
docs/media/compex_number_000.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
docs/media/compex_number_001.png
Normal file
After Width: | Height: | Size: 8 KiB |
BIN
docs/media/compex_number_002.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
docs/media/imaginary_anticommutative.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
docs/media/imaginary_anticommutative2.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
docs/media/imaginary_j.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
docs/media/imaginary_k.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
docs/media/quaternion_definition.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
docs/media/quaternion_mixed_form.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
docs/media/quaternion_result.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
docs/media/quaternion_vector4_form.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
docs/media/versor_definition.png
Normal file
After Width: | Height: | Size: 10 KiB |
|
@ -22,7 +22,7 @@ Thus there are two prefixes of types:
|
||||||
* **FP32** - means **F**loating **P**oint, **32** bit, which corresponds to the
|
* **FP32** - means **F**loating **P**oint, **32** bit, which corresponds to the
|
||||||
**float** type of the C language.
|
**float** type of the C language.
|
||||||
|
|
||||||
* **FP32** - means **F**loating **P**oint, **64** bit, which corresponds to the
|
* **FP64** - means **F**loating **P**oint, **64** bit, which corresponds to the
|
||||||
**double** type of the C language.
|
**double** type of the C language.
|
||||||
|
|
||||||
The types of structures which are based in the **float** type have **FP32** as
|
The types of structures which are based in the **float** type have **FP32** as
|
104
docs/quaternion-rus.md
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
# Кватернионы
|
||||||
|
|
||||||
|
Кватернионы - это гиперкомплексные числа, у которых имеется одна действительная
|
||||||
|
компонента и три комплексных компоненты:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Кватернион можно представлять по-разному, например, в виде кортежа
|
||||||
|
(последовательности) из четырёх чисел также как четырёхмерный вектор:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Можно представлять как пару из числа и трёхмерного вектора:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Кватернионы можно легко вывести из обычных комплексных чисел. Обычные
|
||||||
|
комлексные числа в качестве в качестве компонент имеют вещественные
|
||||||
|
числа *a* и *b*:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Но, что если представить, что компоненты *a* и *b* тоже комплексные
|
||||||
|
числа, но с другой мнимой единицей *j* вместо *i*, при этом
|
||||||
|
мнимая единица *j* имеет такие же свойства, что и *i*:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Тогда компоненты *a* и *b* можно представить следующим образом:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Если подставить их в формулу комплексного числа, то получается:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
В этом выражении наиболее интересно произведение мнимых единиц *ij*. Если
|
||||||
|
представить, что произведение антикоммутативно, то у произведения
|
||||||
|
получаются интересные свойства.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Например, если взять квадрат произведения, то получается, что оно ведёт себя
|
||||||
|
как мнимая единица:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Таким образом, произведение мнимых единиц *ij* можно обозначить новой мнимой
|
||||||
|
единицей:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
И тогда получается полноценный кватернион:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Кватернионы обладают массой интересных свойств и применений. В геометрии
|
||||||
|
основным применением является описание поворотов в трёхмерном пространстве.
|
||||||
|
|
||||||
|
Кватернионы, которые описывают поворот в трёхмерном пространстве называются
|
||||||
|
[версорами](./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.
|
|
@ -8,8 +8,8 @@ A quaternion can be viewed as a four-dimensional vector:
|
||||||
1. summation and subtraction of quaternions are same as for four-dimensional
|
1. summation and subtraction of quaternions are same as for four-dimensional
|
||||||
vectors in Euclidean space;
|
vectors in Euclidean space;
|
||||||
|
|
||||||
2. quaternions can be multiplied by real numbers the same way as four-
|
2. quaternions can be multiplied by real numbers the same way as
|
||||||
dimensional vectors;
|
four-dimensional vectors;
|
||||||
|
|
||||||
3. the modulus of a quaternion is calculated in exactly the same way as
|
3. the modulus of a quaternion is calculated in exactly the same way as
|
||||||
the modulus of a vector in four-dimensional Euclidean space;
|
the modulus of a vector in four-dimensional Euclidean space;
|
|
@ -1,20 +1,9 @@
|
||||||
# Версоры
|
# Версоры
|
||||||
|
|
||||||
Кватернионы - это гиперкомплексные числа, у которых имеется одна вещественная
|
[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых имеется одна действительная
|
||||||
компонента и три комплексных компоненты.
|
компонента и три комплексных компоненты:
|
||||||
|
|
||||||
Кватернион можно рассмотреть как четырёхмерный вектор:
|

|
||||||
1. сложение и вычитание кватернионов точно такое же, как и у обычных четрыхмерных
|
|
||||||
векторов в евклидовом пространстве;
|
|
||||||
|
|
||||||
2. кватернионы точно также как и четрыхмерные векторы могут быть умножены или
|
|
||||||
разделены на число;
|
|
||||||
|
|
||||||
3. модуль кватерниона вычисляется точно также как модуль вектора в четырёхмерном
|
|
||||||
евклидовом пространстве;
|
|
||||||
|
|
||||||
4. а умножение кватернионов можно представить как произведение матрицы 4x4 на
|
|
||||||
четырёхмерный вектор.
|
|
||||||
|
|
||||||
Кватернион имеет четыре степени свободы. Но если ввести ограничение в виде
|
Кватернион имеет четыре степени свободы. Но если ввести ограничение в виде
|
||||||
требования, чтобы модуль этого кватерниона был равен единице, то такое множество
|
требования, чтобы модуль этого кватерниона был равен единице, то такое множество
|
||||||
|
@ -29,7 +18,10 @@
|
||||||
|
|
||||||
Для кватерниона единичной длины существует специальное название: версор.
|
Для кватерниона единичной длины существует специальное название: версор.
|
||||||
|
|
||||||
Версоры - это кватернионы единичной длины.
|
Версоры - это кватернионы единичной длины. И к определению кватерниона необходимо
|
||||||
|
просто добавить уравнение:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Версоры в библиотеке
|
## Версоры в библиотеке
|
||||||
|
|