2012-10-17 29 views
7

पर सम्मान के साथ आयताकार समन्वय मैं Surfaceview और कैनवास ड्राइंग का उपयोग कर एंड्रॉइड में कस्टम घटकों को बनाने की कोशिश कर रहा हूं। घटकों को स्पर्श करके पुनः आकार देने योग्य और घूमने योग्य होते हैं। एक छवि दृश्य बनाने पर विचार करें इसके शीर्ष, दाएं, नीचे, और बाएं किनारों को आवश्यक किनारे को छूकर खींचकर स्केल करने योग्य हैं। मैं घटक की सीमाओं को रखने के लिए RectF का उपयोग कर रहा हूं, घूर्णन के लिए मैं canvas.rotate(angle, bounds.centerX(),bounds.centerY()) विधि का उपयोग कर रहा हूं। समस्या शीर्ष किनारे का आकार बदलते समय है, चलो, दाएं और नीचे किनारों को ठीक किया जाना चाहिए, और यदि रोटेशन कोण 0 डिग्री से अधिक है तो मैं इसे ठीक करने में सक्षम नहीं हो सकता। वास्तविक आयताकार सीमाओं के संबंध में घूर्णन आयत के एक्स, वाई निर्देशांक को खोजने के लिए मुझे गणित समाधान की आवश्यकता है।रोटेशन कोण

मैं इसे कुछ छवियों की सहायता से समझा सकता हूं। निम्नलिखित चित्र दो आयतों को प्रदर्शित करता है जिनके सीमाएं भी संबंधित रंगों में जानी जाती हैं और प्रदर्शित होती हैं। ग्रीन रेक्ट पर घटक प्रारंभिक सीमाओं के रूप में विचार करें, यानी। -45 डिग्री से घिरा हुआ, केंद्र (10,10) है। अब फिर से आकार करने शीर्ष बढ़त आयत के और प्रदर्शित जा रहा अगले चित्रा 2.

Figure 1

में चित्र 2 से यह समझा जाता है कि Y स्थिति 6. घुमाया से 4 कम हो जाता है आयत गुलाबी रंग में भी दिखाया गया है। याद रखें कि घटक रोटेशन कोण -45 डिग्री पर है, जबकि खींचते समय शीर्ष एज आयताकार बाएं, दाएं और नीचे की स्थिति नहीं बदला जाना चाहिए। तो चित्रा 2 का गुलाबी आयताकारहोना चाहिएजैसा चित्र 1 का ग्रीन आयताकार के समान है। प्राप्त की और उम्मीद आयत की तुलना चित्रा 3. में दिखाया गया है

Figure 2

3 चित्र पीले रंग आयत अपेक्षित/आवश्यक बाहर कर दिया जाता है। आयत प्राप्त गुलाबी रंगग्रीन घुमावदार आयताकार की तुलना में ऊपर की ओर स्थानांतरित हो गया है और यह अलग-अलग घूर्णन कोण पर निर्भर करता है।

  • मैं रोटेशन कोण = -45 डिग्री
  • वास्तविक की सीमा (नहीं का आकार) आयत की है।
  • रोटेशन = -45 डिग्री पर वास्तविक (आकार में नहीं) आयत के बाउंड।
  • पुन: आकार के आयत के बाउंड।
  • रोटेशन = -45 डिग्री पर पुन: आकार के आयत के बाउंड।

मैं येलो आयताकार के बाउंड/केंद्र की गणना कैसे करूं। ताकि मैं अपने घटकों के आकार को सही ढंग से कार्यान्वित कर सकूं? मुझे बताएं कि क्या कोई गणित है जिसे लागू किया जा सकता है?

आवश्यक अंक/निर्देशांक चित्रा 3.

Figure 3

+0

बस घुमाने बिंदुओं पर खत्म हो जाएगा, बेसिक सूत्रों हैं: x_ = एक्स * क्योंकि (कोण) - y * पाप (कोण); y_ = y * पाप (कोण) + वाई * कोस (कोण); http://en.wikipedia.org/wiki/Rotation_(mathematics) – user1410657

उत्तर

0

इस उत्तर के सभी रंगों का उल्लेख अपने आंकड़ा 3 करने के लिए लाल रंग हलकों के रूप में चिह्नित कर रहे हैं।

यदि मैं आपका प्रश्न सही ढंग से समझ गया, तो आप जानते हैं कि गुलाबी आयताकार के साथ-साथ हरे रंग के आयत के बारे में सभी विवरणों की गणना कैसे करें। तो बस गुलाबी आयत के एक कोने और हरे रंग के आयत के इसी कोने के बीच का अंतर लें। उस अंतर को जोड़ना (गुलाबी आयत के केंद्र में एक दो-तत्व वेक्टर, यानी x और y अलग-अलग अंतर) गुलाबी आयताकार के केंद्र में आपको पीले त्रिकोण का वांछित केंद्र प्रदान करेगा।

यदि आपको गुलाबी आयताकार के आयामों की गणना करने की आवश्यकता है, तो आप बिना किसी निर्देशित समन्वय प्रणाली में ऐसा करना चाहेंगे। उस बिंदु के निर्देशांक के साथ अपने हरे आयत को एक साथ ले जाएं, जिस पर आप आयताकार विस्तार करना चाहते हैं, और उन्हें 45 डिग्री से पीछे घुमाएं। फिर आप आयत की ऊंचाई को अपनी इच्छित मूल्य तक बढ़ा सकते हैं, जो आपको नीला आयत देगा, और उस से गुलाबी आयताकार घूर्णन करेगा।

1

कुंजी यह है: "यदि रोटेशन कोण 0 डिग्री से अधिक है तो मैं इसे ठीक करने में सक्षम नहीं हूं।"

मान लें कि आपका आयताकार 10 डिग्री घुमाया गया है।

1) बारी बारी से माउस -10 डिग्री

से -10 डिग्री

2) बारी बारी से आयत के केंद्र से स्क्रीन पर कुछ बिंदु के आसपास समन्वय ... अब आप एक के लिए समस्या कम आयत 0 डिग्री पर है। आयत चले गए, हाँ, माउस चले गए, लेकिन वे एक दूसरे के सापेक्ष हैं जैसा कि होना चाहिए।

3) अब आयताकार हेरफेर करें। आयताकार केंद्र बदल जाएगा।

4) 10 डिग्री

इस तरह से नई आयत केंद्र घुमाएँ आप इसके बारे में सोचने के लिए की जरूरत नहीं है और आप हमेशा अन-घुमाया निर्देशांक में काम कर रहे हैं। [x, y] पर

प्वाइंट कोण a तक घुमाया [x*cos(a) - y*sin(a), x*sin(a) + y*cos(a)]