[ 백준 ] 11758 / CCW
# 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 */
Author And Source
이 문제에 관하여([ 백준 ] 11758 / CCW), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@gglifer/백준-11758-CCW
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/*
* 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 이면 일직선 방향이다
*/
//
// 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 */
Author And Source
이 문제에 관하여([ 백준 ] 11758 / CCW), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gglifer/백준-11758-CCW저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)