bgc-c/docs/quaternion-rus.md

3.3 KiB
Raw Blame History

Кватернионы

Кватернионы — это гиперкомплексные числа, которые расширяют понятие комплексных чисел. Они состоят из одной действительной компоненты и трёх мнимых компонент:

q = w + ix + jy + kz

где:

  • w, x, y, z ∈ R - действительные числа
  • i, j, k - мнимые единицы, удовлетворяющие следующим условиям:
    • i2 = j2 = k2 = ijk = -1

Кватернионы были открыты математиком Уильямом Гамильтоном и представлены публике в 1843 году. Они нашли широкое применение в компьютерной графике, робототехнике и физике для описания поворотов в трёхмерном пространстве.

Реализация кватернионов в библиотеке

Библиотека предоставляет две реализации кватернионов:

  1. Кватернионы общего назначения

    • Поддерживают все основные операции (сложение, вычитание, умножение на скаляр и т.д.).
  2. Версоры:

    • Специализированные кватернионы, модуль которых всегда равен единице.
    • Подходят для описания поворотов в трёхмерном пространстве.
    • Не поддерживают операции сложения, вычитания и умножения на скаляр.

Кватернионы общего назначения также можно использовать для представления поворотов в трёхмерном пространстве. Но разработчик, использующий кватернионы для описания поворотов, сам должен следить за тем, чтобы модули кватернионов не становились меньше величины погрешности и не принимали значение NaN (не число).

Структуры для кватернионов

Кватернионы общего назначения

    typedef struct {
        float s0, x1, x2, x3;
    } BgcQuaternionFP32;

    typedef struct {
        double s0, x1, x2, x3;
    } BgcQuaternionFP64;

Версоры

    typedef struct {
        const float s0, x1, x2, x3;
    } BgcVersorFP32;

    typedef struct {
        const double s0, x1, x2, x3;
    } BgcVersorFP64;

Поля:

  • s0 - это вещественная часть версора.
  • x1, x2, x3 - Мнимые компоненты версора.

Поля версоров объявлены как const, чтобы разработчик использовал функции библиотеки для работы с версорами, а не изменял их напрямую.

Поля кватернионов разработчик, использующий библиотеку, может менять свободно.