कई बहुभुजों के साथ अक्ष प्रमेय को अलग करना?


9

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

यहां सामान्य किनारे मामले हैं जो सही ढंग से काम नहीं करते हैं:

धार के मामले

क्या इस समस्या के लिए एक प्रसिद्ध समाधान है? सभी मैं पा सकता हूँ लोग कह रहे हैं "बस प्रत्येक बहुभुज पर SAT प्रदर्शन" लेकिन यह शायद ही कभी न्यूनतम अनुवाद वेक्टर का उत्पादन करता है ।

किसी भी मदद को बहुत सराहा जाएगा।


एक विचार, कि मैं वास्तव में परीक्षण करने के लिए आसपास नहीं गया हूं, यह है कि कुछ पृथक्करण कुल्हाड़ियों - जो आपको बगल के बहुभुज में ले जाते हैं - को कभी भी न्यूनतम नहीं माना जा सकता है। फिर किसी तरह का दोहराया-परीक्षण अच्छे परिणाम देगा (संभवतः लूप में फंसने से रोकने के लिए कुछ प्रकार के फीफो और / या पुनरावृत्ति सीमा के साथ)।
एंड्रयू रसेल

इसके संस्करण को हल करने के लिए एक और भी मुश्किल है जब किसी आकृति का एक छोर केवल वार्षिकी द्वारा आंशिक रूप से कवर किया जाता है। उदाहरण के लिए, ऊपरी-दाईं ओर छवि, यदि मध्य वर्ग दाईं ओर बड़ा हो, तो एक बड़ा आयत होगा। यह मेरे द्वारा उपयोग किए जाने वाले कुछ कोड के आउटपुट के समान है, जो दसियों हजार कब्जे वाली / गैर-कब्जे वाली कोशिकाओं को ले जाता है और सौ से अधिक टकराव की आकृतियों को कम कर देता है
रिचर्ड टिंगल

जवाबों:


2

आदर्श रूप में, आप अपने वातावरण को बहुभुज से बाहर नहीं बनाते हैं। आप इसे किनारों से बनाते हैं (जो शायद आप बहुभुजों के एक सेट से गणना करते हैं)। उदाहरण के लिए, आपके पहले उदाहरण में, एक एकल विकर्ण बढ़त है; अंतिम उदाहरण में, बॉक्स एक क्षैतिज छोर पर आराम कर रहा है।

यह तथ्य कि आपके संपादक या उपकरण एक स्तर बनाने के लिए छोटे, व्यक्तिगत आकार का उपयोग करते हैं, रनटाइम को प्रभावित नहीं करना चाहिए।

थोड़ा सरल दृष्टिकोण बस आधार आकृतियों के "आंतरिक" किनारों को हटा देगा। आपके अंतिम उदाहरण के लिए, "मंजिल" बक्से के बीच दो किनारे हैं; टकराव का पता लगाने के दौरान इन पर ध्यान न दें।

आप बॉक्स 2 डी प्रलेखन में धारा 4.5 (किनारों और किनारे की श्रृंखला) को पढ़कर कुछ बेहतर चित्र और कुछ कार्यान्वयन के विचार पा सकते हैं ।


2
किनारों का उपयोग करना (विशेष रूप से किनारों, यह किनारे की श्रृंखलाओं के साथ थोड़ा बेहतर है) का प्रमुख नुकसान यह है कि भौतिकी वस्तुओं के लिए स्तर ज्यामिति के अंदर गड़बड़ करना बहुत आसान हो जाता है।
एंड्रयू रसेल

1
@AndrewRussell: सामान्य टनलिंग फिक्स के साथ उन समस्याओं से बचा जाता है। सुनिश्चित करें कि आपकी चलती वस्तुओं में एक काफी सभ्य मात्रा / क्षेत्र है, उनकी अधिकतम गति प्रति फ्रेम कम रखें ताकि वे ~ आधे से कम उनके सबसे छोटे आयाम को स्थानांतरित न कर सकें (या यदि आपको इसे तेज गति से चलाने की आवश्यकता है तो कई बार कदम बढ़ाएं), से बचें वास्तव में तीक्ष्ण दरारें और आपके स्तर की ज्यामिति में, संकल्प को कई बार पुनरावृति करते हैं जब तक कि आप "सुरक्षित" अंतिम स्थान, आदि पर एकाग्र नहीं हो जाते हैं
सीन मिडिलडिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.