반응형
대표적인 기하 알고리즘 중 하나인 CCW입니다.
※CCW : p1,p2,p3 점에서 볼 때 선분p1p2, 선분p2p3의 외적을 이용합니다.
※외적의 정의 : AXB = a*b*sina로 정의 되는데 이뜻은 vector A를 기준으로 vector B가
얼마나 회전하려는 성질을 가지고 있는지를 표시하는 척도라고 볼 수 있습니다.
따라서 외적의 값이
1.양수일 때 : sin값이 양수이므로 선분의 위치가 시계방향으로 놓여져 있으며
2.0일 때 : sin값이 0이므로 일직선
3.음수일 때 : sin값이 음수이므로 반시계방향이라고 생각할 수 있습니다.
#include <iostream>
using namespace std;
int main() {
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
if ((x1*y2 - x2*y1 + x2*y3 - x3*y2 + x3*y1 - x1*y3) / 2 > 0)
cout << '1' << '\n';
else if ((x1*y2 - x2*y1 + x2*y3 - x3*y2 + x3*y1 - x1*y3) / 2 < 0)
cout << "-1" << '\n';
else
cout << '0' << '\n';
}
'Algorithm > Math' 카테고리의 다른 글
(C++) - 백준(BOJ) 1789번 : 수들의 합 (0) | 2020.01.04 |
---|---|
(C++) - 백준(BOJ) 1010번 : 다리놓기 (0) | 2019.01.25 |
(C++) - 백준(BOJ) 2942번 : 퍼거슨과 사과 (0) | 2017.04.06 |
(C++) - 백준(BOJ) 2960번 : 에라토스테네스의 체 (0) | 2017.04.02 |
(C++) - 백준(BOJ) 10178번 : 할로윈의 사탕 답 (0) | 2017.04.01 |