Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

जार्विस मार्च एल्गोरिथम


जार्विस मार्च एल्गोरिथम का उपयोग डेटा बिंदुओं के दिए गए सेट से उत्तल पतवार के कोने बिंदुओं का पता लगाने के लिए किया जाता है।

डेटा सेट के सबसे बाएं बिंदु से शुरू करते हुए, हम उत्तल पतवार में बिंदुओं को वामावर्त घुमाकर रखते हैं। वर्तमान बिंदु से, हम वर्तमान बिंदु से उन बिंदुओं के उन्मुखीकरण की जाँच करके अगला बिंदु चुन सकते हैं। जब कोण सबसे बड़ा होता है, तो बिंदु चुना जाता है। सभी बिंदुओं को पूरा करने के बाद, जब अगला बिंदु प्रारंभ बिंदु हो, तो एल्गोरिथम को रोकें।

इनपुट और आउटपुट

इनपुट:अंकों का सेट:{(-7,8), (-4,6), (2,6), (6,4), (8,6), (7,-2), ( 4,-6), (8,-7),(0,0), (3,- 2),(6,-10),(0,6),(-9,-5),(-8 ,-2),(-8,0),(-10,3),(-2,2),(-10,4)}आउटपुट:उत्तल पतवार के सीमा बिंदु हैं:(-9, -5) ( 6, -10) (8, -7) (8, 6) (-7, 8) (-10, 4) (-10, 3)

एल्गोरिदम

findConvexHull(points, n)

इनपुट: अंक, अंकों की संख्या।

आउटपुट: उत्तल पतवार के कोने बिंदु।

प्रारंभ प्रारंभ:=अंक[0] प्रत्येक बिंदु के लिए i, यदि अंक[i].x  0, तो अगला:=अंक [i] colPts सरणी को साफ़ करें और यदि cal =0 है, तो यदि अगला अंक से वर्तमान के करीब है [i] , फिर अगले colPts में अगला जोड़ें:=अंक [i] और colPts में अंक जोड़ें [i] किए गए colPts में सभी आइटम जोड़ें यदि अगला =प्रारंभ होता है, तो परिणाम वर्तमान में लूप डालने के बगल में तोड़ें:=अगला किया वापसी परिणामअंत

उदाहरण

#शामिल करें बूल ऑपरेटर ==(बिंदु p2) { अगर (x ==p2.x &&y ==p2.y) वापसी 1; वापसी 0; } बूल ऑपरेटर <(कॉन्स्ट पॉइंट और पी 2) कॉन्स्ट {// डमी तुलना फ़ंक्शन सेट रिटर्न ट्रू में सॉर्ट करने के लिए उपयोग किया जाता है; }};int crossProduct(point a, point b, point c) { // ab वेक्टर से c का स्थान ढूँढता है int y1 =a.y - b.y; इंट y2 =a.y - c.y; इंट x1 =a.x - b.x; इंट x2 =a.x - c.x; वापसी y2*x1 - y1*x2; // यदि परिणाम <0, सी बाईं ओर,> 0, सी दाईं ओर, =0, ए, बी, सी कॉललाइनर हैं} अंतर दूरी (बिंदु ए, बिंदु बी, बिंदु सी) { int y1 =ay - by; इंट y2 =a.y - c.y; इंट x1 =a.x - b.x; इंट x2 =a.x - c.x; इंट आइटम1 =(y1*y1 + X1*x1); इंट आइटम2 =(y2*y2 + x2*x2); अगर (आइटम 1 ==आइटम 2) वापसी 0; // जब बी और सी एक और से समान दूरी पर हों अगर (आइटम 1 <आइटम 2) रिटर्न -1; // जब b रिटर्न 1 के करीब हो; // जब सी एक के करीब है सेट <बिंदु> findConvexHull (बिंदु बिंदु [], int n) {बिंदु प्रारंभ =अंक [0]; for(int i =1; i परिणाम; // सेट का उपयोग डुप्लिकेट बिंदुओं के प्रवेश से बचने के लिए किया जाता है result.insert(start); वेक्टर<बिंदु> *collinearPoints =नया वेक्टर<बिंदु>; जबकि (सच) {बिंदु अगला लक्ष्य =अंक [0]; for(int i =1; i 0) {// जब ith बिंदु बाईं ओर है अगला लक्ष्य =अंक [i]; CollinearPoints =नया वेक्टर <बिंदु>; // कोलीनियर पॉइंट्स को रीसेट करें} और अगर (वैल ==0) {//अगर तीन पॉइंट कॉललाइनर हैं अगर (दूरी (करंट, नेक्स्ट टार्गेट, पॉइंट्स [i]) <0) {// कोलीनियर लिस्ट कोलीनियर पॉइंट्स में करीब एक जोड़ें-> पुश_बैक (अगला लक्ष्य); अगला लक्ष्य =अंक [i]; } और { CollinearPoints-> push_back (अंक [i]); // जब ith बिंदु अगले लक्ष्य के करीब या समान हो } } सदिश <बिंदु> ::iterator; for(it =collinearPoints->begin(); it !=collinearPoints->end(); it++) { result.insert(*it); // परिणाम सेट करने के लिए कोलिनियर पॉइंट्स में सभी बिंदुओं को जोड़ें} अगर (अगला लक्ष्य ==प्रारंभ) // जब अगला बिंदु शुरू होता है तो इसका मतलब है, क्षेत्र को तोड़ना; result.insert (अगला लक्ष्य); वर्तमान =अगला लक्ष्य; } वापसी परिणाम;} इंट मुख्य () {बिंदु बिंदु [] ={{-7,8}, {-4,6}, {2,6}, {6,4}, {8,6}, {7 ,-2},{4,-6},{8,-7},{0,0}, {3,-2},{6,-10},{0,-6},{-9, -5},{-8,-2},{-8,0},{-10,3},{-2,2},{-10,4}}; इंट एन =18; सेट <बिंदु> परिणाम; परिणाम =findConvexHull (अंक, n); cout <<"उत्तल पतवार के सीमा बिंदु हैं:"< ::इसे पुनरावृत्त करें; for(it =result.begin(); it!=result.end(); it++) cout <<"(" <x <<"," <y <<") "; } 

आउटपुट

उत्तल पतवार के सीमा बिंदु हैं:(-9, -5) (6, -10) (8, -7) (8, 6) (-7, 8) (-10, 4) (-10, 3)

  1. फोर्ड फुलकर्सन एल्गोरिथम

    फोर्ड-फुलकर्सन एल्गोरिथम का उपयोग किसी दिए गए ग्राफ में प्रारंभ शीर्ष से सिंक शीर्ष तक अधिकतम प्रवाह का पता लगाने के लिए किया जाता है। इस ग्राफ में हर किनारे की क्षमता है। स्रोत और सिंक नाम के दो शीर्ष दिए गए हैं। स्रोत शीर्ष में सभी बाहरी किनारे हैं, कोई अंदरूनी किनारा नहीं है, और सिंक में सभी अंदर

  1. फ्लोयड वारशाल एल्गोरिथम

    Floyd-Warshall एल्गोरिदम का उपयोग किसी दिए गए भारित ग्राफ से सभी जोड़ी सबसे छोटी पथ समस्या को खोजने के लिए किया जाता है। इस एल्गोरिथम के परिणामस्वरूप, यह एक मैट्रिक्स उत्पन्न करेगा, जो ग्राफ़ में किसी भी नोड से अन्य सभी नोड्स के लिए न्यूनतम दूरी का प्रतिनिधित्व करेगा। सबसे पहले, आउटपुट मैट्रिक्स

  1. C++ में कंप्यूटर ग्राफिक्स में प्वाइंट क्लिपिंग एल्गोरिथम

    कंप्यूटर ग्राफिक्स कंप्यूटर स्क्रीन पर छवियों और ग्राफिक्स को चित्रित करने से संबंधित है। यहां, हम स्क्रीन को 2-डी समन्वय प्रणाली के रूप में देखते हैं। यह समन्वय प्रणाली ऊपर-बाएँ (0,0) से शुरू होती है और नीचे-दाएँ पर समाप्त होती है। विमान देखना कंप्यूटर ग्राफिक्स में ग्राफिक्स बनाने के लिए परिभाषित