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

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


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

नोट − बिंदु X और Y निर्देशांकों पर 2D तल में दिए गए हैं।

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

यहां 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)

  1. C++ प्रोग्राम बाईसेक्शन मेथड के लिए C++ प्रोग्राम बाईसेक्शन मेथड के लिए

    फंक्शन f(x) दिया गया है जिसमें संख्या a और b हैं जहां, f(a) * f(b) > 0 और फंक्शन f(x) a और b के बीच होना चाहिए यानी f(x) = [a, b]। कार्य बाईसेक्शन मेथड का उपयोग करके फंक्शन f(x) में अंतराल a और b के बीच स्थित रूट का मान खोजना है।बाईसेक्शन मेथड क्या है?बाईसेक्शन मेथड का उपयोग फंक्शन f(x) में दिए ग

  1. C++ में पिरामिड के आयतन का प्रोग्राम C++ में पिरामिड के आयतन का प्रोग्राम

    पिरामिड के बेस के प्रकार के आधार पर भुजाएं दी गई हैं, कार्य पिरामिड का आयतन गणना करना है।पिरामिड एक 3-D आकृति है जिसकी बाहरी सतहें त्रिकोणीय हैं जो सामान्य बिंदु पर मिलती हैं जिससे पिरामिड का तीक्ष्ण किनारा बनता है। पिरामिड का आयतन उसके बेस के प्रकार पर निर्भर करता है।पिरामिड के बेस के विभिन्न प्रका

  1. C++ में क्विकसॉर्ट प्रोग्राम C++ में क्विकसॉर्ट प्रोग्राम

    क्विकसॉर्ट क्या है? क्विकसॉर्ट एक सॉर्टिंग तकनीक है जो अनसॉर्टेड सूची (सरणी) को सॉर्ट करने के लिए तुलनाओं का उपयोग करती है। क्विकसॉर्ट को पार्टीशन एक्सचेंज सॉर्ट के नाम से भी जाना जाता है। यह एक स्थिर सॉर्ट नहीं है, क्योंकि समान सॉर्ट आइटम्स का सापेक्ष क्रम संरक्षित नहीं रहता। क्विकसॉर्ट एक सरणी प