उत्तल पतवार न्यूनतम बंद क्षेत्र है जो सभी दिए गए डेटा बिंदुओं को कवर कर सकता है।
ग्राहम के स्कैन एल्गोरिथम उत्तल पतवार के कोने बिंदु पाएंगे। इस एल्गोरिथम में, सबसे पहले, सबसे कम बिंदु चुना जाता है। वह बिंदु उत्तल पतवार का प्रारंभिक बिंदु है। शेष n-1 शीर्षों को प्रारंभ बिंदु से वामावर्त दिशा के आधार पर क्रमबद्ध किया जाता है। यदि दो या दो से अधिक बिंदु एक ही कोण बना रहे हैं, तो एक ही कोण के सभी बिंदुओं को प्रारंभ से सबसे दूर के बिंदु को छोड़कर हटा दें।
शेष बिंदुओं से, उन्हें स्टैक में धकेलें। और स्टैक से आइटम को एक-एक करके हटा दें, जब स्टैक टॉप पॉइंट, सेकेंड टॉप पॉइंट और नए चयनित पॉइंट पॉइंट्स के लिए ओरिएंटेशन एंटी-क्लॉकवाइज नहीं है, तो चेक करने के बाद, पॉइंट्स [i] को स्टैक में डालें।
इनपुट और आउटपुट
इनपुट:अंकों का सेट:{(-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) (-10, 3) (-10, 4) (-7, 8) (8, 6) (8, -7) (6, -10)
एल्गोरिदम
findConvexHull(points, n)
इनपुट - अंकों का समूह, अंकों की संख्या।
आउटपुट - उत्तल पतवार के सीमा बिंदु।
शुरू minY:=पॉइंट्स[0].y min:=0 for i :=1 to n-1 do y :=points[i].y if yउदाहरण
#शामिल करें#शामिल करें // दूसरे दो बिंदुओं के लिए उपयोग किया जाता है सेकेंडटॉप (स्टैक <पॉइंट> और एसटीके) {बिंदु अस्थायी बिंदु =stk.top (); stk.pop (); बिंदु रेस =stk.top (); // दूसरा शीर्ष तत्व stk.push (tempPoint) प्राप्त करें; // पिछले शीर्ष को फिर से दबाएं res;}int SquaredDist(point p1, point p2) {रिटर्न ((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y )*(p1.y-p2.y));}int दिशा (बिंदु a, बिंदु b, बिंदु c) { int val =(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y -द्वारा); अगर (वैल ==0) वापसी 0; // कॉलिनियर और अगर (वैल <0) रिटर्न 2; // वामावर्त दिशा वापसी 1; // दक्षिणावर्त दिशा} int COMP (स्थिरांक शून्य * बिंदु 1, स्थिरांक शून्य * बिंदु 2) {बिंदु * p1 =(बिंदु *) बिंदु 1; बिंदु *p2 =(बिंदु*)बिंदु2; int dir =दिशा (p0, *p1, *p2); अगर (डीआईआर ==0) वापसी (स्क्वेर्डडिस्ट (पी 0, * पी 2)> =स्क्वायरडिस्ट (पी 0, * पी 1))? -1:1; वापसी (डीआईआर ==2)? -1 1; }वेक्टर<बिंदु>findConvexHull(point points[], int n) {वेक्टर<पॉइंट> उत्तलHullPoints; int minY =अंक [0]। y, न्यूनतम =0; for(int i =1; i stk; stk.push (अंक [0]); stk.push (अंक [1]); stk.push (अंक [2]); for(int i =3; i परिणाम; परिणाम =findConvexHull (अंक, n); cout <<"उत्तल पतवार के सीमा बिंदु हैं:"< ::इसे पुनरावर्तक; for(it =result.begin(); it!=result.end(); it++) cout <<"(" < x <<"," < y <<") "; }पूर्व> आउटपुट
उत्तल पतवार के सीमा बिंदु हैं:(-9, -5) (-10, 3) (-10, 4) (-7, 8) (8, 6) (8, -7) (6, - 10)