2011-12-22 14 views
7

मुझे पता है कि यहाँ उत्तर दिया गया है लेकिन उन सभी को घूर्णी मैट्रिक्स और ओपन में quaternions से निपटने के लिए लग रहे हैं 3 डी रोटेशन के बारे में सवाल का सेवन (और मैं वास्तव में परवाह नहीं है अगर मैं जिम्बल ताला पाने के देखते हैं)। मुझे एक बिंदु के 3 डी निर्देशांक EX: (x, y, z) प्राप्त करने की आवश्यकता है जो हमेशा एक ही दूरी होनी चाहिए, मैं इसे मूल से "डी" कहूंगा। इनपुट के रूप में मेरे पास एकमात्र जानकारी स्क्रीन पर माउस का डेल्टेक्स और डेल्टे है। अब तक यहाँ है कि मैं क्या कोशिश की है:3 डी रोटेशन

पहले:

thetaxz+=(omousex-mouseX)/(width); 
thetaxy+=(omousey-mouseY)/(height); 

(thetaxy पर एक्स पर एक्स रेडियन में कोण, y अक्ष और thetaxz, z अक्ष है) (मैं दोनों कोण की सीमा ताकि अगर वे 0 के बराबर या उससे कम कर रहे हैं वे बराबर 2 * पीआई)

दूसरा:

pointX=cos(thetaxz)*d; 
pointY=sin(thetaxy)*d; 

(pointX बिंदु के x निर्देशांक और नुकीले y है)

तीसरा:

if(thetaxz)<PI){ 
pointZ=sqrt(sq(d)-sq(eyeX/d)-sq(eyeY/d)); 
}else{ 
    pointZ=-sqrt(abs(sq(d)-sq(eyeX/d)-sq(eyeY/d))); 
} 

(pointZ बिंदु के z समन्वय होना चाहिए (वर्ग() एक समारोह है कि वर्गों और पेट() एक निरपेक्ष मान समारोह है) और यह सकारात्मक z के बीच क्रॉसिंग पर छोड़कर है गोलार्द्ध और नकारात्मक जेड गोलार्ध। चूंकि यह किनारे तक पहुंचता है, यह दूरी उस दूरी से आगे बढ़ जाती है जब यह हमेशा एक्स और वाई में होती है और प्रतीत होता है कि यह 0.17.2 थैक्सैक्स के रेडियंस के आसपास यादृच्छिक रूप से है, जेड समन्वय एनएएन या अपरिभाषित हो जाता है)

मेरे पास है थोड़ी देर के लिए इस बारे में सोचा, और सचमुच मुझे quaternions और घूर्णन matrices की अवधारणा के आसपास अपने सिर warping में कठिनाई हो रही है, हालांकि यदि आप मुझे दिखा सकते हैं कि वास्तविक निर्देशांक उत्पन्न करने के लिए उन्हें कैसे उपयोग करें मुझे सीखने में खुशी होगी। मैं अभी भी इसे पसंद करूंगा अगर मैं कुछ धुरी में कुछ त्रिकोणमिति का उपयोग कर सकता हूं। किसी भी मदद के लिए अग्रिम धन्यवाद और यदि आपको अधिक जानकारी चाहिए तो कृपया पूछें।

सुझाव/अंतिम समय विचार: मुझे लगता है कि x व y स्थितियां वापस प्रभावित करने z स्थिति के साथ कुछ हो सकता है लेकिन मुझे यकीन नहीं कर रहा हूँ।

संपादित करें: मैं एक चित्र आकर्षित किया: enter image description here

+0

मैं 100% इस वास्तव में आप क्या चाहते है नहीं कर रहा हूँ, लेकिन मुझे लगता है कि आप [gluUnProject] में देखना चाहते हो सकता है (http://nehe.gamedev.net/article/using_gluunproject/16013 /) कैमरा मैट्रिस के आधार पर 2 डी निर्देशांक को 3 डी में परिवर्तित करने के लिए। इसे निकट और दूर कैमरे के विमानों पर एक बिंदु के लिए करें, और उसके बाद अपनी परिणामी रेखा के साथ बिंदु खोजने के लिए कुछ ट्रिग का उपयोग करें जो मूल से वांछित दूरी है। नोट 0, 1 या 2 समाधान हालांकि इस समस्या का देखते हैं कि, लाइन – Hybrid

+3

आप मूल समस्या एक छोटे से स्पष्ट राज्य कर सकते हैं पर निर्भर करता है, शायद एक तस्वीर के साथ? –

+0

मैंने एक तस्वीर लिंक जोड़ा क्योंकि मेरे पास केवल 1 प्रतिनिधि है क्योंकि मैं इस साइट पर नया हूं। –

उत्तर

5

आप वास्तव में इस में किसी भी सफलता चाहते हैं तो आपको गोली काटने और के बारे में rotation matrices और/या quaternion rotations जानने के लिए जा रहे हैं। आप जो चाहते हैं उसे करने के अन्य तरीके हो सकते हैं, लेकिन रोटेशन मैट्रिस और क्वाटरनियन रोटेशन का उपयोग केवल इसलिए किया जाता है क्योंकि वे व्यापक रूप से समझते हैं और वेक्टरों को घूर्णन को व्यक्त करने और लागू करने के सबसे सरल माध्यमों में से हैं। किसी भी अन्य प्रतिनिधित्व के साथ कोई भी आ सकता है शायद इनमें से एक या दोनों का एक जटिल सुधार होगा। वास्तव में यह दिखाया जा सकता है कि रोटेशन linear transformation है और इसलिए matrix के रूप में व्यक्त किया जा सकता है। Quaternion रोटेशन 3 डी में वैक्टर घुमाने के सिर्फ एक सरलीकृत साधन हैं, और इसलिए समकक्ष मैट्रिक्स प्रतिनिधित्व है।

जिसके अनुसार, यह लगता है कि आप एक माउस क्लिक के साथ अपने दृश्य में एक वस्तु हथियाने और जिस तरह का एक स्वाभाविक प्रकार में घूर्णन में रुचि रखते हैं। यदि ऐसा है, तो आपको ArcBall विधि को देखना चाहिए (numerous examples हैं जिन्हें आप देखना चाहते हैं)। यह अभी भी आपको quaternions का कुछ पता करने की आवश्यकता है। आपको यह भी पता चलेगा कि linear algebra के बुनियादी पहलुओं की कम से कम न्यूनतम समझ उपयोगी होगी।

अद्यतन: अपने चित्र और टिप्पणियां उसमें शामिल के आधार पर, यह लग रहा है Cartesian Coordinates को Spherical Coordinates कन्वर्ट करने के लिए है सब तुम सच में ऐसा करने की कोशिश कर रहे हैं की तरह। जब तक हम इस नोटेशन पर सहमत होते हैं, यह आसान है। θ कोण आप XY कॉल कर रहे हैं, वह है, एक्स अक्ष के बीच का कोण Z अक्ष के बारे में घुमाया होने दो; इस दिगंश कोण कहा जाता है और सीमा [0 में हो जाएगा, 2 π) रेडियंस या [0 °, 360 °)। φ XY विमान और आपके वेक्टर के बीच एक कोण बनें; इस ऊंचाई कोण कहा जाता है और में सीमा हो जाएगा [-, π/2 + π/2] या [-90 °, +90 °] और यह कोण आप XZ कोण (में रोटेशन कॉल कर रहे हैं से मेल खाती है वाई अक्ष के बारे में एक्सजेड विमान)। अन्य सम्मेलन हैं, इसलिए सुनिश्चित करें कि आप सुसंगत हैं। वैसे भी, रूपांतरण केवल है:

x = d∙cos(φ)∙cos(θ) 
y = d∙cos(φ)∙sin(θ) 
z = d∙sin(φ)
+0

धन्यवाद, लेकिन मैं OpenGL का उपयोग नहीं कर रहा हूँ और मैं वास्तव में एक वस्तु मैं दृश्यों कैमरा घूर्णन कर रहा हूँ बदलने दृश्यों समन्वय प्रणाली नहीं नहीं हथियाने रहा हूँ। क्या रोटेशन मैट्रिक्स से निर्देशांक प्राप्त करने का कोई तरीका है क्योंकि तब मैं उनका उपयोग कर सकता हूं? –

+0

आपके आरेख के आधार पर, मुझे लगता है कि आप केवल गोलाकार से कार्टेसियन निर्देशांक में कनवर्ट करना चाहते हैं। मैंने आपको यह दिखाने के लिए अपनी प्रतिक्रिया संपादित की है कि यह कैसे करें। यदि आप माउस के साथ कुछ भी इंटरैक्टिव करने की कोशिश कर रहे हैं और इस तरह के मूल के बारे में अपने कैमरे को ले जाने की कोशिश कर रहे हैं, तो मुझे नहीं लगता कि आपको काफी परिणाम मिलेंगे जिनकी आप उम्मीद कर रहे हैं। उस ने कहा, मुझे सच में लगता है कि कम से कम ArcBall दृष्टिकोण पर विचार करना बेहतर होगा। – andand

+0

धन्यवाद, मैंने सोचा कि इसे पोस्ट करने से ठीक पहले, लेकिन वैसे भी धन्यवाद! बड़ी मदद मैं आपको एक प्लस दूंगा लेकिन मेरे पास अभी तक पर्याप्त प्रतिनिधि नहीं है। मैं कोशिश करूँगा और बाद में वापस आऊंगा क्योंकि आप बहुत उपयोगी और जानकारीपूर्ण थे। –