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])

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")

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")

입력 인수

모두 축소

회전을 정의하는 쿼터니언으로, 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 벡터입니다. 그렇지 않으면 rotationResult는 M×3 행렬이며, 여기서 M은 length(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++ 코드를 생성할 수 있습니다.

버전 내역

R2018b에 개발됨

참고 항목

함수

객체