四元数の値が与えられていれば、四元数のセットの中で最も近いものを探したいと思います。これを行うには、明らかに、2つの四元数間の「距離」を比較する方法が必要です。そのような比較にはどのような距離表現が必要であり、どのように計算されますか?Quaternionsを使用している最近隣の人
おかげで、これは本当にあなたがあなたの四元数を使用するかに依存し
ジョシュ
四元数の値が与えられていれば、四元数のセットの中で最も近いものを探したいと思います。これを行うには、明らかに、2つの四元数間の「距離」を比較する方法が必要です。そのような比較にはどのような距離表現が必要であり、どのように計算されますか?Quaternionsを使用している最近隣の人
おかげで、これは本当にあなたがあなたの四元数を使用するかに依存し
ジョシュ
場合よりも3Dでちょうどポイントあなたの四元です向きのある空間? w
成分を配向するために使用されると仮定すると、
distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)
:
は、2つの四元x1,y1,z1,w1
とx2,y2,x2,w2
との間の距離は次式で与えられます。私。これは2つの3D点間の距離と同じです。
クォータニオンは4D空間のポイントですか?
distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2)
:
は、その後、それらの間の距離は次式で与えられます。
これは、4D空間の拡張です。このeuclidean distance式は、任意の数のディメンションで機能します。
。単純な距離測定は、その差の絶対値になります。
X = A + BI +のCJ +は yとDK場合= E + Fiを+ GJ + HK
ユークリッド距離が
|x-y| = sqrt((a-e)² + (b-f)² + (c-g)² + (d-h)²)
これは古い質問ですが、もう少し答えが必要だったようです。四元数が回転を表現するために使用される単位長四元数である場合、四元数は回転空間の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;
単純なユークリッド距離がOKであるよりも、「距離」は、あなたが(、L2を2つの方向との間の最短のアーク回転を意味する場合またはnorm2)。
方向の間の角度は
theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z);
より大きなL2、大きな距離のように書くことができるからです。
注:ネガティブドットプロダクトを提供する場合は、クエリ前のすべてのクォータニオンを無効にする必要があります。あなたはあなたの質問をスピードアップするために通常のKNNマッチを使用するよりも。
答えをありがとう。四元数は4D空間の一点として表されます。私はユークリッド距離を示唆するように使用しており、合理的な結果が得られます。 – Josh
2番目の式に余分な括弧がありますが、6文字未満で編集することはできません。距離= sqrt((x1-x2)^ 2 +(y1-y2)^ 2 +(z1-z2)^ 2 +(w1-w2)^ 2) 'でなければなりません。この返答をありがとう! – SCCOTTT