7

クォータニオン値が与えられた場合、一連のクォータニオンで最も近いものを見つけたいと思います。これを行うには、2 つの四元数間の「距離」を比較する方法が明らかに必要です。このような比較にはどのような距離表現が必要で、どのように計算されますか?

ありがとう、

ジョシュ

4

4 に答える 4

10

これは古い質問ですが、もう少し答えが必要なようです。クォータニオンが回転を表すために使用される単位長のクォータニオンである場合、クォータニオンは回転空間の2倍の冗長表現を提供するため、ユークリッド距離はいくつかの面白い結果をもたらします。つまり、クォータニオンとその否定は同じ方向を表します。この場合、正しい距離メトリックは、クォータニオン間の角度であり、次の範囲内に収まるように制約されています[0,pi/2]

theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z);
if (theta>pi/2) theta = pi - theta;
于 2011-04-25T15:26:22.240 に答える
5

あなたのクォータニオンは、向きのある 3D 空間内の単なるポイントですか?

次に、2 つの四元数間の距離x1,y1,z1,w1x2,y2,x2,w2は次の式で与えられます。

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)wコンポーネントが方向付けに使用されると仮定します。つまり、これは 2 つの 3D ポイント間の距離と同じです。

四元数は 4D 空間の点ですか?

次に、それらの間の距離は次のように与えられます。

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2).

これは 4D 空間への単なる拡張です。このユークリッド距離の式は、任意の数の次元で機能します。

于 2011-02-07T01:15:58.077 に答える
1

これは、クォータニオンを何に使用するかによって異なります。単純な距離測定は、それらの差の絶対値になります。

x = a + bi + cj + dk y = e + fi + gj + hk の場合

ユークリッド距離よりも

 |x-y| = sqrt( (a-e)² + (b-f)² + (c-g)² + (d-h)² )
于 2011-02-07T01:14:59.940 に答える
0

「距離」とは、単純なユークリッド距離 (L2 または norm2) よりも、2 つの方向間の最短の円弧回転を意味します。

方向間の角度は次のように記述できるためです。

theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z);

L2が大きいほど、距離が長くなります。

注: 負の内積を提供する場合、クエリの前のすべての四元数を否定する必要があります。通常の KNN マッチを使用してクエリを高速化できます。

于 2014-03-26T14:08:56.007 に答える