2012-05-30 33 views
5

मुझे डब्ल्यूडब्ल्यूडीसी से याद है कि ओपनजीएल ईएस में एक टीपोट दिखाने वाली एक बात थी, जो डिवाइस के आंदोलन के साथ घूमती थी। ऐसा लगता है कि टीपोट अभी भी अंतरिक्ष में खड़ा था।उपयोगकर्ता के डिवाइस को कैसे रखता है इसके सापेक्ष वाई-अक्ष के चारों ओर घूर्णन कैसे प्राप्त करें?

जब ऐप लॉन्च हुआ, तो टीपोट एक विशिष्ट स्थिति में शुरू हुआ। फिर जब डिवाइस घुमाया गया, तो टीपोट भी अंतरिक्ष में खड़े होने के लिए घुमाया गया।

इस बात पर, उन्होंने उल्लेख किया कि हमें "संदर्भ फ्रेम" प्राप्त करना होगा। ऐप लॉन्च पर, जो हमें बताता है कि उपयोगकर्ता ने शुरुआत में डिवाइस को कैसे रखा था।

accelerometer

मैं वाई अक्ष के चारों ओर रोटेशन जानना चाहते हैं, लेकिन कैसे उपयोगकर्ता डिवाइस धारण के सापेक्ष:

उदाहरण के लिए यहाँ accelerometer धुरी है। तो जब उपयोगकर्ता इसे सीधे रखता है और वाई के चारों ओर घूमता है, तो मुझे उस घूर्णन मूल्य को जानने की आवश्यकता होती है।

मुझे लगता है कि कुंजी रीडिंग से गुरुत्वाकर्षण को हटा रही है? इसके अलावा मैं जीरोस के साथ आईफोन 4/4 एस को लक्षित करता हूं, लेकिन मुझे लगता है कि कोरमोशन उन्हें स्वचालित रूप से संवेदना-संलयन करेगा।

मैं कैसे पता लगा सकता हूं कि उपयोगकर्ता ने वाई-अक्ष के आसपास डिवाइस को कितना घुमाया?

+0

यह आपके विचार http://stackoverflow.com/questions/6464569/changing-uiviews-during-uiinterfaceorientation-on-ipad –

+0

@ प्रवीण कश्मीर नहीं, इसके बारे में डिवाइस अभिविन्यास घटनाओं नहीं है दे सकते हैं हो सकता है। मैं वाई के आस-पास सटीक रोटेशन कोण को जानना चाहता हूं कि उपयोगकर्ता ने डिवाइस को कैसे चालू करना शुरू किया। –

+0

ठीक है, आप हमेशा ऐप लॉन्च पर जान सकते हैं, उपयोगकर्ता किस डिवाइस पर डिवाइस धारण कर रहा है, और उस स्थिति के आधार पर आप वाई अक्ष की गणना कर सकते हैं (मुझे यकीन नहीं है, अगर आप पूछ रहे हैं, जहां उपयोगकर्ता डिवाइस धारण कर रहा है अजीब कोण में: पी_) –

उत्तर

2

अपने अन्य प्रश्न से Why is this CMDeviceMotionHandler never called by CoreMotion? मुझे पता है कि आप आईओएस 4 पर काम कर रहे हैं - आईओएस 5 में चीजें थोड़ा बदल गई हैं। सामान्य जीरो डेटा या डिवाइसमोशन में किए गए एक्सेलेरोमीटर और जीरो डेटा के बेहतर सेंसर संलयन में उचित परिणाम प्राप्त करने का सबसे अच्छा तरीका है।

तो अगर आपको यह मिल गया और चल रहा है, तो आपको अपने संदर्भ फ्रेम के सापेक्ष सभी CMDeviceMotion परिणामों को प्राप्त करने के लिए CMAttitude's multiplyByInverseOfAttitude विधि के साथ काम करने की आवश्यकता होगी। बस कक्षा के सदस्य में पहले सीएमएटीटीटी का संदर्भ संग्रहित करें और बाद में सभी कॉल पर इसके साथ multiplyByInverseOfAttitude कॉल करें। फिर CMDeviceMotion.attitude के सभी सदस्य इस संदर्भ फ्रेम का संदर्भ लेंगे।

वाई अक्ष के चारों ओर घूर्णन प्राप्त करने के लिए, पहला दृष्टिकोण यूलर कोण लेना है i.e. CMAttitude.roll। यदि आपको केवल छोटी गति को ट्रैक करने की आवश्यकता है तो यह ठीक हो सकता है। यदि गति अधिक व्यापक हैं, तो आप Gimbal Lock के संबंध में परेशानी में भाग लेंगे। फिर आपको स्थिर परिणाम प्राप्त करने के लिए quaternion ऑपरेशन जैसी उन्नत तकनीकों की आवश्यकता है, लेकिन यह एक स्वयं के प्रश्न की तरह लगता है।