bgc-c/docs/versor-rus.md

80 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Версоры
[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых имеется одна действительная компонента и три мнимых компоненты:
q = w + ix + jy + kz, где w - действительная компонена, x, y, z - мнимые компоненты, а i, j, k - мнимые единицы
i<sup>2</sup> = j<sup>2</sup> = k<sup>2</sup> = ijk = -1
w, x, y, z &isin; R
Кватернионы были открыты математиком Уильямом Гамильтоном и представлены публике в 1843 году. Позже Гамильтон предложил особый класс кватернионов, которые назвал версорами.
## Что такое версор?
Версор - это кватернион, модуль которого равен единице. То есть, к формулам, определяющим кватернионы, необходимо добавить условие, что модуль кватерниона равен единице.
К формулам, определяющим кватернион достаточно добавить уравнение равенства модуля единице:
q = w + ix + jy + kz
i<sup>2</sup> = j<sup>2</sup> = k<sup>2</sup> = -1
w, x, y, z &isin; R
w<sup>2</sup> + x<sup>2</sup> + y<sup>2</sup> + z<sup>2</sup> = 1
Название происходит от латинского глагола "versare", означающего "поворачивать", "вращать", к которому добавлено латинское окончание -or, обозначающее субъект, выполняющий действие. Дословно латинское слово "versor" можно перевести как "вращатель" или "поворачиватель".
## Применение версоров
Версоры оказались отличным инструментом для описания поворотов в трёхмерном пространстве. Для комбинации двух последовательных поворотов полезной оказалась операция умножения кватернионов, а для получения обратного поворота - операция взятия сопряжённого кватерниона.
При умножении двух версоров (кватернионов единичной длины) и при взятии сопряжённого версора результат также будет версором, то есть кватернионом единичной длины.
Сложение и вычитание двух кватернионов, а также умножение и деление кватерниона на число оказались не нужны для описания поворотов в трёхмерном пространстве.
Несмотря на то, что версоры как класс кватернионов были предложены ещё Уильямом Гамильтоном для описаний поворотов ещё в середине 19 века, в русскоязычной литературе термин "версор" встречается настолько редко, что можно сказать, что не употребляется.
## Преимущества версоров
1. **Сохранение модуля**: Версоры сохраняют модуль, равный единице, что предотвращает их вырождение.
2. **Эффективность**: Библиотека BGC автоматически нормализует версоры только при необходимости, что позволяет избежать лишних вычислений.
## Реализация в библиотеке BGC
Библиотека BGC предоставляет отдельную реализацию для версоров в виде структур и функций, которые поддерживают модуль версоров близким к единице.
### Структуры
```c
typedef struct {
const float s0, x1, x2, x3;
} BgcVersorFP32;
typedef struct {
const double s0, x1, x2, x3;
} BgcVersorFP64;
```
- s0 - это вещественная часть версора.
- x1, x2, x3 - Мнимые компоненты версора.
## Операции с версорами
- [Сброс состояния (reset)](./versor-reset-rus.md)
- [Указание значений компонент (set values)](./versor-set-values-rus.md)
- Копирование значений компонент (copy)
- Обмен значений компонент (swap)
- Построение на основе поворота (set turn)
- Проверка на отсутствие поворота (is idle)
- Преобразование типа (convert)
- Сокращение поворота (shorten)
- Инверсия (invert)
- Комбинирование (combine)
- Получение описание поворота (get rotation)
- Получение матрицы поворота (get rotation matrix)
- Получение матрицы обратного поворота (get reverse matrix)
- Поворот вектора (turn vector)
- Обратный поворот вектора (turn vector back)
- Сравнение (are close)