2011-02-07 5 views
7

एक quaternion मूल्य देखते हुए, मैं quaternions के एक सेट में अपने निकटतम पड़ोसी को खोजना चाहता हूँ। ऐसा करने के लिए, मुझे दो quaternions के बीच "दूरी" की तुलना करने के लिए स्पष्ट रूप से एक तरीका चाहिए। इस तरह की तुलना के लिए किस दूरी के प्रतिनिधित्व की आवश्यकता है और इसकी गणना कैसे की जाती है?Quaternions का उपयोग कर निकटतम पड़ोसियों

धन्यवाद,

जोश

उत्तर

5

अपने चार का समुदाय सिर्फ 3 डी में एक बिंदु है एक अभिविन्यास के साथ अंतरिक्ष?

फिर दो quaternions x1,y1,z1,w1 और x2,y2,x2,w2 के बीच की दूरी द्वारा दिया जाता है:

distance = sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2), यह सोचते हैं कि w घटक उन्मुखीकरण के लिए प्रयोग किया जाता है। अर्थात। यह दो 3 डी बिंदुओं के बीच की दूरी के समान है।

क्या आपका quaternion 4 डी स्पेस में एक बिंदु है?

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

तो उनके बीच की दूरी द्वारा दिया जाता है।

जो कि 4 डी स्पेस का विस्तार है। यह euclidean distance सूत्र किसी भी आयाम में काम करता है।

+0

उत्तर के लिए धन्यवाद। Quaternions 4 डी अंतरिक्ष में एक बिंदु के रूप में प्रतिनिधित्व कर रहे हैं। मैंने सुझाए गए यूक्लिडियन दूरी का उपयोग किया है, और यह उचित परिणाम प्रदान करता है। – Josh

+0

वहां आपके दूसरे सूत्र में एक अतिरिक्त कंस्ट्रैसिस मिला, लेकिन यह संपादन नहीं कर सकता क्योंकि यह 6 वर्णों से कम है। 'दूरी = sqrt ((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 + (w1-w2)^2) होना चाहिए। इस उत्तर के लिए धन्यवाद! – SCCOTTT

1

यह वास्तव में क्या आप के लिए अपने quaternions का उपयोग पर निर्भर करता है। एक साधारण दूरी उपाय उनके अंतर का पूर्ण मूल्य होगा।

तो एक्स = एक + द्वि + CJ + dk y = ई + फाई + जी जे + एच

इयूक्लिडियन दूरी से

होगा

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

यह एक पुराना सवाल है, लेकिन इसे थोड़ा और जवाब चाहिए। यदि quaternions रोटेशन का प्रतिनिधित्व करने के लिए इकाई-लंबाई quaternions का उपयोग किया जा रहा है, तो यूक्लिडियन दूरी कुछ मजाकिया परिणाम देगा क्योंकि quaternions घूर्णन अंतरिक्ष के 2x अनावश्यक प्रतिनिधित्व प्रदान करते हैं; यानी, एक quaternion और इसकी अस्वीकृति एक ही उन्मुखीकरण का प्रतिनिधित्व करते हैं।

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 झुकाव बीच कम से कम चाप रोटेशन मतलब है, की तुलना में सरल इयूक्लिडियन दूरी ठीक है (एल 2: इस मामले में, सही दूरी मीट्रिक quaternions के बीच के कोण, [0,pi/2] में आते हैं करने के लिए विवश है या मानक 2)।

क्योंकि झुकाव के बीच के कोण के रूप में

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

से, बड़ा एल 2, बड़ा दूरी लिखा जा सकता है।

नोट: नकारात्मक डॉट उत्पाद प्रदान करते समय क्वेरी से पहले सभी quaternions को अस्वीकार किया जाना चाहिए। आप अपने प्रश्नों को तेज़ करने के लिए सामान्य केएनएन मैच का उपयोग कर सकते हैं।

संबंधित मुद्दे