2014. 5. 1. 09:24ㆍ프로그래밍/알고리즘
외곽선 찾기(ConvexHull) 알고리즘
1. 개요
2차원 평면에 N개의 점이 주어졌을 때, 이들 중 몇 개의 점을 골라 나머지 모든 점을 내부에 포함하는 다각형을 만든다. 이를 볼록 껍질(CONVEX HULL) 이라 한다.
아래 그림은 N=10인 경우의 한 예.
2. 알고리즘 : Graham's Scan 사용
(1) P0을 선택합니다.
- P0은 y축 가장 아래에 위치한 점을 선택합니다.
- 가장 아래 위치한 점이 여러 개 존재 시 x축 가장 좌측을 선택합니다.
(2) P0을 기준으로 모든 점들에 대한 각도를 구한다.
(3) 구한 점들의 각도 중 가장 낮은 각을 가진 점을 순서대로 P1, P2 선택
(4) 다음 점 Pn을 선택하여, 점을 추가 할 것인지 교체 할 것인지 정한다.
- 이전 두 점에 대해 조건 검색을 하여, 조건에 만족하지 않으면 해당 점을 Pn과 교체하며, 만족하면 Pn을 추가한다.
- 조건 : 선택된 점[Pn]이 선[Pn-2Pn-1(->)]에서 왼쪽(반시계 방향)에 위치하면 Pn을 추가,
오른쪽(시계방향)에 위치하면 점[Pn]을 점[Pn-1]과 교체한다.
* 이 때 선의 방향을 유의하자. 선은 Pn-2 -> Pn-1.
(5) 모든 점에 대한 (4)의 탐색이 끝나면 선택된 점을 연결한다.
3. 소스설명
4. 실행결과
5. 기타
- MFC GDI를 사용해 표현
- 점을 원으로 표현하였기 때문에 외곽으로 원의 일부가 삐져나올 수 있으나, 좌표 상으로는 선 내부에 포함됨.
- 5000개 이상 생성 시 정신건강에 해로움
6. 소스파일 및 실행파일 첨부
'프로그래밍 > 알고리즘' 카테고리의 다른 글
알고리즘 : Postfix Notation (0) | 2014.05.20 |
---|---|
알고리즘:등고선법을 통한 최단경로 찾기 (2) | 2014.03.27 |
알고리즘:Recursive Backtracking (2) | 2014.03.11 |
알고리즘:달팽이관 (0) | 2013.04.16 |
알고리즘 카테고리 목적 (0) | 2013.04.16 |