2011-02-07 110 views
7

給定一個四元數值,我想在一組四元數中找到它的最近鄰居。要做到這一點,我顯然需要一種方法來比較兩個四元數之間的「距離」。這種比較需要什麼樣的距離表示?它是如何計算的?使用Quaternion的最近鄰居

感謝,

喬希

回答

5

是您的四元數只是3D一個點有方向的空間?

然後兩個四元x1,y1,z1,w1x2,y2,x2,w2之間的距離由下式給出:

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2),假設w組件用於取向。即這與兩個3D點之間的距離相同。

你的四元數是4D空間中的一個點嗎?

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

然後將它們之間的距離由下式給出。

這只是4D空間的擴展。這個euclidean distance公式適用於任何維度。

+0

感謝您的回答。四元數表示爲4D空間中的一個點。我建議使用歐幾里得距離,它提供了合理的結果。 – Josh 2011-02-08 12:07:56

1

這真的取決於你用你的四元數的。簡單的距離度量將是它們差異的絕對值。

如果 X = A + BI + CJ + DK Y = E +網絡+ GJ + HK

比歐氏距離將

|x-y| = sqrt((a-e)² + (b-f)² + (c-g)² + (d-h)²) 
9

這是一個古老的問題,但似乎需要多一點答案。如果四元數是用於表示旋轉的單位長度四元數,那麼歐幾里德距離會給出一些有趣的結果,因爲四元數提供了2x旋轉空間的冗餘表示;即四元數及其否定表示相同的取向。在這種情況下,正確的距離度量是四元數之間的角度,限制將落入[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; 
0

如果「距離」你的意思是2個取向之間的最短弧線旋轉,比單純的歐幾里得距離是確定的(L2或規範2)。

因爲取向之間的角度可被寫爲

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

比,更大的L2,更大的距離。

注意:如果提供負點產品,則在查詢之前的所有四元數應該被否定。比你可以使用通常的KNN匹配來加速你的查詢。