기하 알고리즘

Convex Hull

기하 알고리즘 - Convex Hull편

기하 알고리즘 Convex Hull 설명글입니다.

이번에는 Convex Hull에 대해서 설명하겠습니다.

Convex Hull은 볼록 껍질을 구하는 것인데 볼록 껍질이란 2차원 평면 상에서 주어진 점들을 일부 이용하여 만든 볼록 다각형이다. 이때 나머지 점들은 모두 볼록 다각형 안에 있어야 한다.

볼록껍질을 구하는 알고리즘에는 대표적으로 그라함 스캔(Graham’s Scan) 알고리즘이 있다.

동작 원리

1.기준점을 잡는다.

2.정렬을 한다

3.볼록 껍질을 구한다.

vector <int> s;
s.push_back(0);
s.push_back(1);
	int idx = 2;
	while (idx < n) {
		if (s.size() >= 2 && ccw(dot[s[s.size()-2]], dot[s[s.size() - 1]], dot[idx]) <= 0)
			s.pop_back();
		else s.push_back(idx++);
	}