Развитие документации по версорам
This commit is contained in:
parent
421ca77cb4
commit
b5aa39c145
2 changed files with 150 additions and 4 deletions
|
@ -1,7 +1,7 @@
|
|||
# Версоры
|
||||
|
||||
[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых имеется одна действительная
|
||||
компонента и три комплексных компоненты:
|
||||
[Кватернионы](./quaternion-rus.md) - это гиперкомплексные числа, у которых
|
||||
имеется одна действительная компонента и три комплексных компоненты:
|
||||
|
||||

|
||||
|
||||
|
@ -23,6 +23,45 @@
|
|||
|
||||

|
||||
|
||||
Несмотря на то, что версоны как класс кватернионов были предложены ещё Уильямом
|
||||
Гамильтоном для описаний поворотв, в русскоязычной литературе термин "версор",
|
||||
можно сказать, что не употребляется.
|
||||
|
||||
## Преимущества версоров над кватернионами
|
||||
|
||||
Основным преимуществом версоров заключается в том, что они не деградируют.
|
||||
|
||||
Если умножить два кватерниона, модули которых равны единице, то результатом
|
||||
будет также кватернион с модулем, равным единице. В то время как произведение
|
||||
двух кватернионов, у которых модули отличаются от единицы, даст кватернион,
|
||||
модуль которого, скорее всего, также будет отличаться от единицы. А произведение
|
||||
ряда кватернионов может дать кватернион, у которого модуль будет близок к нулю.
|
||||
|
||||
Таком образом, модуль версора всегда равен единице в отличие от обычного
|
||||
кватерниона.
|
||||
|
||||
На практике модуль веросна не всегда равен единице, но близок к единице из-за
|
||||
наличия погрешности типов **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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue