주어진 선 AB에 대응하는 점 A와 B와 선 PQ에 대응하는 점 P와 Q; 작업은 이 두 선 사이의 교차점을 찾는 것입니다.
참고 − 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 - a2B1 =a1 - b1C1 =(A1 * a1) + ( B1 * a1)A2 =d2 - c2B2 =c1 - d1C2 =(A2 * c1) + (B2 * c2) 주어진 선을 1로 둡니다. A1x + B1y =C12. A2x + B2y =C2이제 교점을 찾으려면 이 두 방정식을 풀어야 합니다. 1에 B1을 곱하고 2에 B2를 곱하여 다음을 얻습니다. A1B2x +B1B2y =C1B2A1B1x +B2B1y =C1B1이를 빼면 (A1B2 - A2B1)x =C1B2-C2B1이것은 우리에게 x의 값을 제공하고 유사하게 우리는 x인 p1과 y인 p2의 교차점이 될 y의 값을 얻을 것입니다.
참고 - 위의 공식은 두 선의 교차점을 제공하지만 선 대신 선분을 제공하는 경우 계산된 결과가 선분 위에 놓이도록 점을 다시 확인해야 합니다.
- 최소(x1, x2) <=x <=최대(x1, x2)
- 최소(y1, y2) <=y <=최대(y1, y2)
위의 문제를 해결하기 위해 사용하는 접근 방식 -
- 입력 값을 가져옵니다.
- a1 * b2 - a2 * b1인 행렬식 찾기
- 행렬이 0이면 행이 평행한지 확인합니다.
- 행렬식이 0이 아닌 경우 x =(c1 * b2 - c2 * b1) 및 y =(a1 * c2 - a2 * c1)
- 결과를 반환하고 인쇄합니다.
알고리즘
StartStep 1-> x,y 좌표 출력 함수 선언 void display(mk_pair par) par.first, par.second 출력Step 2-> 교점 계산 함수 선언 mk_pair 교집합(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) return make_pair(FLT_MAX, FLT_MAX) End Else 선언 double x =(b1*c - b*c1)/det 선언 double y =(a*c1 - a1*c)/det return make_pair(x, y) EndStep 3-> Main()에서 mk_pair q =make_pair(2, 1) IF(inter.first =FLT_MAX AND inter.second =FLT_MAX)로 점에 대한 함수를 선언하고 호출합니다. "주어진 라인은 평행합니다" 인쇄 End Else Call display( 인터) 엔드스톱
예시
#includenamespace std;#define mk_pair pair //x 및 y 좌표 표시void display(mk_pair par) { cout <<"(" < 출력
주어진 선 AB와 CD의 교집합:(2, 4)