給定一個四元數值,我想在一組四元數中找到它的最近鄰居。要做到這一點,我顯然需要一種方法來比較兩個四元數之間的「距離」。這種比較需要什麼樣的距離表示?它是如何計算的?使用Quaternion的最近鄰居
感謝,
喬希
給定一個四元數值,我想在一組四元數中找到它的最近鄰居。要做到這一點,我顯然需要一種方法來比較兩個四元數之間的「距離」。這種比較需要什麼樣的距離表示?它是如何計算的?使用Quaternion的最近鄰居
感謝,
喬希
是您的四元數只是3D一個點有方向的空間?
然後兩個四元x1,y1,z1,w1
和x2,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公式適用於任何維度。
這真的取決於你用你的四元數的。簡單的距離度量將是它們差異的絕對值。
如果 X = A + BI + CJ + DK Y = E +網絡+ GJ + HK
比歐氏距離將
|x-y| = sqrt((a-e)² + (b-f)² + (c-g)² + (d-h)²)
這是一個古老的問題,但似乎需要多一點答案。如果四元數是用於表示旋轉的單位長度四元數,那麼歐幾里德距離會給出一些有趣的結果,因爲四元數提供了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;
如果「距離」你的意思是2個取向之間的最短弧線旋轉,比單純的歐幾里得距離是確定的(L2或規範2)。
因爲取向之間的角度可被寫爲
theta = acos(q1.w*q2.w + q1.x*q2.x + q1.y*q2.y + q1.z*q2.z);
比,更大的L2,更大的距離。
注意:如果提供負點產品,則在查詢之前的所有四元數應該被否定。比你可以使用通常的KNN匹配來加速你的查詢。
感謝您的回答。四元數表示爲4D空間中的一個點。我建議使用歐幾里得距離,它提供了合理的結果。 – Josh 2011-02-08 12:07:56