Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình cho điểm giao nhau của hai đường trong C ++

Cho điểm A, B tương ứng với đường thẳng AB và điểm P, Q tương ứng với đường thẳng PQ; nhiệm vụ là tìm giao điểm giữa hai đường này.

Lưu ý - Các điểm được cho trong mặt phẳng 2D trên các tọa độ X và Y.

Chương trình cho điểm giao nhau của hai đường trong C ++

Ở đây A (a1, a2), B (b1, b2) và C (c1, c2), D (d1, d2) là tọa độ tạo thành hai đường thẳng phân biệt và P (p1, p2) là giao điểm. (chỉ để giải thích sơ đồ về điểm giao nhau)

Cách tìm giao điểm -

Hãy coi con số trên là -

Ví dụ

So using the (a1, a2), (b1, b2), (c1, c2), (d1, d2)
We will calculate :
A1 = b2 - a2
B1 = a1 - b1
C1 = (A1 * a1) + (B1 * a1)
A2 = d2 - c2
B2 = c1 - d1
C2 = (A2 * c1) + (B2 * c2)
Let the given lines be:
1. A1x + B1y = C1
2. A2x + B2y = C2
Now, to find the point of intersection, we have to solve these 2 equations. We will multiply 1 by B1 and 2 by B2, so we will get:
A1B2x +B1B2y = C1B2
A1B1x +B2B1y = C1B1

Subtracting these we get,
(A1B2 - A2B1)x = C1B2-C2B1

Điều này cho chúng ta giá trị của x và tương tự, chúng ta sẽ nhận được giá trị của y sẽ là giao điểm của p1 là x và p2 là y.

Lưu ý - công thức trên sẽ cho biết giao điểm của hai đường thẳng, nhưng nếu các đoạn được cho thay vì các đoạn thẳng thì chúng ta phải kiểm tra lại điểm đó nên kết quả tính toán phải nằm trên đoạn thẳng.

  • tối thiểu (x1, x2) <=x <=max (x1, x2)
  • tối thiểu (y1, y2) <=y <=max (y1, y2)

Phương pháp tiếp cận mà chúng tôi đang sử dụng để giải quyết vấn đề trên -

  • Lấy các giá trị đầu vào.
  • Tìm định thức là a1 * b2 - a2 * b1
  • Kiểm tra nếu định thức =0 thì các đường thẳng song song
  • Nếu định thức không bằng 0 thì x =(c1 * b2 - c2 * b1) và y =(a1 * c2 - a2 * c1)
  • Trả lại và in kết quả.

Thuật toán

Start
Step 1-> Declare function to print the x and y coordinates
   void display(mk_pair par)
   Print par.first and par.second
Step 2-> declare function to calculate the intersection point
   mk_pair intersection(mk_pair A, mk_pair B, mk_pair C, mk_pair D)
   Declare double a = B.second - A.second
   Declare double b = A.first - B.first
   Declare double c = a*(A.first) + b*(A.second)
   Declare double a1 = D.second - C.second
   Declare double b1 = C.first - D.first
   Declare double c1 = a1*(C.first)+ b1*(C.second)
   Declare double det = a*b1 - a1*b
   IF (det = 0)
      return make_pair(FLT_MAX, FLT_MAX)
   End
   Else
      Declare double x = (b1*c - b*c1)/det
      Declare double y = (a*c1 - a1*c)/det
      return make_pair(x, y)
   End
Step 3-> In main()
   Declare and call function for points as mk_pair q = make_pair(2, 1)
   IF (inter.first = FLT_MAX AND inter.second = FLT_MAX)
      Print “given lines are parallel“
   End
   Else
      Call display(inter)
   End
Stop

Ví dụ

#include <bits/stdc++.h>
using namespace std;
#define mk_pair pair<double, double>
//display the x and y coordinates
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) {
   // Line AB represented as a1x + b1y = c1
   double a = B.second - A.second;
   double b = A.first - B.first;
   double c = a*(A.first) + b*(A.second);
   // Line CD represented as 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;
}

Đầu ra

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