मान लीजिए कि दो लाइन-सेगमेंट दिए गए हैं। बिंदु p1, p2 पहली पंक्ति खंड से और q1, q2 दूसरी पंक्ति खंड से। हमें यह जांचना होगा कि दोनों रेखाखंड प्रतिच्छेद कर रहे हैं या नहीं।
हम कह सकते हैं कि इन मामलों के संतुष्ट होने पर दोनों रेखाखंड प्रतिच्छेद कर रहे हैं:
- जब (p1, p2, q1) और (p1, p2, q2) में एक अलग अभिविन्यास हो और
- (q1, q2, p1) और (q1, q2, p2) एक अलग अभिविन्यास है।
एक और स्थिति है जब (p1, p2, q1), (p1, p2, q2), (q1, q2, p1), (q1, q2, p2) संरेख हैं।
इनपुट और आउटपुट
इनपुट:दो लाइन-सेगमेंट के पॉइंटलाइन-सेगमेंट 1:(0, 0) से (5, 5)लाइन-सेगमेंट 2:(2, -10) से (3, 10)आउटपुट:लाइन्स इंटरसेक्ट कर रही हैंपूर्व>एल्गोरिदम
दिशा (ए, बी, सी)
इनपुट: तीन अंक।
आउटपुट: जांचें कि क्या वे समरेखीय हैं या वामावर्त या दक्षिणावर्त दिशा में हैं।
प्रारंभ वैल:=(बाय-एई)*(सीएक्स-बीएक्स)-(बीएक्स-एएक्स)*(साइ-बाय) अगर वैल =0 है, तो वैल <0 होने पर कोलिनियर लौटाएं, फिर एंटी-क्लॉकवाइज रिटर्न लौटाएं दक्षिणावर्तअंतisIntersect(l1, l2)
इनपुट: दो रेखाखंड, प्रत्येक रेखा में दो बिंदु p1 और p2 हैं।
आउटपुट: सच है, जब वे प्रतिच्छेद कर रहे होते हैं।
आरंभ dir1 =दिशा(l1.p1, l1.p2, l2.p1); dir2 =दिशा (l1.p1, l1.p2, l2.p2); dir3 =दिशा (l2.p1, l2.p2, l1.p1); dir4 =दिशा (l2.p1, l2.p2, l1.p2); यदि dir1 ≠ dir2 और dir3 dir4, फिर सत्य लौटते हैं यदि dir1 =0 और l2.p1 लाइन l1 पर हैं, तो सही लौटें यदि dir2 =0 और l2.p2 लाइन l1 पर, फिर सही लौटें यदि dir3 =0 और l1 .p1 लाइन l2 पर, फिर सही लौटें अगर dir4 =0 और l1.p2 लाइन l2 पर, फिर सही रिटर्न असत्य लौटाएंउदाहरण
#includeनेमस्पेस std का उपयोग करके; स्ट्रक्चर प्वाइंट {int x, y;}; स्ट्रक्चर लाइन {प्वाइंट p1, p2;}; bool onLine (लाइन l1, पॉइंट p) {// जांचें कि क्या p ऑन है लाइन या नहीं अगर(px <=max(l1.p1.x, l1.p2.x) &&px <=min(l1.p1.x, l1.p2.x) &&(py <=max(l1.p1) .y, l1.p2.y) &&py <=min(l1.p1.y, l1.p2.y))) सही लौटें; झूठी वापसी;}इंट डायरेक्शन (प्वाइंट ए, प्वाइंट बी, प्वाइंट सी) { इंट वैल =(बी.वाई-ए.वाई)*(सी.एक्स-बी.एक्स)-(बी.एक्स-ए.एक्स)*(सी.वाई-बी.वाई); अगर (वैल ==0) वापसी 0; // कॉलिनियर और अगर (वैल <0) रिटर्न 2; // वामावर्त दिशा वापसी 1; // दक्षिणावर्त दिशा} बूल इंटरसेक्ट (पंक्ति l1, पंक्ति l2) {// दो पंक्तियों के लिए चार दिशा और अन्य रेखा के बिंदु int dir1 =दिशा (l1.p1, l1.p2, l2.p1); int dir2 =दिशा (l1.p1, l1.p2, l2.p2); int dir3 =दिशा (l2.p1, l2.p2, l1.p1); int dir4 =दिशा (l2.p1, l2.p2, l1.p2); if(dir1 !=dir2 &&dir3 !=dir4) सच लौटते हैं; // वे प्रतिच्छेद कर रहे हैं if(dir1==0 &&onLine(l1, l2.p1)) // जब लाइन 2 के p2 लाइन 1 पर हैं तो सही है; if(dir2==0 &&onLine(l1, l2.p2)) // जब लाइन 2 का p1 लाइन 1 पर होता है तो सही होता है; if(dir3==0 &&onLine(l2, l1.p1)) // जब लाइन 1 का p2 लाइन 2 पर होता है तो सही होता है; if(dir4==0 &&onLine(l2, l1.p2)) // जब लाइन 1 का p1 लाइन 2 पर होता है तो सही होता है; झूठी वापसी;} इंट मुख्य () {लाइन l1 ={{0,0}, {5, 5}}; पंक्ति l2 ={{2,-10}, {3, 10}}; if(isIntersect(l1, l2)) cout <<"लाइनें प्रतिच्छेद कर रही हैं"; और cout <<"लाइनें प्रतिच्छेद नहीं कर रही हैं";} आउटपुट
रेखाएं प्रतिच्छेद कर रही हैं