Развитие документации по версорам

This commit is contained in:
Andrey Pokidov 2025-02-06 20:06:06 +07:00
parent 421ca77cb4
commit b5aa39c145
2 changed files with 150 additions and 4 deletions

View file

@ -1,7 +1,7 @@
# Версоры
[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых имеется одна действительная
компонента и три комплексных компоненты:
[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых
имеется одна действительная компонента и три комплексных компоненты:
![Определение кватерниона](./media/quaternion_definition.png)
@ -23,6 +23,45 @@
![Определение версора](./media/versor_definition.png)
Несмотря на то, что версоны как класс кватернионов были предложены ещё Уильямом
Гамильтоном для описаний поворотв, в русскоязычной литературе термин "версор",
можно сказать, что не употребляется.
## Преимущества версоров над кватернионами
Основным преимуществом версоров заключается в том, что они не деградируют.
Если умножить два кватерниона, модули которых равны единице, то результатом
будет также кватернион с модулем, равным единице. В то время как произведение
двух кватернионов, у которых модули отличаются от единицы, даст кватернион,
модуль которого, скорее всего, также будет отличаться от единицы. А произведение
ряда кватернионов может дать кватернион, у которого модуль будет близок к нулю.
Таком образом, модуль версора всегда равен единице в отличие от обычного
кватерниона.
На практике модуль веросна не всегда равен единице, но близок к единице из-за
наличия погрешности типов **float** и **double** (**binary32** и **binary64**).
Вторым преимуществом версоров в том, что функции библиотеки берут на себя
задачу поддержания модуля версора, чтобы оно не сильно отклонялось от единицы.
Таким образом, разработчику не нужно производить нормализацию, как это пришлось
бы делать с обычными кватернионами.
Третьим преимуществом версоров является то, что функции библиотеки не всегда
производят нормализацию версоров, а только тогда, когда это необходимо.
Функции библиотеки проверяют разницу между модулем версора и единицей, и только
больше предопределенного порога (эпсилон), функция нормализует полученный
версор.
В большинстве случаев, когда входные параметры являются версорами
(нормализованными кватернионами), нет необходимости нормализовать результат
функции. Таким образом, можно избежать трудоемких операций, таких как вычисление
квадратных корней и деление. Такой подход позволяет повысить производительность
и поддерживать версоры нормализованными.
## Версоры в библиотеке
Библиотека имеет отдельную реализацию для версоров в виде специальных структур и
@ -47,3 +86,21 @@
устанавливать новые значения в поля структур **BgcVersorFP32** и
**BgcVersorFP64**.
## Операции с версорами
- Сброс состояния (reset)
- Указание значений компонент (set values)
- Копирование значений компонент (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)