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

जांचें कि क्या दो रेखा खंड प्रतिच्छेद करते हैं


मान लीजिए कि दो लाइन-सेगमेंट दिए गए हैं। बिंदु 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 <<"लाइनें प्रतिच्छेद नहीं कर रही हैं";}

आउटपुट

रेखाएं प्रतिच्छेद कर रही हैं

  1. जाँच करें कि कोई रेखा C++ में वृत्त को स्पर्श करती है या प्रतिच्छेद करती है

    मान लीजिए हमारे पास एक वृत्त और दूसरी सीधी रेखा है। हमारा कार्य यह पता लगाना है कि रेखा वृत्त को स्पर्श करती है या उसे काटती है, अन्यथा वह बाहर से होकर गुजरती है। तो नीचे की तरह तीन अलग-अलग मामले हैं - यहां हम इसे निम्नलिखित चरणों द्वारा हल करेंगे। ये नीचे की तरह हैं - केंद्र के बीच लंबवत P ढूंढ

  1. मैं Matplotlib में दो लाइन खंडों के प्रतिच्छेदन का पता कैसे लगा सकता हूं?

    Matplotlib में दो रेखा खंडों के प्रतिच्छेदन को खोजने के लिए और उस बिंदु के माध्यम से क्षैतिज और लंबवत रेखाओं को पार करने के लिए, हम निम्नलिखित कदम उठा सकते हैं - आकृति का आकार सेट करें और सबप्लॉट के बीच और आसपास पैडिंग समायोजित करें। ढलान का उपयोग करके दो पंक्तियां बनाएं (m1, m2) और इंटरसेप्ट करता

  1. आप Matplotlib में दो बिंदुओं के बीच रेखा खंड कैसे बनाते हैं?

    Matplotlib में दो बिंदुओं के बीच रेखा खंड बनाने के लिए, हम निम्नलिखित कदम उठा सकते हैं आकृति का आकार सेट करें और सबप्लॉट के बीच और आसपास पैडिंग समायोजित करें। दो बिंदु बनाने के लिए, दो सूचियां बनाएं। निकालें x और y point1 . से मान और point2 । प्लॉट x और y प्लॉट () . का उपयोग करके मान विधि। दोनों बि