Документация: кватернионы и версоры / Documentation: quaternions and versors
This commit is contained in:
parent
48d5a010ec
commit
d906c8a8ae
3 changed files with 126 additions and 49 deletions
|
@ -5,60 +5,36 @@
|
|||
|
||||

|
||||
|
||||
Где *q* - это кватернион, *w*, *x*, *y* и *z* - это действительные числа, а *i*,
|
||||
*j* и *k* - это мнимые единицы.
|
||||
|
||||
Кватернион можно представлять по-разному, например, в виде кортежа
|
||||
(последовательности) из четырёх чисел также как четырёхмерный вектор:
|
||||
(последовательности) из четырёх чисел:
|
||||
|
||||

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

|
||||
|
||||
Кватернионы можно легко вывести из обычных комплексных чисел. Обычные
|
||||
комлексные числа в качестве в качестве компонент имеют вещественные
|
||||
числа *a* и *b*:
|
||||
|
||||

|
||||
|
||||
Но, что если представить, что компоненты *a* и *b* тоже комплексные
|
||||
числа, но с другой мнимой единицей *j* вместо *i*, при этом
|
||||
мнимая единица *j* имеет такие же свойства, что и *i*:
|
||||
|
||||

|
||||
|
||||
Тогда компоненты *a* и *b* можно представить следующим образом:
|
||||
|
||||

|
||||
|
||||
Если подставить их в формулу комплексного числа, то получается:
|
||||
|
||||

|
||||
|
||||
В этом выражении наиболее интересно произведение мнимых единиц *ij*. Если
|
||||
представить, что произведение антикоммутативно, то у произведения
|
||||
получаются интересные свойства.
|
||||
|
||||

|
||||
|
||||
Например, если взять квадрат произведения, то получается, что оно ведёт себя
|
||||
как мнимая единица:
|
||||
|
||||

|
||||
|
||||
Таким образом, произведение мнимых единиц *ij* можно обозначить новой мнимой
|
||||
единицей:
|
||||
|
||||

|
||||
|
||||
И тогда получается полноценный кватернион:
|
||||
|
||||

|
||||
|
||||
Кватернионы обладают массой интересных свойств и применений. В геометрии
|
||||
основным применением является описание поворотов в трёхмерном пространстве.
|
||||
основным применением является описание поворотов в трёхмерном евклидовом
|
||||
пространстве.
|
||||
|
||||
Кватернионы, которые описывают поворот в трёхмерном пространстве называются
|
||||
[версорами](./versor-rus.md).
|
||||
Обычно для представления поворотов используются кватернионы с модулем, равным
|
||||
единице. Такие кватернионы называются [версорами](./versor-rus.md).
|
||||
|
||||
## Реализация кватернионов в библиотеке
|
||||
|
||||
|
@ -98,7 +74,14 @@
|
|||
} BgFP64Versor;
|
||||
|
||||
Уже в определении структур можно заметить разницу между в реализации
|
||||
кватернионов и версоров: поля версоров объявлены как константы.
|
||||
Это сделано намеренно, чтобы разработчик, использующий библиотеку мог считывать
|
||||
данные из полей, но для изменения состояния версора прибегал к использованию
|
||||
специальных функций, которые обеспечивают, чтобы модуль версора был равен 1.
|
||||
кватернионов и версоров: поля версоров объявлены как константы, в то время как
|
||||
поля кватерниона не являются константами.
|
||||
|
||||
Это сделано намеренно, чтобы побудить разработчика использовать функции для
|
||||
версоров, вместо того, чтобы задавать значения полей напрямую, потому что
|
||||
функции версоров обеспечивают, чтобы модуль версора был равен единице.
|
||||
|
||||
В то же время, разработчик может обращаться к полям версора, чтобы получить
|
||||
значения этих полей для своих целей, например, чтобы сохранить значение
|
||||
версора в файле или передать по сети.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue