কম্পিউটার টিউটোরিয়াল

দুটি রেখার ছেদবিন্দু খুঁজে বের করার জন্য C++ প্রোগ্রাম


রেখা AB-এর জন্য বিন্দু A এবং B এবং রেখা PQ-এর জন্য বিন্দু P এবং Q দেওয়া আছে; এই দুটি রেখার মধ্যে ছেদবিন্দু খুঁজে বের করা হবে।

দ্রষ্টব্য - বিন্দুগুলো ২D সমতলে X এবং Y 좌표-এ দেওয়া আছে।

দুটি রেখার ছেদবিন্দু খুঁজে বের করার জন্য 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
এখন, ছেদবিন্দু খুঁজে বের করতে হলে এই ২টি সমীকরণ সমাধান করতে হবে।
আমরা ১কে B1 দিয়ে এবং ২কে B2 দিয়ে গুণ করব, তাহলে পাব:
A1B2x + B1B2y = C1B2
A1B1x + B2B1y = C1B1
এগুলো বিয়োগ করলে পাব, (A1B2 - A2B1)x = C1B2 - C2B1

এটি আমাদের x-এর মান দেবে, এবং একইভাবে y-এর মান পাওয়া যাবে যা ছেদবিন্দু p1 (x) এবং p2 (y) হবে।

দ্রষ্টব্য - উপরের সূত্রটি দুটি রেখার ছেদবিন্দু দেবে, কিন্তু যদি রেখাংশ (segments) দেওয়া থাকে, তবে আমাদের আবার চেক করতে হবে যে গণনা করা বিন্দুটি রেখাংশের ওপর অবস্থিত কিনা।

  • min(x1, x2) <= x <= max(x1, x2)
  • min(y1, y2) <= y <= max(y1, y2)

সমস্যা সমাধানের পদ্ধতি -

  • ইনপুট মানগুলো নেওয়া।
  • নির্ণায়ক (determinant) খুঁজে বের করা যা হলো a1 * b2 - a2 * b1
  • যদি নির্ণায়ক = 0 হয়, তবে রেখাগুলো সমান্তরাল।
  • যদি নির্ণায়ক শূন্য না হয়, তবে x = (c1 * b2 - c2 * b1) এবং y = (a1 * c2 - a2 * c1)
  • ফলাফল রিটার্ন এবং প্রিন্ট করা।

অ্যালগরিদম

শুরু
ধাপ ১ -> x এবং y 좌표 প্রিন্ট করার ফাংশন ঘোষণা
    void display(mk_pair par)
    par.first এবং par.second প্রিন্ট
ধাপ ২ -> ছেদবিন্দু গণনার ফাংশন ঘোষণা
    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 ঘোষণা
    যদি (det == 0)
        return make_pair(FLT_MAX, FLT_MAX)
    শেষ
    অন্যথায়
        double x = (b1*c - b*c1)/det ঘোষণা
        double y = (a*c1 - a1*c)/det ঘোষণা
        return make_pair(x, y)
    শেষ
ধাপ ৩ -> main()-এ
    পয়েন্টের জন্য mk_pair q = make_pair(2, 1) ঘোষণা এবং কল
    যদি (inter.first == FLT_MAX এবং inter.second == FLT_MAX)
        "given lines are parallel" প্রিন্ট
    শেষ
    অন্যথায়
        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 << "The given lines AB and CD are parallel.\n";
    } else {
        cout << "The intersection of the given lines AB and CD is: ";
        display(inter);
    }
    return 0;
}

আউটপুট

The intersection of the given lines AB and CD is: (2, 4)

  1. C++-এ দুটি লিঙ্কড লিস্টের ইন্টারসেকশন পয়েন্ট খুঁজে বের করা

  2. বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম

  3. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম

  4. C++-এ কুইকসর্ট (QuickSort) প্রোগ্রাম