Добавлена вводная статья по версорам в документации

This commit is contained in:
Andrey Pokidov 2024-11-23 04:04:29 +07:00
parent 3932f83720
commit 5c80084b1e
3 changed files with 112 additions and 2 deletions

55
docs/english/Versor.md Normal file
View file

@ -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**.

View file

@ -21,10 +21,10 @@ bg_fp64_matrix3x3_subtract.
Поэтому в библиотеке есть два префикса типа: Поэтому в библиотеке есть два префикса типа:
* **FP32** - означает **F**loating **P**oint **32** bit, то есть, число с * **FP32** - означает **F**loating **P**oint **32** bit, то есть, число с
плавающей запятой, 32 бита, что соответствует типу float языка Си. плавающей запятой, 32 бита, что соответствует типу **float** языка Си.
* **FP64** - означает **F**loating **P**oint **64** bit, то есть, число с * **FP64** - означает **F**loating **P**oint **64** bit, то есть, число с
плавающей запятой, 64 бита, что соответствует типу double языка Си. плавающей запятой, 64 бита, что соответствует типу **double** языка Си.
Типы структур, использующие тип **float** имеют префикс типа в виде **FP32**: Типы структур, использующие тип **float** имеют префикс типа в виде **FP32**:
BgFP32Vector3, BgFP32Matrix3x2, BgFP32Quaternion BgFP32Vector3, BgFP32Matrix3x2, BgFP32Quaternion

55
docs/russian/Versor.txt Normal file
View file

@ -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**.