दिए गए बिंदु A और B रेखा AB के अनुरूप हैं और बिंदु P और Q रेखा PQ के अनुरूप हैं; कार्य इन दो रेखाओं के बीच प्रतिच्छेदन बिंदु को खोजना है।
नोट − बिंदु X और Y निर्देशांकों पर 2D तल में दिए गए हैं।

यहां A(a1, a2), B(b1, b2) और C(c1, c2), D(d1, d2) वे निर्देशांक हैं जो दो अलग-अलग रेखाएं बनाते हैं और P(p1, p2) प्रतिच्छेदन बिंदु है। (केवल प्रतिच्छेदन बिंदु के आरेखीय व्याख्या के लिए)
प्रतिच्छेदन बिंदु कैसे खोजें −
उपरोक्त आकृति को लें −
उदाहरण
तो (a1, a2), (b1, b2), (c1, c2), (d1, d2) का उपयोग करके हम गणना करेंगे: A1 = b2 - a2 B1 = a1 - b1 C1 = (A1 * a1) + (B1 * a1) A2 = d2 - c2 B2 = c1 - d1 C2 = (A2 * c1) + (B2 * c2) मान लें दी गई रेखाएं हैं: 1. A1x + B1y = C1 2. A2x + B2y = C2 अब, प्रतिच्छेदन बिंदु खोजने के लिए, हमें इन 2 समीकरणों को हल करना होगा। हम 1 को B1 से और 2 को B2 से गुणा करेंगे, तो हमें मिलेगा: A1B2x +B1B2y = C1B2 A1B1x +B2B1y = C1B1 इन्हें घटाने पर हमें मिलता है, (A1B2 - A2B1)x = C1B2-C2B1
यह हमें x का मान देता है, और इसी तरह हमें y का मान मिलेगा जो प्रतिच्छेदन बिंदु p1 होगा जो x है और p2 जो y है।
नोट − उपरोक्त सूत्र दो रेखाओं का प्रतिच्छेदन बिंदु देगा, लेकिन यदि रेखाओं के बजाय खंड दिए गए हैं, तो हमें पुनः जांच करनी होगी कि गणना किया गया बिंदु रेखा खंड पर स्थित है या नहीं।
- min (x1, x2) <= x <= max (x1, x2)
- min (y1, y2) <= y <= max (y1, y2)
उपरोक्त समस्या को हल करने के लिए हम जिस दृष्टिकोण का उपयोग कर रहे हैं −
- इनपुट मान लें।
- सारणिक खोजें जो a1 * b2 - a2 * b1 है
- जांचें कि क्या सारणिक = 0 है तो रेखाएं समानांतर हैं
- यदि सारणिक शून्य नहीं है तो x = (c1 * b2 - c2 * b1) और y = (a1 * c2 - a2 * c1)
- परिणाम वापस करें और प्रिंट करें।
एल्गोरिदम
शुरुआत चरण 1-> x और y निर्देशांक प्रिंट करने के लिए फ़ंक्शन घोषित करें void display(mk_pair par) par.first और par.second प्रिंट करें चरण 2-> प्रतिच्छेदन बिंदु की गणना करने के लिए फ़ंक्शन घोषित करें mk_pair intersection(mk_pair A, mk_pair B, mk_pair C, mk_pair D) double a = B.second - A.second घोषित करें double b = A.first - B.first घोषित करें double c = a*(A.first) + b*(A.second) घोषित करें double a1 = D.second - C.second घोषित करें double b1 = C.first - D.first घोषित करें double c1 = a1*(C.first)+ b1*(C.second) घोषित करें double det = a*b1 - a1*b घोषित करें IF (det = 0) make_pair(FLT_MAX, FLT_MAX) वापस करें अंत अन्यथा double x = (b1*c - b*c1)/det घोषित करें double y = (a*c1 - a1*c)/det घोषित करें make_pair(x, y) वापस करें अंत चरण 3-> main() में mk_pair q = make_pair(2, 1) के रूप में बिंदुओं के लिए फ़ंक्शन घोषित करें और कॉल करें IF (inter.first = FLT_MAX AND inter.second = FLT_MAX) "दी गई रेखाएं समानांतर हैं" प्रिंट करें अंत अन्यथा display(inter) कॉल करें अंत रुकें
उदाहरण
#include <bits/stdc++.h> using namespace std; #define mk_pair pair<double, double> // x और y निर्देशांक प्रदर्शित करें void display(mk_pair par) { cout << "(" << par.first << ", " << par.second << ")" << endl; } mk_pair intersection(mk_pair A, mk_pair B, mk_pair C, mk_pair D) { // रेखा AB को a1x + b1y = c1 के रूप में दर्शाया गया है double a = B.second - A.second; double b = A.first - B.first; double c = a*(A.first) + b*(A.second); // रेखा CD को a2x + b2y = c2 के रूप में दर्शाया गया है double a1 = D.second - C.second; double b1 = C.first - D.first; double c1 = a1*(C.first)+ b1*(C.second); double det = a*b1 - a1*b; if (det == 0) { return make_pair(FLT_MAX, FLT_MAX); } else { double x = (b1*c - b*c1)/det; double y = (a*c1 - a1*c)/det; return make_pair(x, y); } } int main() { mk_pair q = make_pair(2, 1); mk_pair r = make_pair(2, 7); mk_pair s = make_pair(4, 4); mk_pair t = make_pair(6, 4); mk_pair inter = intersection(q, r, s, t); if (inter.first == FLT_MAX && inter.second==FLT_MAX) { cout << "दिए गए रेखाएं AB और CD समानांतर हैं.\n"; } else { cout << "दिए गए रेखाओं AB और CD का प्रतिच्छेदन है: "; display(inter); } return 0; }आउटपुट
दिए गए रेखाओं AB और CD का प्रतिच्छेदन है: (2, 4)