2011-05-24 12 views
5

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

मूल रूप से मैं एक पूर्व-परिभाषित, घुमावदार पथ (केवल इसे स्थानांतरित नहीं करता, बल्कि ड्रैग आईटी) के साथ एक ऑब्जेक्ट/स्प्राइट खींचना चाहता हूं। आईफोन की "अनलॉक करने के लिए स्लाइड" चीज के बारे में सोचें, लेकिन स्लाइडर को बाएं से दाएं खींचने के बजाय, पथ को एक चाप या एक लहर रेखा बनाएं।

मेरे बुनियादी सोच था:

  • एक बेज़ियर पथ को परिभाषित, प्रारंभ बिंदु पर वस्तु की स्थापना की।
  • यदि ऑब्जेक्ट स्पर्श किया गया है, तो स्पर्श में बेजियर पथ पर हिट डिटेक्शन की जांच करें (या कुछ समान फ़ंक्शन)। यदि पथ पर बने रहें, पथ तक समाप्त होने तक पथ के साथ स्प्राइट को अग्रिम करें (जिस स्थिति में, कार्य समाप्त हो गया है) या उपयोगकर्ता की उंगली पथ से निकलती है (इस स्थिति में, वस्तु को शुरुआत में वापस जाना चाहिए)।

इनमें से कोई भी छोटा नहीं है (कम से कम, ऐसा लगता है)। उदाहरण के लिए:

  • एक बेज़ियर रास्ते पर हिट का पता लगाने कर जब से तुम वास्तव में stroked भाग, नहीं भरने हिस्से पर यह सब करने की ज़रूरत एक शाही दर्द है। और फिर भी, मुझे किसी भी चौड़ाई के रास्ते पर ऐसा करने का कोई तरीका नहीं दिख रहा है - केवल बेजियर के 1-पॉइंट-वाइड पथ पर।
  • पथ के साथ आंशिक रूप से किसी ऑब्जेक्ट को स्थानांतरित करना भी संभव नहीं लगता है: सभी एनीमेशन विधियां संपूर्ण पथ के साथ स्प्राइट को स्थानांतरित करती हैं। साथ ही, ऐसा करने के लिए आपको उपयोगकर्ता के स्पर्श के निकटतम पथ पर बिंदु ढूंढना होगा, जो कि यदि आपने इसे कभी देखा है तो आश्चर्यजनक रूप से जटिल गणित शामिल है।
  • मैंने पथ के बाहर सभी जगहों पर कब्जा करने के लिए कठोर निकायों का उपयोग करने का विचार किया है, इसलिए वस्तु केवल पथ में ही जा सकती है। हालांकि, इसके लिए घुमावदार कठोर निकायों की परिभाषा की आवश्यकता है जिनमें से कुछ अवतल होना चाहिए। गतिरोध।

क्या मैं इसे बहुत कठिन बना रहा हूं? यह जटिल नहीं लगता है। मुझे पूरे समाधान की आवश्यकता नहीं है, इस बारे में सोचने और सही दिशा में लात मारने का एक नया तरीका है। किसी भी तरह की सहायता की सच में प्रशंसा की जाएगी।

+0

मुझे पता है कि यह बहुत समय पहले पूछा गया था, लेकिन मैं अभी कुछ इसी तरह से चल रहा हूं और सोच रहा था कि क्या आपने यह पाया है बाहर और सही रास्ते को नीचे निर्देशित करने में मदद करने में सक्षम हो सकता है। – gikygik

उत्तर

1

इस बारे में कैसे?

  • अपने बेजियर पथ के एक्स एक्सिस पर विचार करें।
  • प्रत्येक बार जब उपयोगकर्ता स्क्रीन के साथ टैप या इंटरैक्ट करता है तो बस स्पर्श के एक्स भाग को देखें
  • मानचित्र करें कि एक्स आपके पथ के साथ समन्वयित करता है और ऑब्जेक्ट को सही स्थिति में ले जाता है।
+0

क्या यह समाधान काम करेगा यदि वक्र एक्स अक्ष पर एक ही बिंदु को एक से अधिक बार पार करता है? उदाहरण के लिए, अगर वक्र बस अक्षर "एस" है। वही एक्स बिंदु वक्र पर विभिन्न वाई बिंदुओं के लिए कई बार हो सकता है ... – johnnysports

+0

नहीं, यह नहीं होगा। आप क्या कर सकते हैं यह तय करने के लिए वाई एक्सिस का उपयोग करें कि वक्र में कौन सा बिंदु आपको – arclight

0

हां, आप इसे बहुत कठिन बना रहे हैं।

सरलीकरण ऊपर सुझाए गए (या एक चक्र, रेखा के साथ, आदि) ले लो अगर यह काम करता है के लिए, या यदि आप वास्तव में एक Bézier वक्र के खिलाफ यह करना चाहते हैं, तो निम्न पर विचार: पर

  1. देखो बेज़ीयर वक्र की परिभाषा
  2. जो आप खोज रहे हैं वह एक नई स्थिति स्थिति पी को परिभाषित करना है, वर्तमान स्थिति से पी और स्पर्श स्थिति में परिवर्तन डी।
  3. आप टी के मामले में मूल पी (एक्स, वाई) (Bézier घटता पैरामीट्रिक कर रहे हैं), तो समस्या खोजने कितना टी डी के आधार पर बेज़ियर के अंतर को शामिल
  4. कुछ जोड़ने के लिए ऑफसेट हो जाता है अलग तरीके से व्यक्त करते हैं पी पर एफएन ऐसा करने का एक अच्छा तरीका हो सकता है। हां, कितना टी जोड़ा गया होगा वक्र वक्र के साथ बिंदु पी से एक सीधी रेखा आ रही थी।

संपादित करें: खंडों के बीच संक्रमण: प्रत्येक खंड [0,1 में टी है), तो आप पता लगा सकते हैं टी> = 1 और अगले खंड पर चलते, पिछले के अंत तक पी की स्थापना सेगमेंट, और उस बिंदु के संबंध में फिर से आंदोलन का मूल्यांकन। यदि आपके पास बहुत सारे छोटे अंक हैं, तो

+0

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

+0

इसे संभालने के संभावित तरीके के लिए ऊपर देखें। –

+0

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