Добавлена вводная статья по версорам в документации
This commit is contained in:
parent
3932f83720
commit
5c80084b1e
3 changed files with 112 additions and 2 deletions
55
docs/english/Versor.md
Normal file
55
docs/english/Versor.md
Normal 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**.
|
|
@ -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
55
docs/russian/Versor.txt
Normal 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**.
|
Loading…
Add table
Add a link
Reference in a new issue