दुर्भाग्य से मैं स्वीप लाइन एल्गोरिथ्म को समझने में अभी भी इतना मजबूत नहीं हूं । विषय पर सभी कागजात और पाठ्यपुस्तकें पहले ही पढ़ी जा चुकी हैं, हालांकि समझ अभी भी दूर है। बस इसे स्पष्ट करने के लिए मैं जितने अभ्यास कर सकता हूं उतने हल करने की कोशिश करता हूं। लेकिन, वास्तव में दिलचस्प और महत्वपूर्ण कार्य अभी भी मेरे लिए एक चुनौती है।
निम्नलिखित अभ्यास मैंने सर्वव्यापी जेफ एरिकसन द्वारा लाइन सेगमेंट इंटरसेक्शन के व्याख्यान नोट्स में पाया ।
अभ्यास 2. विमान में सर्कल को निर्धारित करने के लिए एक स्वीपलाइन एल्गोरिथ्म का वर्णन और विश्लेषण करें , चाहे कोई भी दो प्रतिच्छेद हो, समय में। प्रत्येक वृत्त अपने केंद्र और उसकी त्रिज्या द्वारा विशिष्ट by एड होता है, इसलिए इनपुट में तीन सरणियाँ , और । निम्न-स्तर की प्राथमिकताओं को सही ढंग से लागू करने के लिए सावधान रहें।
आइए एक जटिल चीज़ को आसान बनाने की कोशिश करें। हम मंडलियों के प्रतिच्छेदन के बारे में क्या जानते हैं? लाइनों के चौराहे के साथ क्या एनालॉग मिल सकता है। यदि वे निकटवर्ती हों, तो दो रेखाएँ एक दूसरे को काट सकती हैं। आज्ञा देना दूरी बीच की दूरी के बीच, और केंद्रों के केंद्र हैं। कुछ मामलों पर विचार करें:
केस 1: यदि तो कोई हल नहीं है, वृत्त अलग हैं।
केस 2: यदिफिर कोई हल नहीं है क्योंकि एक सर्कल दूसरे के भीतर समाहित है।
केस 3: यदि और तो वृत्त संयोग हैं और अनंत संख्या में समाधान हैं।
इसलिए, ऐसा लगता है कि चौराहे की स्थितियां तैयार हैं, निश्चित रूप से यह गलत परिस्थितियां हो सकती हैं। कृपया सही है अगर ऐसा है।
कलन विधि। अब हमें दो इंटरसेक्टिंग सर्किलों के बीच कुछ खोजने की जरूरत है। लाइन चौराहे के एनालॉग के साथ, हमें घटना कतार में स्थिति सम्मिलित करने और स्थिति को हटाने की आवश्यकता है। मान लें कि घटना बिंदु पहले और अंतिम बिंदुओं का x समन्वय है जो ऊर्ध्वाधर स्वीप लाइन को छूता है। पहले बिंदु पर हम सर्कल को स्टेटस में डालते हैं और चौराहे की जांच करते हैं (चेकिंग के लिए 3 मामलों का उल्लेख ऊपर है) निकटतम सर्कल के साथ, अंतिम बिंदु पर हम स्थिति से सर्कल हटाते हैं ।
ऐसा लगता है कि स्वीप लाइन एल्गोरिथ्म के लिए पर्याप्त है। अगर कुछ गलत है, या हो सकता है कि कुछ अलग हो, तो हमारे साथ अपने विचार साझा करने के लिए स्वतंत्र महसूस करें।
परिशिष्ट :
मैं एक सर्कल सम्मिलित करता हूं जब ऊर्ध्वाधर स्वीप लाइन पहली बार सर्कल को छूती है, और जब पिछली बार स्वीप लाइन इसे छूती है, तो स्थिति से एक सर्कल हटा दें। चौराहे की जांच निकटतम पिछले सर्कल के लिए की जानी चाहिए। यदि हमने एक सर्कल को स्टेटस में जोड़ा है और पहले से ही एक और सर्कल है जिसे हमने पहले जोड़ा था और यह अभी भी था, इसलिए विकृत सर्कल "बंद" नहीं था, इसलिए एक चौराहा हो सकता है।
status
वर्तमान में स्वीप लाइन को काटते हुए सर्कल बनाए रखता है? मान लीजिए कि आपके पास वर्तमान में 100 मंडल हैं status
, और आप एक प्रविष्टि घटना की प्रक्रिया करते हैं और 101 वें सर्कल को सम्मिलित करते हैं। चौराहे की जाँच के लिए आप कितने हलकों की तुलना करते हैं? तुलना करने के लिए आप किस मंडल को चुनते हैं?