Main Content

times, .*

요소별 쿼터니언 곱셈

설명

예제

quatC = A.*B는 쿼터니언 배열의 요소별 쿼터니언 곱셈을 반환합니다.

쿼터니언 곱셈을 사용하여 회전 연산자를 작성할 수 있습니다.

  • 프레임 회전의 시퀀스를 작성하려면, 원하는 회전 시퀀스의 순서와 동일하게 쿼터니언을 곱합니다. 예를 들어 p 쿼터니언을 적용한 후 q 쿼터니언을 적용하려면 순서대로 곱합니다(즉, pq). 회전 연산자는 (pq)v(pq)가 됩니다. 여기서 v는 쿼터니언 형식의 회전할 객체를 나타내고 *는 켤레를 나타냅니다.

  • 점 회전의 시퀀스를 작성하려면 원하는 회전 시퀀스의 역순으로 쿼터니언을 곱합니다. 예를 들어 p 쿼터니언을 적용한 후 q 쿼터니언을 적용하려면 역순으로 곱합니다(즉, qp). 회전 연산자는 (qp)v(qp)가 됩니다.

예제

모두 축소

2개의 벡터 AB를 만들고 요소별로 곱합니다.

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

2개의 3×3 배열 AB를 만들고 요소별로 곱합니다.

A = reshape(quaternion(randn(9,4)),3,3);
B = reshape(quaternion(randn(9,4)),3,3);
C = A.*B
C = 3x3 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 = 1x3 quaternion array
           0 +       0i +       0j +       0k           1 +       0i +       0j +       0k     0.53767 +  1.8339i -  2.2588j + 0.86217k

b = quaternion(randn(4,4))
b = 4x1 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 = 4x3 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

입력 인수

모두 축소

곱할 입력값으로, quaternion 객체, 임의 차원의 quaternion 객체 배열, 실수형 스칼라 또는 임의 차원의 실수 배열로 지정됩니다. 숫자형 값은 데이터형이 single형 또는 double형이어야 합니다.

AB의 크기는 서로 호환되어야 합니다. 가장 간단한 경우는 둘이 동일한 크기이거나 한쪽이 스칼라일 때입니다. 모든 차원에서 입력값의 차원 크기가 동일하거나 그중 하나가 1인 경우 두 입력값의 크기는 호환됩니다.

곱할 입력값으로, quaternion 객체, 임의 차원의 quaternion 객체 배열, 실수형 스칼라 또는 임의 차원의 실수 배열로 지정됩니다. 숫자형 값은 데이터형이 single형 또는 double형이어야 합니다.

AB의 크기는 서로 호환되어야 합니다. 가장 간단한 경우는 둘이 동일한 크기이거나 한쪽이 스칼라일 때입니다. 모든 차원에서 입력값의 차원 크기가 동일하거나 그중 하나가 1인 경우 두 입력값의 크기는 호환됩니다.

출력 인수

모두 축소

쿼터니언 곱으로, quaternion 객체 또는 quaternion 객체 배열로 반환됩니다.

알고리즘

모두 축소

쿼터니언과 실수형 스칼라의 곱셈

쿼터니언이 다음과 같이 주어진 경우

q=aq+bqi+cqj+dqk,

q와 실수형 스칼라 β의 곱은 다음과 같습니다.

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

쿼터니언과 쿼터니언 스칼라의 곱셈

쿼터니언에 대한 기저 요소의 정의가 다음과 같은 경우

i2=j2=k2=ijk=-1,

이를 확장하여 쿼터니언 기저 요소 곱셈을 요약하는 테이블을 채울 수 있습니다.

 1ijk
11ijk
ii-1k−j
jj−k-1i
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+bpaqi+bpbqi2+bpcqij+bpdqik+cpaqj+cpbqji+cpcqj2+cpdqjk+dpaqk+dpbqki+dpcqkj+dpdqk2

쿼터니언 곱셈 테이블을 사용하여 방정식을 다음과 같이 단순화할 수 있습니다.

z=pq=apaq+apbqi+apcqj+apdqk+bpaqibpbq+bpcqkbpdqj+cpaqjcpbqkcpcq+cpdqi+dpaqk+dpbqjdpcqidpdq

참고 문헌

[1] Kuipers, Jack B. Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace, and Virtual Reality. Princeton, NJ: Princeton University Press, 2007.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2018a에 개발됨

참고 항목

함수

객체