[ 백준 ] 11758 / CCW

5624 단어 psbojboj

# Appreciation

/*
 * Problem :: 11758 / CCW
 *
 * Kind :: Math
 *
 * Insight
 * - 따위는 없다...
 *   + 전혀 모르겠어서 CCW 를 찾아보았다
 *     # P1, P2, P3 를 순서대로 이은 선분은
 *       반시계 방향과 시계 방향 그리고 일직선일 수 있다
 *       -> Vector A = P1P2
 *          Vector B = P1P3
 *          라고 하면
 *          A 와 B 의 외적이 값 D 를 구할 수 있고
 *          D > 0 이면 반시계 방향
 *          D < 0 이면 시계 방향
 *          D = 0 이면 일직선이다
 *
 * Point
 * - CCW = Counter Clock Wise
 *   + 오른손 법칙이 외적을 이용한 것이었구나
 *
 * - u = (u1, u2, u3) 와 v = (v1, v2, v3) 에 대해서
 *   u 와 v 의 외적 u x v 를 다음과 같이 정의한다
 *   u x v = (u2*v3 - u3*v2, u3*v1 - u1*v3, u1*v2 - u2*v1)
 *   + 2차원이므로 u3=0, v3=0 이다
 *     u x v = (0, 0, u1*v2 - u2*v1)
 *     # D = u1*v2 - u2*v1 이라고 하면
 *       D > 0 이면 반시계 방향,
 *       D < 0 이면 시계 방향,
 *       D = 0 이면 일직선 방향이다
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source


#include <iostream>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int x1, y1, x2, y2, x3, y3;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

    // Process
    int dx12 = x2 - x1; /* Vector P1P2 x <= u1 */
    int dy12 = y2 - y1; /* Vector P1P2 y <= u2 */
    int dx13 = x3 - x1; /* Vector P1P3 x <= v1 */
    int dy13 = y3 - y1; /* Vector P1P3 y <= v2 */
    int D = dx12 * dy13 - dx13 * dy12;

    // Control : Output
    cout << ((D > 0) ? 1 : (D < 0) ? -1 : 0) << endl;
}

// Helper Functions
/* None */

좋은 웹페이지 즐겨찾기