반응형
정의
CCW는 점 3개를 연결했을 때 직선의 방향을 파악할 수 있는 알고리즘이다.
구체적으로, 점 A, B, C가 있을 때, 세 점을 순서대로 이어서 나오는 선이 시계 방향을 그리는지, 반시계 방향을 그리는지, 혹은 일직선인지 알려준다.
원리
CCW는 벡터의 외적과 연관이 있다.
벡터 $u$,$v$의 외적 $u \times v$ 의 크기 $| u \times v |$ 는 $|u||v| \sin \theta$ 와 같은데, 여기서 $\theta$는 두 벡터 사이의 각도이다.
$\sin{\theta}$는 $180 ^\circ < \theta < 360 ^\circ $ 일 때 음수값을 가지므로, $| u \times v |$ 의 부호에 따라 두 벡터의 방향을 파악할 수 있다.
주의할 점
벡터의 외적은 교환법칙이 성립하지 않기 때문에 순서에 주의해야 한다.
코드
#입력값 a,b,c는 (x,y)의 형태를 가진다고 가정
def ccw(a,b,c):
return (b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0])
반응형
'Computer Science > Algorithm' 카테고리의 다른 글
그래프 이론 - 2. 백트래킹 (Backtracking) (1) | 2023.12.27 |
---|---|
그래프 이론 - 1. DFS (깊이 우선 탐색) / BFS (너비 우선 탐색) (0) | 2023.12.04 |
그래프 이론 - 0. 소개 (1) | 2023.12.03 |
볼록 껍질 (컨벡스 헐, Convex Hull) 알고리즘 (1) | 2023.11.14 |
Manacher's Algorithm (0) | 2023.11.07 |