Улучшение документации по кватернионам и версорам
This commit is contained in:
parent
a3ff67792d
commit
72b6690ad6
4 changed files with 92 additions and 165 deletions
|
@ -1,70 +1,35 @@
|
|||
# Кватернионы
|
||||
|
||||
Кватернионы - это гиперкомплексные числа, у которых имеется одна действительная
|
||||
компонента и три комплексных компоненты:
|
||||
Кватернионы — это гиперкомплексные числа, которые расширяют понятие комплексных чисел. Они состоят из одной действительной компоненты и трёх мнимых компонент:
|
||||
|
||||

|
||||
q = w + ix + jy + kz
|
||||
|
||||
Где *q* - это кватернион, *w*, *x*, *y* и *z* - это действительные числа, а *i*,
|
||||
*j* и *k* - это мнимые единицы.
|
||||
где:
|
||||
|
||||
Кватернион можно представлять по-разному, например, в виде кортежа
|
||||
(последовательности) из четырёх чисел:
|
||||
- w, x, y, z ∈ R - действительные числа
|
||||
- i, j, k - мнимые единицы, удовлетворяющие следующим условиям:
|
||||
- i<sup>2</sup> = j<sup>2</sup> = k<sup>2</sup> = ijk = -1
|
||||
|
||||

|
||||
|
||||
В такой форме кватернион напоминает четырёхмерный вектор. И кватернионы
|
||||
действительно имеют ряд сходств с четрырёхмерными векторами, например:
|
||||
|
||||
* сложение и вычитание кватернионов такие же, как и у четырёхмерных векторов;
|
||||
* умножение и деление кватериона на действительное число такие же как и для
|
||||
четырёхмерного вектора;
|
||||
* взятие модуля кватерниона вычисляется также как и для четырёхмерного вектора.
|
||||
|
||||
Но произведение кватернионов совершенно иное, чем скалярное произведение двух
|
||||
четырёхмерных векторов.
|
||||
|
||||
Ещё одним способом представления кватерниона является пара из действительного
|
||||
числа и трёхмерного вектора:
|
||||
|
||||

|
||||
|
||||
Кватернионы обладают массой интересных свойств и применений. В геометрии
|
||||
основным применением является описание поворотов в трёхмерном евклидовом
|
||||
пространстве.
|
||||
|
||||
Обычно для представления поворотов используются кватернионы с модулем, равным
|
||||
единице. Такие кватернионы называются [версорами](./versor-rus.md).
|
||||
Кватернионы были открыты математиком Уильямом Гамильтоном и представлены публике в 1843 году. Они нашли широкое применение в компьютерной графике, робототехнике и физике для описания поворотов в трёхмерном пространстве.
|
||||
|
||||
## Реализация кватернионов в библиотеке
|
||||
|
||||
В библиотеке кватернионы реализованы в двух вариантах:
|
||||
* в виде обычных кватернионов
|
||||
* в виде веросоров
|
||||
Библиотека предоставляет две реализации кватернионов:
|
||||
1. **Кватернионы общего назначения**
|
||||
- Поддерживают все основные операции (сложение, вычитание, умножение на скаляр и т.д.).
|
||||
|
||||
Главное отличие в реализации кватернионов и версоров том, что реализация
|
||||
версоров ориентирована именно для представления поворотов в трёхмерном
|
||||
евклидовом пространстве пространстве, в то время как кватернионы имеют более
|
||||
общую реализацию.
|
||||
2. **Версоры**:
|
||||
- Специализированные кватернионы, модуль которых всегда равен единице.
|
||||
- Подходят для описания поворотов в трёхмерном пространстве.
|
||||
- Не поддерживают операции сложения, вычитания и умножения на скаляр.
|
||||
|
||||
Версоры нельзя складывать, вычитать. Также версоры нельзя умножать и делить на
|
||||
вещественные числа. Но кватернионы можно складывать, вычитать, а также умножать
|
||||
и делить на вещественное число.
|
||||
Кватернионы общего назначения также можно использовать для представления поворотов в трёхмерном пространстве. Но разработчик, использующий кватернионы для описания поворотов, сам должен следить за тем, чтобы модули кватернионов не становились меньше величины погрешности и не принимали значение NaN (не число).
|
||||
|
||||
Версоры можно комбинировать. Операция комбинирования версоров является обычным
|
||||
произведением кватернионов. Единственное отличие в том, что операция
|
||||
комбинирования версоров обеспечивает, чтобы результат комбинации также имел
|
||||
модуль, равный единицы.
|
||||
### Структуры для кватернионов
|
||||
|
||||
Все функции версоров, которые менияют состояние версора, обеспечивают, чтобы
|
||||
модуль версора оставался близким к единице.
|
||||
|
||||
Да, модуль версора очень близок к единице, потому что числа с плавающей запятой
|
||||
не совершенны и имеют небольшие погрешности. Поэтому модуль не всегда равен
|
||||
единице, но очень близок к единице.
|
||||
|
||||
Для описаия кватернионов есть две структуры:
|
||||
#### Кватернионы общего назначения
|
||||
|
||||
```c
|
||||
typedef struct {
|
||||
float s0, x1, x2, x3;
|
||||
} BgcQuaternionFP32;
|
||||
|
@ -72,10 +37,11 @@
|
|||
typedef struct {
|
||||
double s0, x1, x2, x3;
|
||||
} BgcQuaternionFP64;
|
||||
```
|
||||
|
||||
#### Версоры
|
||||
|
||||
Для описания версоров также имеется две структуры:
|
||||
|
||||
```c
|
||||
typedef struct {
|
||||
const float s0, x1, x2, x3;
|
||||
} BgcVersorFP32;
|
||||
|
@ -83,17 +49,12 @@
|
|||
typedef struct {
|
||||
const double s0, x1, x2, x3;
|
||||
} BgcVersorFP64;
|
||||
```
|
||||
|
||||
Уже в определении структур можно заметить разницу между в реализации
|
||||
кватернионов и версоров: поля версоров объявлены как константы, в то время как
|
||||
поля кватерниона не являются константами.
|
||||
Поля:
|
||||
- s0 - это вещественная часть версора.
|
||||
- x1, x2, x3 - Мнимые компоненты версора.
|
||||
|
||||
Это сделано намеренно, чтобы побудить разработчика использовать функции для
|
||||
версоров, вместо того, чтобы задавать значения полей напрямую, потому что
|
||||
функции версоров обеспечивают, чтобы модуль версора был равен единице.
|
||||
|
||||
В то же время, разработчик может обращаться к полям версора, чтобы получить
|
||||
значения этих полей для своих целей, например, чтобы сделать какие-либо
|
||||
вычисления или сохранить состояние версора в файле, или передать версор через
|
||||
подключение по компьютерной сети.
|
||||
Поля версоров объявлены как const, чтобы разработчик использовал функции библиотеки для работы с версорами, а не изменял их напрямую.
|
||||
|
||||
Поля кватернионов разработчик, использующий библиотеку, может менять свободно.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue