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

C++ में एक खंड के अंदर रेखाओं का प्रतिच्छेदन बिंदु ज्ञात करें


मान लीजिए हमारे पास y = mx + c के रूप में रेखाओं का एक समूह है। इस रेखा और ऊर्ध्वाधर खंड द्वारा खंड बनाए गए हैं। हमें दिए गए खंड में मौजूद प्रतिच्छेदन बिंदु को ढूंढना है या नहीं। मान लीजिए रेखाएं इस प्रकार हैं -

L1 = y = x + 2

L2 = y = -x + 7

L3 = y = -3

L4 = y = 2x - 7

और ऊर्ध्वाधर खंड x = 2 से x = 4 तक दिया गया है।

यहां L1 और L2 के प्रतिच्छेदन बिंदु इस खंड के अंदर मौजूद हैं, इसलिए उत्तर सत्य होगा।

इस समस्या को हल करने के लिए, हम सॉर्टिंग तकनीक का उपयोग करेंगे। पहले, हम प्रत्येक रेखा का ऊर्ध्वाधर खंड की दोनों सीमाओं के साथ प्रतिच्छेदन बिंदु की गणना करेंगे। उसके बाद इसे एक जोड़ी के रूप में संग्रहीत करेंगे। हमें केवल प्रतिच्छेदन के y-निर्देशांक मानों को एक जोड़ी के रूप में संग्रहीत करने की आवश्यकता है क्योंकि x-निर्देशांक सीमा के बराबर हैं।

अब हम इन जोड़ियों को उनके बाएं सीमा के साथ प्रतिच्छेदन के आधार पर सॉर्ट करेंगे। उसके बाद, हम इन जोड़ियों पर एक-एक करके लूप करेंगे। यदि किन्हीं दो लगातार जोड़ियों के लिए, वर्तमान जोड़ी का दूसरा मान पिछली जोड़ी के दूसरे मान से कम है तो दिए गए ऊर्ध्वाधर खंड में एक प्रतिच्छेदन अवश्य होना चाहिए।

उदाहरण

#include<iostream> #include<algorithm> #include<map> using namespace std; class line {     public:         int slope, intercept;         line(){         }         line(int slope, int intercept) : slope(slope), intercept(intercept) {         } }; int getYCoordinate(line l, int x) {     return (l.slope * x + l.intercept); } bool hasIntersectionPoint(line lines[], int left_range, int right_range, int N) {     pair<int, int> y_border[N];     for (int i = 0; i < N; i++)         y_border[i] = make_pair(getYCoordinate(lines[i], left_range), getYCoordinate(lines[i], right_range));     sort(y_border, y_border + N);     for (int i = 1; i < N; i++) {         if (y_border[i].second < y_border[i - 1].second)             return true;     }     return false; } int main() {     int N = 4;     int slope[] = { 1, -1, 0, 2 };     int intercept[] = { 2, 7, -3, -7 };     line lines[N];     for (int i = 0; i < N; i++)         lines[i] = line(slope[i], intercept[i]);     int left_range = 2;     int right_range = 4;     if (hasIntersectionPoint(lines, left_range, right_range, N)) {         cout << "The intersection point is lies between " << left_range << " and " << right_range;     } else {         cout << "No intersection point is present in between " << left_range << " and " << right_range;     } }

आउटपुट

The intersection point is lies between 2 and 4

  1. C++ में दो रेखाओं के प्रतिच्छेदन बिंदु के लिए प्रोग्राम C++ में दो रेखाओं के प्रतिच्छेदन बिंदु के लिए प्रोग्राम

    दिए गए बिंदु A और B रेखा AB के अनुरूप हैं और बिंदु P और Q रेखा PQ के अनुरूप हैं; कार्य इन दो रेखाओं के बीच प्रतिच्छेदन बिंदु को खोजना है।नोट − बिंदु X और Y निर्देशांकों पर 2D तल में दिए गए हैं।यहां A(a1, a2), B(b1, b2) और C(c1, c2), D(d1, d2) वे निर्देशांक हैं जो दो अलग-अलग रेखाएं बनाते हैं और

  1. - C++ में जांचें कि कोई बिंदु वृत्त के अंदर है या नहीं

    मान लीजिए एक वृत्त दिया गया है (केंद्र के निर्देशांक और त्रिज्या), और एक अन्य बिंदु भी दिया गया है। हमें यह पता लगाना है कि बिंदु वृत्त के अंदर है या नहीं। इसे हल करने के लिए, हमें दिए गए बिंदु की वृत्त के केंद्र से दूरी निकालनी होगी। यदि वह दूरी त्रिज्या से कम या बराबर है, तो बिंदु वृत्त के अंदर है

  1. - C++ प्रोग्राम: दो श्रृंखलाओं का पहला टकराव बिंदु ज्ञात करना

    इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो पहला टकराव बिंदु यानी वह पहला बिंदु ज्ञात करता है जो दोनों श्रृंखलाओं में हो। इसमें, हमें पांच वेरिएबल a, b, c, d और n दिए जाएंगे। हमें इनसे n अंकों की दो अंकगणितीय प्रगति श्रृंखलाएं बनानी होंगी b, b+a, b+2a, ... b+(n-1)a d, d+c, d+2c, ... d+(n-1)c और