Main Content

rotatepoint

쿼터니언 점 회전

설명

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

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도 회전시킵니다. rotatepoint를 사용하여 회전을 수행합니다.

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

   -0.0000    0.7071         0
    0.5000   -0.5000         0

회전된 점을 플로팅합니다.

plot(rotatedPoint(1,1),rotatedPoint(1,2),"bo")
plot(rotatedPoint(2,1),rotatedPoint(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");

rotatepoint를 사용하여 쿼터니언 회전 연산자로 두 점을 회전시킵니다. 결과를 표시합니다.

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

    0.6124    0.5000   -0.6124
   -0.3536    0.8660    0.3536

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

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)=quq*

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

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

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

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

    uq=0+xi+yj+zk

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

    qn=qa2+b2+c2+d2

  3. 회전을 적용합니다.

    vq=quqq*

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

확장 기능

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

버전 내역

R2019b에 개발됨

참고 항목

함수

객체