Main Content

dist

説明

distance = dist(quatA,quatB) は、2 つの四元数 quatAquatB 間の角距離 (ラジアン) を返します。

すべて折りたたむ

単一の quaternion と quaternion のベクトルの各要素間の四元数距離を計算します。オイラー角を使用して quaternion を定義します。

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 のいずれの引数もベクトルである場合、対応する要素間の四元数距離が計算されます。2 つの quaternion ベクトル間の四元数距離を計算します。

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) の場合に、for i = 1:N ループで Adimi==Bdimi または Adim==1 または Bdim==1

    四元数引数のいずれかに 1 つの四元数のみが含まれていた場合、この関数はその四元数ともう一方の引数内のすべての四元数の距離を返します。

データ型: quaternion

出力引数

すべて折りたたむ

角距離 (ラジアン)。配列として返されます。次元は size(quatA)size(quatB) の和集合の最大です。

データ型: single | double

アルゴリズム

関数 dist は、2 つの四元数間の角距離を返します。

四元数は、回転の軸 (ub,uc,ud) および角度 θq によって q=cos(θq2)+sin(θq2)(ubi+ucj+udk) として定義できます。

Angle Rotation

q=a+bi+cj+dk という形式の四元数が与えられた場合 (a は実数部)、角度 q は θq=2cos1(a) として解を求めることができます。

2 つの四元数 p と q、および積 z=p*conjugate(q) について考えます。p が q に近づくにつれ、角度 z は 0 に近づき、z は単位四元数に近づきます。

2 つの四元数間の角距離は、θz=2cos1(real(z)) と表すことができます。

quaternion データ型構文を使用すると、角距離は次のように計算されます。

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

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2019b で導入

参考

関数

オブジェクト