Main Content

dist

각거리(단위: 라디안)

설명

예제

distance = dist(quatA,quatB)는 두 쿼터니언 quatAquatB 간의 각거리(단위: 라디안)를 반환합니다.

예제

모두 축소

한 쿼터니언과 쿼터니언 벡터의 각 요소 사이의 쿼터니언 거리를 계산합니다. 오일러 각을 사용하여 쿼터니언을 정의합니다.

q = quaternion([0,0,0],"eulerd","ZYX","frame")
q = quaternion
     1 + 0i + 0j + 0k

qArray = quaternion([0,45,0;0,90,0;0,180,0;0,-90,0;0,-45,0],"eulerd","ZYX","frame")
qArray = 5x1 quaternion array
       0.92388 +         0i +   0.38268j +         0k
       0.70711 +         0i +   0.70711j +         0k
    6.1232e-17 +         0i +         1j +         0k
       0.70711 +         0i -   0.70711j +         0k
       0.92388 +         0i -   0.38268j +         0k

quaternionDistance = rad2deg(dist(q,qArray))
quaternionDistance = 5×1

   45.0000
   90.0000
  180.0000
   90.0000
   45.0000

dist에 대한 두 인수가 모두 벡터이면, 쿼터니언 거리는 서로 대응하는 요소들 사이의 거리로 계산됩니다. 두 쿼터니언 벡터 사이의 쿼터니언 거리를 계산합니다.

angles1 = [30,0,15; ...
           30,5,15; ...
           30,10,15; ...
           30,15,15];
angles2 = [30,6,15; ...
           31,11,15; ...
           30,16,14; ...
           30.5,21,15.5];

qVector1 = quaternion(angles1,"eulerd","ZYX","frame");
qVector2 = quaternion(angles2,"eulerd","ZYX","frame");

rad2deg(dist(qVector1,qVector2))
ans = 4×1

    6.0000
    6.0827
    6.0827
    6.0287

참고로 쿼터니언과 그 쿼터니언의 음수는 둘 다 동일한 회전을 표현합니다. 쿼터니언과 그 쿼터니언의 음수를 계산합니다.

qPositive = quaternion([30,45,-60],"eulerd","ZYX","frame")
qPositive = quaternion
     0.72332 - 0.53198i + 0.20056j +  0.3919k

qNegative = -qPositive
qNegative = quaternion
    -0.72332 + 0.53198i - 0.20056j -  0.3919k

쿼터니언과 그 음수 쿼터니언 간의 거리를 구합니다.

dist(qPositive,qNegative)
ans = 0

쿼터니언의 성분과 그 음수 쿼터니언의 성분이 서로 달라 보이지만, 이 두 표현은 동일한 회전을 나타냅니다.

입력 인수

모두 축소

서로의 거리를 계산할 두 쿼터니언으로, quaternion 객체 또는 임의 차원의 quaternion 객체로 구성된 배열이 쉼표로 구분되어 지정됩니다. quatAquatB의 크기는 서로 호환되어야 합니다.

  • size(quatA) == size(quatB) 또는

  • numel(quatA) == 1 또는

  • numel(quatB) == 1 또는

  • [Adim1,…,AdimN] = size(quatA)이고 [Bdim1,…,BdimN] = size(quatB)인 경우 i = 1:N에 대해 Adimi==Bdimi 또는 Adim==1 또는 Bdim==1입니다.

    쿼터니언 인수 중 하나가 쿼터니언을 하나만 포함하는 경우, 이 함수는 그 쿼터니언과 다른 인수의 각 쿼터니언 사이의 거리를 반환합니다.

출력 인수

모두 축소

각거리(단위: 라디안)로, 숫자형 스칼라 또는 숫자형 배열로 지정됩니다. 차원은 size(quatA)size(quatB)의 합집합 중 최댓값입니다.

데이터형: single | double

알고리즘

dist 함수는 두 쿼터니언 간의 각거리를 반환합니다.

쿼터니언은 다음과 같이 축 (ub,uc,ud)와 회전 각도 θq로 정의될 수 있습니다. q=cos(θq2)+sin(θq2)(ubi+ucj+udk).

Angle Rotation

쿼터니언이 q=a+bi+cj+dk 형식으로 주어졌을 때(a가 실수부임), q의 각도를 θq=2cos1(a)로 구할 수 있습니다.

두 쿼터니언 p와 q 그리고 곱 z=p*conjugate(q)가 있습니다. p가 q에 가까워지면 z의 각도는 0이 되고 z는 단위 쿼터니언에 가까워집니다.

두 쿼터니언 사이의 각거리는 θz=2cos1(real(z))로 표현할 수 있습니다.

quaternion 데이터형 구문을 사용하면 각거리가 다음과 같이 계산됩니다.

angularDistance = 2*acos(abs(parts(p*conj(q))));

확장 기능

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

버전 내역

R2018b에 개발됨

참고 항목

함수

객체