이차원 평면으로 직선의 연립방정식으로 교차점을 구하는 방식은 예외처리를 따로 해주어야 하고, 복잡함.
Cramer's rule(크라메르 공식)을 활용하여 해결 시도함.
만약, 선형 방정식의 해가 존재하지 않는다면 두 직선은 평행한 것이다. 당신은 2개의 직선을 나타내는 4개의 점을 입력받아 두 직선의 교점을 구할 수 있음.
▣ 2개의 연립방정식을 이용한 풀이
ax + by = e
cx + dy = f
이것의 유일한 해, x, y는 ?
이를 코드화 하면..
위 4개의 점에 대해서.
L1 은 (x1,y1) (x2,y2) , L2 는 (x3,y3) (x4, y4) 라고 한다면.
두 직선의 교점인 x, y라고 정의함.
Ax + By = E (L1)
Cx + Dy = F (L2)
L1 직선은
A = y2 - y1;
B = x1 - x2;
E = (A * x1) + (B * y1);
L2 직선은
C = y4 - y3;
D = x3 - x4;
F = (C * x3) + (D * y3);
DE = (A * D) - (B * C); // Deteminant
if (DE==0) // 두선은 평행, 교차점 없음.
else // 두선은 교차함.
X = ((E * D) - (B * F)) / DE
Y = ((A * F) - (E * C)) / DE
코드화
double A, B E; // ax + by = e
double C, D, F; // cx + dy = f
A = y2 - y1;
B = x1 - x2;
E = (y2 - y1)*x1 + (x1 - x2)*y1;
C = y4 - y3;
D = x3 - x4;
F = (y4 - y3)*x3 + (x3 - x4)*y3;
double DE = (A*D) - (B*C);
if(DE==0) {
System.out.println("Parallel");
} else {
double X = ((E * D) - (B * F)) / DE;
double Y = ((A * F) - (E * C)) / DE ;
}
[참조 URL]
https://ko.wikipedia.org/wiki/%ED%81%AC%EB%9D%BC%EB%A9%94%EB%A5%B4_%EA%B3%B5%EC%8B%9D
크라메르 공식 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 선형대수학에서, 크라메르 공식(Cramer公式, 영어: Cramer's rule) 또는 크래머 공식은 유일한 해를 가지며 변수와 방정식의 수가 같은 연립 일차 방정식의 해를 구하는 공식이다. 계수 행렬과 그 한 열을 상수항으로 대신하여 얻는 행렬들의 행렬식의 비를 통해 해를 나타낸다. 둘 또는 셋 이상의 방정식으로 이루어진 연립 일차 방정식의 경우, 크라메르 공식에 의한 알고리즘은 가우스 소거법에 의한 알고리즘보다 훨씬
ko.wikipedia.org
http://www.gisdeveloper.co.kr/?p=89
두 선의 교차점 구하기 – GIS Developer
이 글은 두 선분의 교차점을 구하는 알고리즘이 작업에 필요해서 작성해둔 글이다. 참고로, 예전에 두선분의 교차점을 구하는 것 자체가 쉬울 것으로 생각하고 흔히 생각하는 기울기, y 절편을 이용하여 접근하려고 하였다. 이는 상당히 비효율적 방법이였고 조금 더 효율적인 방법으로 접근하였다. 먼저 직선의 방정식으로써, 기울기와 절편으로 나타내지 말고, t 매개변수를 이용해 나타내면 다음과 같다. P1과 P2는 직선의 시작점과 끝점을 나타내며, t의 범위는 0에
www.gisdeveloper.co.kr
https://www.etlcpp.com/blog/2017/11/07/finding-the-crossing-points-of-two-lines/