[백준] 11758_CCW C++


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 : 일직선이다.

© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2