exponenta event banner

время,. *

Элементное кватернионное умножение

Синтаксис

Описание

пример

quatC = A.*B возвращает поэлементное кватернионное умножение массивов кватернионов.

Для создания операторов вращения можно использовать умножение кватерниона:

  • Чтобы составить последовательность поворотов кадров, умножьте кватернионы в том же порядке, что и нужная последовательность поворотов. Например, чтобы применить p кватернион, а затем q кватернион, умножьте в порядке pq. Оператор вращения становится (pq) ∗v (pq), где v представляет объект для вращения в форме кватерниона. * представляет сопряжение.

  • Чтобы составить последовательность точечных вращений, умножьте кватернионы в обратном порядке желаемой последовательности вращений. Например, для применения p кватерниона с последующим q кватернионом умножайте в обратном порядке, qp. Оператор вращения становится (qp) v (qp) ∗.

Примеры

свернуть все

Создайте два вектора, A и Bи умножить их элемент на элемент.

A = quaternion([1:4;5:8]);
B = A;
C = A.*B
C=2×1 quaternion array
     -28 +   4i +   6j +   8k
    -124 +  60i +  70j +  80k

Создайте два массива 3 на 3, A и Bи умножить их элемент на элемент.

A = reshape(quaternion(randn(9,4)),3,3);
B = reshape(quaternion(randn(9,4)),3,3);
C = A.*B
C=3×3 quaternion array
     0.60169 +  2.4332i -  2.5844j + 0.51646k    -0.49513 +  1.1722i +  4.4401j -   1.217k      2.3126 + 0.16856i +  1.0474j -  1.0921k
     -4.2329 +  2.4547i +  3.7768j + 0.77484k    -0.65232 - 0.43112i -  1.4645j - 0.90073k     -1.8897 - 0.99593i +  3.8331j + 0.12013k
     -4.4159 +  2.1926i +  1.9037j -  4.0303k     -2.0232 +  0.4205i - 0.17288j +  3.8529k     -2.9137 -  5.5239i -  1.3676j +  3.0654k

Заметим, что кватернионное умножение не коммутативно:

isequal(C,B.*A)
ans = logical
   0

Создание вектора строки a и вектор-столбец b, затем умножить их. Вектор строки 1 на 3 и вектор столбца 4 на 1 объединяются для получения матрицы 4 на 3 со всеми комбинациями умноженных элементов.

a = [zeros('quaternion'),ones('quaternion'),quaternion(randn(1,4))]
a=1×3 quaternion array
           0 +       0i +       0j +       0k           1 +       0i +       0j +       0k     0.53767 +  1.8339i -  2.2588j + 0.86217k

b = quaternion(randn(4,4))
b=4×1 quaternion array
      0.31877 +   3.5784i +   0.7254j -  0.12414k
      -1.3077 +   2.7694i - 0.063055j +   1.4897k
     -0.43359 -   1.3499i +  0.71474j +    1.409k
      0.34262 +   3.0349i -  0.20497j +   1.4172k

a.*b
ans=4×3 quaternion array
            0 +        0i +        0j +        0k      0.31877 +   3.5784i +   0.7254j -  0.12414k      -4.6454 +   2.1636i +   2.9828j +   9.6214k
            0 +        0i +        0j +        0k      -1.3077 +   2.7694i - 0.063055j +   1.4897k      -7.2087 -   4.2197i +   2.5758j +   5.8136k
            0 +        0i +        0j +        0k     -0.43359 -   1.3499i +  0.71474j +    1.409k       2.6421 -     5.32i -   2.3841j -   1.3547k
            0 +        0i +        0j +        0k      0.34262 +   3.0349i -  0.20497j +   1.4172k      -7.0663 -  0.76439i -  0.86648j +   7.5369k

Входные аргументы

свернуть все

Массив для умножения, определяемый как кватернион, массив кватернионов, вещественный скаляр или массив вещественных чисел.

A и B должны иметь совместимые размеры. В простейших случаях они могут быть одного размера или скаляра. Два входа имеют совместимые размеры, если для каждого размера размеры входов одинаковы или один из них равен 1.

Типы данных: quaternion | single | double

Массив для умножения, определяемый как кватернион, массив кватернионов, вещественный скаляр или массив вещественных чисел.

A и B должны иметь совместимые размеры. В простейших случаях они могут быть одного размера или скаляра. Два входа имеют совместимые размеры, если для каждого размера размеры входов одинаковы или один из них равен 1.

Типы данных: quaternion | single | double

Выходные аргументы

свернуть все

Произведение кватерниона, возвращаемое как скаляр, вектор, матрица или многомерный массив.

Типы данных: quaternion

Алгоритмы

свернуть все

Умножение кватерниона на действительный скаляр

Учитывая кватернион,

q = aq + bqi + cqj + dqk,

произведение q и вещественного скаляра β равно

βq = βaq + βbqi + βcqj + βdqk

Умножение кватерниона на скаляр кватерниона

Определение базовых элементов для кватернионов,

i2 = j2 = k2 = ijk = -1,

может быть расширен для заполнения таблицы, суммирующей умножение базисных элементов кватерниона:

 1яjk
11яjk
яя−1k− j
jj− k−1я
kkj− i−1

При чтении таблицы сначала считываются строки, например: ij = k и ji = − k.

Учитывая два кватерниона, q = aq + bqi + cqj + dqk и p = ap + bpi + cpj + dpk, умножение может быть расширено следующим образом:

z = pq = (ap + bpi + cpj + dpk) (aq + bqi + cqj + dqk) = apaq + apbqi + apcqj + apdqk + bpbqi2 + bpcqij + bpdqik + cpaqj + cpbqji + cpcqj2 + cpdqjk + dqk

Уравнение можно упростить с помощью таблицы умножения кватернионов.

z = pq = apaq + apbqi + apcqj + apdqk + bpaqi bpbq + bpcqk bpdqj + cpaqj cpbqk cpcq + cpdqi + dpaqk + dpbqj − dpcqi − dpdq

Ссылки

[1] Койперс, Джек Б. Кватернионы и последовательности вращения: праймер с приложениями для орбит, аэрокосмической и виртуальной реальности. Принстон, Нью-Джерси: Princeton University Press, 2007.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

Функции

Объекты

Представлен в R2018a