diff --git a/docs/english/Versor.md b/docs/english/Versor.md new file mode 100644 index 0000000..2036a9a --- /dev/null +++ b/docs/english/Versor.md @@ -0,0 +1,55 @@ +# Versors + +Quaternions are complex numbers which have one real component and three +imaginary components. + +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; + +3. the modulus of a quaternion is calculated in exactly the same way as +the modulus of a vector in four-dimensional Euclidean space; + +4. the multiplication of two quaternions can be represented as the product +of a 4x4 matrix and a four-dimensional vector. + +A quaternion has four degrees of freedom. But if we introduce a constraint in +the form of a requirement that the modulus of this quaternion be equal to one, +then such a set of quaternions will have only three degrees of freedom. + +These quaternions represent a sphere of radius 1 in four-dimensional space. +The "surface" of this sphere has a dimension equal to three. + +Quaternions of unit length describe rotations in three-dimensional space very +well. And this is logical, because rotations in three-dimensional space have +three degrees of freedom, just like a sphere in four-dimensional space. + +There is a special name for a quaternion of unit length: versor. + +Versors are quaternions of unit length. + +## Implementation of versors in the library + +The library has a separate implementation for versors in the form of special +structures and a set of functions that keep the modulus of a versorclose to one. + +There are two structures for versors: **BgFP32Versor** and **BgFP64Versor**: + + typedef struct { + const float s0, x1, x2, x3; + } BgFP32Versor; + + typedef struct { + const double s0, x1, x2, x3; + } BgFP64Versor; + +The fields are deliberately declared const so that a developer using these +structures is not tempted to change the values ​​of the fields directly. + +With these structures, it is better to use special functions that allow you +to save new values ​​in the structure fields of **BgFP32Versor** and +**BgFP64Versor**. diff --git a/docs/russian/Prefixes.md b/docs/russian/Prefixes.md index 7073508..03728fc 100644 --- a/docs/russian/Prefixes.md +++ b/docs/russian/Prefixes.md @@ -21,10 +21,10 @@ bg_fp64_matrix3x3_subtract. Поэтому в библиотеке есть два префикса типа: * **FP32** - означает **F**loating **P**oint **32** bit, то есть, число с -плавающей запятой, 32 бита, что соответствует типу float языка Си. +плавающей запятой, 32 бита, что соответствует типу **float** языка Си. * **FP64** - означает **F**loating **P**oint **64** bit, то есть, число с -плавающей запятой, 64 бита, что соответствует типу double языка Си. +плавающей запятой, 64 бита, что соответствует типу **double** языка Си. Типы структур, использующие тип **float** имеют префикс типа в виде **FP32**: BgFP32Vector3, BgFP32Matrix3x2, BgFP32Quaternion diff --git a/docs/russian/Versor.txt b/docs/russian/Versor.txt new file mode 100644 index 0000000..cbc71f7 --- /dev/null +++ b/docs/russian/Versor.txt @@ -0,0 +1,55 @@ +# Версоры + +Кватернионы - это гиперкомплексные числа, у которых имеется одна вещественная +компонента и три комплексных компоненты. + +Кватернион можно рассмотреть как четырёхмерный вектор: +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**. \ No newline at end of file