[백준] 11758_CCW C++
in Study on Coding Test
CCW에 대해서 알아보는 문제
정답제출코드
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1;
cin >> x2 >> y2;
cin >> 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';
return 0;
}
앞으로 기하 문제를 풀려면 필요한 CCW 알고리즘이다.
CCW에 대한 지식은 별로 없어서 참고링크를 참고하여 풀었다.
링크에 따르면 외적 AXB = ABsin(a)로 정의가 되는데
벡터 A를 기준으로 벡터 B가 어느 방향으로 위치해있는지 판단할 수 있다.
따라서 외적의 값이 아래 상태에 따라 선분이 놓인 방향이 다른 것이다.
- 양수 : sin값이 양수이므로 선분의 위치가 시계방향으로 놓여져 있다.
- 음수 : sin값이 음수이므로 반시계방향으로 놓여져 있다.
- 0 : 일직선이다.