Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมจุดตัดของสองบรรทัดในภาษา C++


กำหนดจุด A และ B ที่สอดคล้องกับเส้น AB และจุด P และ Q ที่สอดคล้องกับเส้น PQ ภารกิจคือการหาจุดตัดระหว่างสองเส้นนี้

หมายเหตุ − จุดจะได้รับในระนาบ 2 มิติบนพิกัด X และ Y

โปรแกรมจุดตัดของสองบรรทัดในภาษา C++

ในที่นี้ A(a1, a2), B(b1, b2) และ C(c1, c2), D(d1, d2) คือพิกัดที่สร้างเส้นที่แตกต่างกันสองเส้น และ P(p1, p2) เป็นจุดตัดกัน (เพียงอธิบายแผนภาพของจุดตัด)

วิธีหาจุดสี่แยก

ลองคิดข้างบนว่า −

ตัวอย่าง

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

สิ่งนี้ให้ค่า x แก่เรา และในทำนองเดียวกัน เราก็จะได้ค่าของ y ซึ่งจะเป็นจุดตัด p1 ซึ่งก็คือ x และ p2 ซึ่งก็คือ y

หมายเหตุ − สูตรข้างต้นจะให้จุดตัดของทั้งสองเส้น แต่ถ้าให้ส่วนแทนเส้น เราต้องตรวจสอบอีกครั้งว่าจุดนั้นเพื่อผลลัพธ์ที่คำนวณได้ต้องอยู่บนส่วนของเส้นตรง

  • ต่ำสุด (x1, x2) <=x <=สูงสุด (x1, x2)
  • ขั้นต่ำ (y1, y2) <=y <=สูงสุด (y1, y2)

แนวทางที่เราใช้เพื่อแก้ปัญหาข้างต้น -

  • นำค่าที่ป้อนเข้ามา
  • หาดีเทอร์มีแนนต์ซึ่งก็คือ a1 * b2 - a2 * b1
  • ตรวจสอบว่าดีเทอร์มีแนนต์ =0 แล้วเส้นขนานกันหรือไม่
  • หากดีเทอร์มีแนนต์ไม่เป็นศูนย์ x =(c1 * b2 - c2 * b1) และ y =(a1 * c2 - a2 * c1)
  • ส่งคืนและพิมพ์ผลลัพธ์

อัลกอริทึม

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

ตัวอย่าง

#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;
}

ผลลัพธ์

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