2011-09-10 8 views
7

मेरे पास एक उत्तल बहुभुज एबीसीडीई है ... (इसमें अंक की संख्या हो सकती है)। मुझे अपने सभी कशेरुकाओं को क्रमबद्ध करने की आवश्यकता है ताकि किनारों में से कोई भी अंतर न हो।
उदाहरण:पॉलीगॉन के अंक छंटनी

A _____ B 
    \ /
    \/
    X 
/\ 
    /___\ 
C  D 

एबीसीडी क्रम में बहुभुज अन्तर्विभाजक गया है किनारों। तथापि ABDC क्रम में:

A _____ B 
    | | 
    | | 
    | | 
    | | 
    |___| 
C  D 

किनारों में से कोई भी एक दूसरे को काटना तो ABDC उम्मीद उत्पादन होता है।

मैं यह कैसे कर सकता हूं?

+0

भी देखें: http://stackoverflow.com/q/828905/310574 – Gabe

उत्तर

8

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

  1. न्यूनतम और अधिकतम एक्स मूल्य के साथ दो चरम बिन्दु चुनें, (उन्हें फोन एक्स मिनट और एक्स अधिकतम) और उनके बीच की रेखा खींचें। इस मामले में जहां आपके पास चरम पर एक ही एक्स मान के साथ कई बिंदु हैं, अधिकतम वाई मान के साथ न्यूनतम वाई मान और एक्स अधिकतम के साथ एक्स मिनट चुनें।
  2. स्प्लिट दो उप सूचियों जहां रेखा से नीचे अंक के सभी को जोड़ने एक्स मिनट और एक्स अधिकतम में अंकों की सूची एक सूची में हैं और है कि रेखा के ऊपर उन सभी किसी अन्य रूप में कर रहे हैं। पहली सूची में एक्स मिनट और एक्स अधिकतम दूसरे में शामिल करें।
  3. एक्स मान के आरोही क्रम में पहली सूची क्रमबद्ध करें। यदि आपके पास एक ही एक्स मान के साथ एकाधिक अंक हैं, तो उन्हें आरोही Y मान में क्रमबद्ध करें। यह केवल एक्स एक्सअधिकतम के समान एक्स घटक वाले बिंदुओं के लिए होना चाहिए क्योंकि बहुभुज उत्तल है।
  4. एक्स मान के अवरोही क्रम में दूसरी सूची को सॉर्ट करें। दोबारा, एक ही एक्स मान वाले एकाधिक बिंदुओं की स्थिति में अवरोही वाई मान में क्रमबद्ध करें (जो केवल एक्स घटक एक्स मिनट के साथ बिंदुओं के लिए होना चाहिए।
  5. दोनों सूचियों को एक साथ जोड़ना (इससे कोई फर्क नहीं पड़ता कि पहले कौन सा है ।)
+1

FYI करें: बस तरह बिल्कुल नहीं त्रिज्यात तरह अंक के लिए उलटा ट्रिग कार्यों का उपयोग करने की आवश्यकता है आप कर सकते हैं। वास्तविक मूल्य (y - y0)/(x-x0) के आधार पर। यह ग्राहम स्कैन –

+0

@ फ़ू बह का कर्नेल है: यह इंगित करने के लिए धन्यवाद। यह आपके उत्तर से स्पष्ट नहीं था। बीटीडब्लू, क्या आपने डाउनवोट किया उत्तर? यदि हां, तो आपने इसे क्यों संपादित किया? – andand

+0

मैंने इसे संपादित किया क्योंकि मैं अपने डाउनवोट को पूर्ववत करना चाहता था, फिर बाद में ऐसा करना भूल गया। मैंने इसे अभी हटा दिया है। –

8

बहुभुज पर दो बिंदुओं का चयन करें। लाइन के मध्य बिंदु उस बहुभुज के भीतर निहित होगा। उस बिंदु को एम

फिर, एम (एक्स अक्ष के साथ) के कोण के आधार पर बिंदुओं को क्रमबद्ध करें, उस क्रम में एम Iterating से दूरी पर आधारित degeneracy तोड़ने से यह सुनिश्चित करता है कि कोई भी दो किनारों का अंतर नहीं होगा।

+0

शानदार विचार – mr5