times, .*
설명
는 쿼터니언 배열의 요소별 쿼터니언 곱셈을 반환합니다.quatC
= A
.*B
쿼터니언 곱셈을 사용하여 회전 연산자를 작성할 수 있습니다.
프레임 회전의 시퀀스를 작성하려면, 원하는 회전 시퀀스의 순서와 동일하게 쿼터니언을 곱합니다. 예를 들어 p 쿼터니언을 적용한 후 q 쿼터니언을 적용하려면 순서대로 곱합니다(즉, pq). 회전 연산자는 가 됩니다. 여기서 v는 쿼터니언 형식의 회전할 객체를 나타내고 *는 켤레를 나타냅니다.
점 회전의 시퀀스를 작성하려면 원하는 회전 시퀀스의 역순으로 쿼터니언을 곱합니다. 예를 들어 p 쿼터니언을 적용한 후 q 쿼터니언을 적용하려면 역순으로 곱합니다(즉, qp). 회전 연산자는 가 됩니다.
예제
2개의 쿼터니언 벡터 곱하기
2개의 벡터 A
와 B
를 만들고 요소별로 곱합니다.
A = quaternion([1:4;5:8]); B = A; C = A.*B
C = 2x1 quaternion array
-28 + 4i + 6j + 8k
-124 + 60i + 70j + 80k
2개의 쿼터니언 배열 곱하기
2개의 3×3 배열 A
와 B
를 만들고 요소별로 곱합니다.
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
입력 인수
A
— 곱할 입력값
quaternion
객체 | quaternion
객체로 구성된 배열 | 실수형 스칼라 | 실수로 구성된 배열
곱할 입력값으로, quaternion
객체, 임의 차원의 quaternion
객체 배열, 실수형 스칼라 또는 임의 차원의 실수 배열로 지정됩니다. 숫자형 값은 데이터형이 single
형 또는 double
형이어야 합니다.
A
와 B
의 크기는 서로 호환되어야 합니다. 가장 간단한 경우는 둘이 동일한 크기이거나 한쪽이 스칼라일 때입니다. 모든 차원에서 입력값의 차원 크기가 동일하거나 그중 하나가 1인 경우 두 입력값의 크기는 호환됩니다.
B
— 곱할 입력값
quaternion
객체 | quaternion
객체로 구성된 배열 | 실수형 스칼라 | 실수로 구성된 배열
곱할 입력값으로, quaternion
객체, 임의 차원의 quaternion
객체 배열, 실수형 스칼라 또는 임의 차원의 실수 배열로 지정됩니다. 숫자형 값은 데이터형이 single
형 또는 double
형이어야 합니다.
A
와 B
의 크기는 서로 호환되어야 합니다. 가장 간단한 경우는 둘이 동일한 크기이거나 한쪽이 스칼라일 때입니다. 모든 차원에서 입력값의 차원 크기가 동일하거나 그중 하나가 1인 경우 두 입력값의 크기는 호환됩니다.
출력 인수
quatC
— 쿼터니언 곱
quaternion
객체 | quaternion
객체로 구성된 배열
쿼터니언 곱으로, quaternion
객체 또는 quaternion
객체 배열로 반환됩니다.
알고리즘
쿼터니언과 실수형 스칼라의 곱셈
쿼터니언이 다음과 같이 주어진 경우
q와 실수형 스칼라 β의 곱은 다음과 같습니다.
쿼터니언과 쿼터니언 스칼라의 곱셈
쿼터니언에 대한 기저 요소의 정의가 다음과 같은 경우
이를 확장하여 쿼터니언 기저 요소 곱셈을 요약하는 테이블을 채울 수 있습니다.
1 | i | j | k | |
1 | 1 | i | j | k |
i | i | -1 | k | −j |
j | j | −k | -1 | i |
k | k | j | −i | -1 |
이 테이블을 읽을 때는 행을 먼저 읽습니다(예: ij = k 및 ji = −k).
두 쿼터니언 와 가 주어질 경우 곱셈을 다음과 같이 전개할 수 있습니다.
쿼터니언 곱셈 테이블을 사용하여 방정식을 다음과 같이 단순화할 수 있습니다.
참고 문헌
[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++ 코드를 생성할 수 있습니다.
버전 내역
R2019b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)