두 선분(직선)의 교점

두 선분(직선)의 교점

2020, Mar 02    


알고리즘 관련 글 목차


  • 출처 : https://zetawiki.com/wiki/두_직선의_교차점


목차


  • 점의 좌표 4개가 주어졌을 때, 교점

  • 표준형 식에서의 교점

  • 일반형 식에서의 교점

  • C 코드


  • 두 직선이 교차할 때, 두 직선의 교차점을 구하는 방법은 다양한 방법이 많습니다. 특히 손으로 풀 때에는 연립방정식을 이용하면 쉽게 구할 수 있습니다.
  • 코드로 구할 때에는 closed form 형태로 함수를 마련해 놓아야 편리하기 때문에 이번 글에서는 함수 형태로 어떻게 나타냐면 되는 지 정리하겠습니다.
  • 물론 코드의 안정성을 위하여 두 선분이 실제로 교차할 때에 한하여 교점을 찾는 것이 좋습니다. 두 선분의 교차 여부를 확인하기 위해서는 아래 링크를 참조하시기 바라니다.
    • 두 선분의 교차 여부 확인 : https://gaussian37.github.io/math-algorithm-line_intersection/


점의 좌표 4개가 주어졌을 때, 교점


  • 직선 A가 (x1,y1),(x2,y2)로 이루어져 있고 직선 B가 (x3,y3),(x4,y4)로 이루어져 있다면 두 직선의 교점은 다음과 같습니다.
  • 이 때, 앞에서 언급한 방법으로 두 선분의 교차 여부를 확인해도 되지만 다음 방법을 사용해도 됩니다.
    • 식의 분모에 해당하는 (x1x2)(y3y4)(y1y2)(x3x4)=0 을 만족하면 두 직선은 평행 또는 일치합니다.


  • (Px,Py)=((x1y2y1x2)(x3x4)(x1x2)(x3y4y3x4)(x1x2)(y3y4)(y1y2)(x3x4),(x1y2y1x2)(y3y4)(y1y2)(x3y4y3x4)(x1x2)(y3y4)(y1y2)(x3x4))


표준형 식에서의 교점


  • 주어진 식이 다음과 같다고 가정해 보겠습니다.


  • y=m1x+b1
  • y=m2x+b2


  • 이 때, 교점은 다음과 같습니다.


  • (Px,Py)=(b2b1m1m2,m1b2b1m1m2+b1)


  • 이 때에도 m1m2=0이면 두 직선은 평행 또는 일치합니다.


일반형 식에서의 교점


  • 주어진 식이 다음과 같다고 가정해 보겠습니다.


  • a1x+b1y+c1=0
  • a2x+b2y+c2=0


  • 이 때, 교점은 다음과 같습니다.


  • (Px,Py)=(b1c2b2c1a1b2a2b1,a1b1(b1c2b2c1a1b2a2b1)c1b1)


  • 이 때에도, a1b2a2b1=0이면 두 직선은 평행 또는 일치합니다.


C 코드


  • 마지막으로 위에서 다룬 내용을 C 코드로 옮겨서 실행해 보도록 하겠습니다.
  • 코드에서 다루어 볼 예제는 다음과 같습니다.


Drawing


  • 아래 코드의 각각의 함수는 4개의 점, 표준형 식, 일반형 식이 주어졌을 때, 교차점을 구하는 함수 입니다.




알고리즘 관련 글 목차