Main Content

rotateframe

쿼터니언 프레임 회전

설명

rotationResult = rotateframe(quat,cartesianPoints)는 쿼터니언 quat를 사용하여 카테시안 점의 기준 프레임을 회전시킵니다. 쿼터니언의 요소는 회전에 사용되기 전에 정규화됩니다.

Frame Rotation

예제

예제

모두 축소

3차원에서 점을 정의합니다. 점의 좌표는 항상 x, y, z 순서로 지정됩니다. 시각화 편의를 위해 x-y 평면에서 점을 정의합니다.

x = 0.5;
y = 0.5;
z = 0;
plot(x,y,"ko")
hold on
axis([-1 1 -1 1])

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

2개의 별도 회전을 지정하는 쿼터니언 벡터를 만듭니다. 하나는 z축을 중심으로 프레임을 45도 회전시키고 다른 하나는 점을 -90도 회전시킵니다. rotateframe을 사용하여 회전을 수행합니다.

quat = quaternion([0,0,pi/4; ...
                   0,0,-pi/2],"euler","XYZ","frame");
               
rereferencedPoint = rotateframe(quat,[x,y,z])
rereferencedPoint = 2×3

    0.7071   -0.0000         0
   -0.5000    0.5000         0

회전된 기준 프레임에서 점을 플로팅합니다.

plot(rereferencedPoint(1,1),rereferencedPoint(1,2),"bo")
plot(rereferencedPoint(2,1),rereferencedPoint(2,2),"go")

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers

3차원 공간에서 두 점을 정의합니다. 먼저 기준 프레임을 z축을 중심으로 30도 회전한 다음 새로운 y축을 중심으로 45도 회전하여 점의 새로운 기준 프레임을 생성하기 위한 쿼터니언을 정의합니다.

a = [1,0,0];
b = [0,1,0];
quat = quaternion([30,45,0],"eulerd","ZYX","point");

rotateframe을 사용하여 쿼터니언 회전 연산자로 두 점을 재정의할 회전된 기준 프레임을 만듭니다. 결과를 표시합니다.

rP = rotateframe(quat,[a;b])
rP = 2×3

    0.6124   -0.3536    0.7071
    0.5000    0.8660   -0.0000

점의 원래 방향과 회전된 방향을 시각화합니다. 원점에서 각 점까지 선을 그려 시각화합니다.

plot3(a(1),a(2),a(3),"bo");

hold on
grid on
axis([-1 1 -1 1 -1 1])
xlabel("x")
ylabel("y")
zlabel("z")

plot3(b(1),b(2),b(3),"ro");
plot3(rP(1,1),rP(1,2),rP(1,3),"bd")
plot3(rP(2,1),rP(2,2),rP(2,3),"rd")

plot3([0;rP(1,1)],[0;rP(1,2)],[0;rP(1,3)],"k")
plot3([0;rP(2,1)],[0;rP(2,2)],[0;rP(2,3)],"k")
plot3([0;a(1)],[0;a(2)],[0;a(3)],"k")
plot3([0;b(1)],[0;b(2)],[0;b(3)],"k")

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 8 objects of type line. One or more of the lines displays its values using only markers

입력 인수

모두 축소

회전을 정의하는 쿼터니언으로, quaternion 또는 quaternion 객체로 구성된 벡터로 지정됩니다. quatcartesianPoints의 크기는 서로 호환되어야 합니다.

  • length(quat) == size(cartesianPoints,1) 또는

  • length(quat) == 1 또는

  • size(cartesianPoints,1) == 1

3차원 카테시안 점으로, 단일 점을 나타내는 1×3 숫자형 벡터 또는 N개의 점을 나타내는 N×3 숫자형 행렬로 지정됩니다. quatcartesianPoints의 크기는 서로 호환되어야 합니다.

  • length(quat) == size(cartesianPoints,1) 또는

  • length(quat) == 1 또는

  • size(cartesianPoints,1) == 1

데이터형: single | double

출력 인수

모두 축소

회전된 기준 프레임에 정의된 카테시안 점으로, 1×3 숫자형 벡터 또는 숫자형 행렬로 반환됩니다.

quat가 스칼라 quaternion 객체이고 cartesianPoints가 단일 점을 나타내는 1×3 벡터일 때 rotationResult는 1×3 벡터입니다. 그렇지 않으면 rotationResultM×3 행렬이며, 여기서 Mlength(quat)size(cartesianPoints,1)의 최댓값입니다.

데이터형: single | double

알고리즘

쿼터니언 프레임 회전은 R3에 지정된 점을 아래의 지정된 쿼터니언에 따라 원래의 기준 프레임을 회전시킨 프레임에 재정의합니다.

Lq(u)=q*uq

여기서 q는 쿼터니언이고, *는 켤레를 나타냅니다. u는 회전할 점으로, 쿼터니언으로 지정됩니다.

편의를 위해 rotateframe 함수는 R3의 점을 받고 R3으로 점을 반환합니다. 다음과 같이 임의의 쿼터니언 q = a + bi + cj + dk 및 임의의 좌표 [x,y,z]를 갖는 함수 호출이 주어지는 경우,

point = [x,y,z];
rereferencedPoint = rotateframe(q,point)
rotateframe 함수는 다음 연산을 수행합니다.

  1. [x,y,z]를 쿼터니언으로 변환합니다.

    uq=0+xi+yj+zk

  2. 쿼터니언 q를 정규화합니다.

    qn=qa2+b2+c2+d2

  3. 회전을 적용합니다.

    vq=q*uqq

  4. 쿼터니언 출력값 vq를 다시 R3으로 변환합니다.

확장 기능

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

버전 내역

R2019b에 개발됨

참고 항목

함수

객체