diff --git a/docs/english/Angle.md b/docs/angle-eng.md similarity index 100% rename from docs/english/Angle.md rename to docs/angle-eng.md diff --git a/docs/russian/Angle.md b/docs/angle-rus.md similarity index 100% rename from docs/russian/Angle.md rename to docs/angle-rus.md diff --git a/docs/media/compex_number_000.png b/docs/media/compex_number_000.png new file mode 100644 index 0000000..5e7f8fe Binary files /dev/null and b/docs/media/compex_number_000.png differ diff --git a/docs/media/compex_number_001.png b/docs/media/compex_number_001.png new file mode 100644 index 0000000..27f682b Binary files /dev/null and b/docs/media/compex_number_001.png differ diff --git a/docs/media/compex_number_002.png b/docs/media/compex_number_002.png new file mode 100644 index 0000000..ea0ae05 Binary files /dev/null and b/docs/media/compex_number_002.png differ diff --git a/docs/media/imaginary_anticommutative.png b/docs/media/imaginary_anticommutative.png new file mode 100644 index 0000000..dcd5e02 Binary files /dev/null and b/docs/media/imaginary_anticommutative.png differ diff --git a/docs/media/imaginary_anticommutative2.png b/docs/media/imaginary_anticommutative2.png new file mode 100644 index 0000000..13d8add Binary files /dev/null and b/docs/media/imaginary_anticommutative2.png differ diff --git a/docs/media/imaginary_j.png b/docs/media/imaginary_j.png new file mode 100644 index 0000000..4039e1b Binary files /dev/null and b/docs/media/imaginary_j.png differ diff --git a/docs/media/imaginary_k.png b/docs/media/imaginary_k.png new file mode 100644 index 0000000..760beae Binary files /dev/null and b/docs/media/imaginary_k.png differ diff --git a/docs/media/quaternion_definition.png b/docs/media/quaternion_definition.png new file mode 100644 index 0000000..7ae0127 Binary files /dev/null and b/docs/media/quaternion_definition.png differ diff --git a/docs/media/quaternion_mixed_form.png b/docs/media/quaternion_mixed_form.png new file mode 100644 index 0000000..5118430 Binary files /dev/null and b/docs/media/quaternion_mixed_form.png differ diff --git a/docs/media/quaternion_result.png b/docs/media/quaternion_result.png new file mode 100644 index 0000000..d14d820 Binary files /dev/null and b/docs/media/quaternion_result.png differ diff --git a/docs/media/quaternion_vector4_form.png b/docs/media/quaternion_vector4_form.png new file mode 100644 index 0000000..c2df276 Binary files /dev/null and b/docs/media/quaternion_vector4_form.png differ diff --git a/docs/media/versor_definition.png b/docs/media/versor_definition.png new file mode 100644 index 0000000..61aa61a Binary files /dev/null and b/docs/media/versor_definition.png differ diff --git a/docs/english/Prefixes.md b/docs/prefixes-eng.md similarity index 96% rename from docs/english/Prefixes.md rename to docs/prefixes-eng.md index 4d0292a..c5899b3 100644 --- a/docs/english/Prefixes.md +++ b/docs/prefixes-eng.md @@ -22,7 +22,7 @@ Thus there are two prefixes of types: * **FP32** - means **F**loating **P**oint, **32** bit, which corresponds to the **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. The types of structures which are based in the **float** type have **FP32** as diff --git a/docs/russian/Prefixes.md b/docs/prefixes-rus.md similarity index 100% rename from docs/russian/Prefixes.md rename to docs/prefixes-rus.md diff --git a/docs/quaternion-rus.md b/docs/quaternion-rus.md new file mode 100644 index 0000000..f99be83 --- /dev/null +++ b/docs/quaternion-rus.md @@ -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. \ No newline at end of file diff --git a/docs/english/Vector2.md b/docs/vector2-eng.md similarity index 100% rename from docs/english/Vector2.md rename to docs/vector2-eng.md diff --git a/docs/russian/Vector2.md b/docs/vector2-rus.md similarity index 100% rename from docs/russian/Vector2.md rename to docs/vector2-rus.md diff --git a/docs/english/Versor.md b/docs/versor-eng.md similarity index 98% rename from docs/english/Versor.md rename to docs/versor-eng.md index 2036a9a..219a8f0 100644 --- a/docs/english/Versor.md +++ b/docs/versor-eng.md @@ -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 vectors in Euclidean space; -2. quaternions can be multiplied by real numbers the same way as four- -dimensional vectors; +2. quaternions can be multiplied by real numbers the same way as +four-dimensional vectors; 3. the modulus of a quaternion is calculated in exactly the same way as the modulus of a vector in four-dimensional Euclidean space; diff --git a/docs/russian/Versor.txt b/docs/versor-rus.md similarity index 70% rename from docs/russian/Versor.txt rename to docs/versor-rus.md index cbc71f7..472ff98 100644 --- a/docs/russian/Versor.txt +++ b/docs/versor-rus.md @@ -1,20 +1,9 @@ # Версоры -Кватернионы - это гиперкомплексные числа, у которых имеется одна вещественная -компонента и три комплексных компоненты. +[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых имеется одна действительная +компонента и три комплексных компоненты: -Кватернион можно рассмотреть как четырёхмерный вектор: -1. сложение и вычитание кватернионов точно такое же, как и у обычных четрыхмерных -векторов в евклидовом пространстве; - -2. кватернионы точно также как и четрыхмерные векторы могут быть умножены или -разделены на число; - -3. модуль кватерниона вычисляется точно также как модуль вектора в четырёхмерном -евклидовом пространстве; - -4. а умножение кватернионов можно представить как произведение матрицы 4x4 на -четырёхмерный вектор. +![Определение кватерниона](./media/quaternion_definition.png) Кватернион имеет четыре степени свободы. Но если ввести ограничение в виде требования, чтобы модуль этого кватерниона был равен единице, то такое множество @@ -29,7 +18,10 @@ Для кватерниона единичной длины существует специальное название: версор. -Версоры - это кватернионы единичной длины. +Версоры - это кватернионы единичной длины. И к определению кватерниона необходимо +просто добавить уравнение: + +![Определение версора](./media/versor_definition.png) ## Версоры в библиотеке