को देखते हुए वर्ष सामान्य N
और नए सामान्य N'
आप द्वारा रोटेशन प्राप्त कर सकते हैं:
RotationAxis = cross(N, N')
RotationAngle = arccos(dot(N, N')/(|N| * |N'|))
कहाँ
cross(x, y)
वैक्टर x
और y
dot(x, y)
के पार उत्पाद है वैक्टर x
और y
|x|
की डॉट उत्पाद वेक्टर x
की लंबाई है
यह पुराने सामान्य को सबसे कम संभव तरीके से नए पर घुमाएगा।
नोट्स
RotationAngle
रेडियन में हो जाएगा (यदि ARccOS रिटर्न रेडियंस के रूप में यह अधिकांश प्रयोगों में करता है)
arccos
कोसाइन समारोह का उल्टा होता है। यह आवश्यक है क्योंकि dot(N, N') = |N| * |N'| * cos(RotationAngle)
जहां RotationAngle
वैक्टर के बीच कोण है।
RotationAxis
सामान्यीकृत
- दोनों normals
(|N| * |N'|)
द्वारा विभाजन सामान्यीकृत रहे हैं, तो हो जाता है अनावश्यक नहीं है (वास्तव अगर N
सामान्यीकृत में तुम बाहर उत्पाद की |N|
छोड़ सकते हैं और यदि N'
सामान्यीकृत है तो |N'|
बाहर छोड़)
- यह यदि
N' = -N
(के रूप में वहाँ अनंत कई कम से कम तरीके हैं) विधि असफल हो जायेगी
यह कैसे काम करता है?
पहला अवलोकन यह है कि दो मानक हमेशा परिभाषित करेंगे (कम से कम) एक विमान जिसमें दोनों झूठ बोल रहे हैं। सबसे छोटा कोण जो उन्हें भागों को भी इस विमान के अंदर मापा जाएगा।
तो RotationAxis
वेक्टर विमान है कि दोनों N
और N'
encloses के सामान्य हो जाएगा और RotationAngle
दो पहले उल्लेख किया है के बीच सबसे छोटा कोण है।
RotationAngle
वर्ष सामान्य
N
द्वारा चारों ओर
RotationAxis
घूर्णन द्वारा
तो विमान के अंदर घुमाया जाता है, N'
की ओर कम से कम पथ पर।
+1 लेकिन आप (| एन | * | एन |) द्वारा विभाजन को छोड़ सकते हैं क्योंकि सामान्य वैक्टरों की लंबाई 1 है। –
@ एडी -530 नोट्स में लिखा गया है :) लेकिन मैंने इसे और अधिक स्पष्ट करने के लिए संपादित किया है। सामान्यों को सामान्यीकृत करने की आवश्यकता नहीं होती है, उन्हें केवल विमान के लिए लंबवत होने की आवश्यकता होती है। – Nobody
बहुत बहुत धन्यवाद, जिसने मुझे बहुत मदद की – rraallvv