यदि एक सर्कल और अवतल बहुभुज प्रतिच्छेदन मैं परीक्षण कैसे करूं?


19

मेरे पास एक बहुभुज (कभी-कभी उत्तल होता है, लेकिन अक्सर अवतल होता है), और अलग-अलग राडियों के साथ हलकों का एक गुच्छा होता है। मैं यह कैसे पता लगा सकता हूं कि यदि कोई सर्कल बहुभुज के साथ एक अंतर को काट / ओवरलैप कर रहा है?

मैं अपने अवतल बहुभुज को उत्तल टुकड़ों में विभाजित कर सकता था। क्या इससे मदद मिलेगी?

जवाबों:


26

इस समस्या के दो मामले हैं। पहला चौराहा है और दूसरा जो ओवरलैपिंग (युक्त) है।

पहला (सर्कल के अंदर चौराहा / बहुभुज):

सर्कल के केंद्र के लिए बहुभुज के हर किनारे पर निकटतम बिंदु खोजें। यदि केंद्र से निकटतम बिंदु के बीच कोई दूरी त्रिज्या से कम है, तो आपको चौराहा या ओवरलैप मिला।

दूसरा (सर्कल पूरे बहुभुज में है): सर्कल सेंटर से दाईं ओर (या बाएं / ऊपर / नीचे) और रे / सेगमेंट (बहुभुज किनारों) के चौराहों को शूट करें। अगर चौराहा गिनती भी सर्कल है बहुभुज के बाहर है। अगर यह अजीब सर्कल के अंदर है।

मैं इस मामले के लिए व्याख्यान से चित्र साझा करूंगा:

यहाँ छवि विवरण दर्ज करें

और एकवचन मामलों की देखभाल करें।

आशा है कि यह मदद करेगा।


संपादित करें: मुझे लगता है कि चित्र में क्रेडिट जोड़ना उचित है। लेखक पेट्र फेलकेल, प्राग में चेक तकनीकी विश्वविद्यालय में सहायक प्रोफेसर हैं


मुझे नहीं लगता कि यह सिर्फ "शूटिंग" के लिए एक किरण को दाईं ओर काम करेगा। हो सकता है कि मैं आपके दृष्टिकोण को गलत समझूं
bummzack

2
हां लेकिन यह पहले मामले में वर्णित है। शूटिंग रे केवल बहुभुज युक्त वृत्त (मेरे विवरण में दूसरा मामला) को हल करेगा। आपको दोनों मामलों का परीक्षण करना होगा। यह तेज़, लागू करने में आसान है और किसी भी मेमोरी की आवश्यकता नहीं है।
नोटाबिन

1
मुझे खेद है कि मैंने "शीर्ष" के साथ "बढ़त" को भ्रमित किया है और इसलिए आपकी पहली जांच को गलत तरीके से समझा है। इसे सही ढंग से पढ़ने पर यह काम करता है :)
बंमज़ैक

7

पहला कदम, जैसा कि आप अनुमान लगाते हैं, अवतल बहुभुज को कई उत्तल लोगों में विभाजित करना है। इसका कारण यह है कि आप अलग-अलग अक्ष प्रमेय का उपयोग करेंगे , जो केवल उत्तल बहुभुज पर काम करता है।

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

यहां संपूर्ण एल्गोरिथ्म पर जाने के बजाय, मेटानेट सॉफ़्टवेयर (एन / एन + के निर्माताओं) में सैट का उपयोग करके टकराव का पता लगाने के लिए एक अच्छा ट्यूटोरियल है , जिसमें से तीसरा भाग सैट को कवर करता है जब ऑब्जेक्ट में से एक सर्कल होता है


क्या आपके पास अवतल बहुभुज को उत्तल बहुभुज में विभाजित करने का संदर्भ है? आपके द्वारा दिए गए SAT लिंक में किसी भी प्रकार का उल्लेख नहीं है।
एहसानुल

यह वास्तव में बहुभुज की ज्यामिति के आधार पर एक बहुत ही जटिल समस्या है, लेकिन सभी 3 डी इंजन ऐसा करते हैं, क्योंकि हार्डवेयर आम तौर पर केवल कोपलानर क्वाड्स और त्रिकोण प्रस्तुत कर सकते हैं, बहुभुज नहीं।
SplinterReality

1
@ एहसानुल: en.wikipedia.org/wiki/Polygon_triangulation एक युगल लोकप्रिय दृष्टिकोण का वर्णन करता है।

0

यहाँ मैं क्या कर रहा हूँ।

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