본문 바로가기
알고리즘

선분 교차 알고리즘

by 매화of사군자 2020. 2. 29.

선분

> 직선 위에서 그 위의 두 점에 한정된 부분.

ex)

y = x 중 [(1,1) (3,3)]

 

참고 사이트

> 기본 지식

https://www.acmicpc.net/blog/view/27

 

점 3개의 방향성을 나타내는 CCW

세 점 P1(x1, y1), P2(x2, y2), P3(x3, y3)가 있을 떄, 점 3개를 이은 선분은 어떤 방향성을 나타내게 될까요? 11758번 문제: CCW 가능한 경우의 수는 총 3가지가 있습니다. 반시계 방향, 시계 방향, 일직선. 시계 방향을 -1, 일직선을 0, 반시계 방향을 1이라고 했을 때, P1은 검정색, P2는 초록색, P3을 파란색으로 나타내면 아래 그림과 같습니다. 세 점으로 이루어진 삼각형의 면적을 구하는 방법을 이용해서 방향성

www.acmicpc.net

https://degurii.tistory.com/47

 

[알고리즘] CCW로 세 점의 방향성 판별하기

첫 알고리즘 포스트입니다. 이번에 쓸 내용은 CCW입니다. 원래는 기하 알고리즘들을 전반적으로 다루려고 했는데 생각보다 글이 길어져서 CCW만 쓰게 되었습니다. 본 글의 내용은 고등학교 과정(2007 개정 교육과..

degurii.tistory.com

 

원래 풀려고 했던 문제

https://www.acmicpc.net/problem/2162

 

2162번: 선분 그룹

첫째 줄에 N(1≤N≤3,000)이 주어진다. 둘째 줄부터 N+1번째 줄에는 양 끝점의 좌표가 x1, y1, x2, y2의 순서로 주어진다. 각 좌표의 절댓값은 5,000을 넘지 않으며, 입력되는 좌표 사이에는 빈칸이 하나 이상 있다.

www.acmicpc.net

처음에 생각했던 방법

> 선분이 주어지면 그 선분을 가지고 있는 하나의 직선 방정식을 구한다.

> 직선 방정식의 교차점을 구하는 공식을 함수로 만든다.

> 그 교차점이 두 선분 위에 있는지 판단한다.

> 있다면 합치고 없다면 다음 그룹을 계사한다.

 

>>> 위와 같이 한다면 시간초과가 난다.

 

해결 방법

> 위에서 제시한 선분 교차 알고리즘(CCW)을 이용하여 두 선분이 교차한다면 같은 그룹으로 묶는다.

> 같은 그룹으로 묶는 과정은 유니온 파인드, 서로소 집합을 활용하면 될 듯 하다.

 

앞으로 할 일

> 선분 교차 알고리즘에 대해서 공부하고 특히, 벡터 관련 내용을 중점적으로 살펴보아야겠다.

댓글