[Algorithm] CCW과 선분 교차 판정
·
PS/Algorithms
설명CCW는 Counter ClockWise의 약자로, 반시계 방향을 의미한다. CCW 알고리즘은 세 점이 주어졌을 때, 이들이 이루는 방향을 판별한다.  먼저 세 점 $A, B, C$를 두 개의 벡터 $\textbf{a}, \textbf{b}$로 나타내고, 두 벡터의 외적 $\textbf{a}\times \textbf{b}$를 계산한다. $\theta$를 두 벡터의 사잇각이라고 할 때,  $\textbf{a}\times\textbf{b}=\left\|\textbf{a}\right\|\left\|\textbf{b}\right\|\mathrm{sin}\theta$  이다.즉, 외적의 크기가 양수라면 두 벡터의 사잇각이 $0^{\circ}$~$180^{\circ}$이고, 이는 두 벡터가 반시계 방향이라는 것..
[백준] 17387번: 선분 교차 2
·
PS/Baekjoon
문제https://www.acmicpc.net/problem/17387 설명CCW 알고리즘을 통해 해결했다. 네 점 A, B, C, D가 있고 선분 AB, 선분 CD의 교차 여부를 판단한다고 할 때, 선분 위의 두 점과 다른 선분의 나머지 한 점의 외적 값을 사용했다. 구체적으로 설명하자면 다음과 같다. ccw()는 세 점의 외적을 구하는 함수이다. ccw(A, B, C) * ccw(A, B, D)  추가로 고려해야 할 점은, 모든 ccw 값이 0이라면 두 선분에 포개져있거나 그렇지 않다는 것이다. 따라서 포개져있는지 여부를 확인해주어야 한다. 이는 각 점의 순서를 적절히 바꾸어주고 포개지기 위한 조건을 작성하였다. 이 과정에서 구조체 연산자 오버로딩을 사용하였다. 까다로웠던 점은 ccw의 곱이 매우 커..