-
[기하학] CCW(11758) (C/C++)BOJ C++ 알고리즘 공부 2022. 2. 12. 16:23
https://www.acmicpc.net/problem/11758
1. 문제 개요
2차원 좌표 평면 위에 있는 점 3개 P1, P2, P3가 주어질때 이를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 문제.
2. 입출력
3. 문제 풀이
첫번째, 두번째 점을 이용하여 직선의 방정식을 구하고, 세번째 점을 방정식에 대입했을 때 양수가 나오면 반시계 방향,
음수가 나오면 시계 방향, 0이 나오면 일직선이다.
4. 전체 코드
#include <algorithm> #include <stdio.h> #include <vector> #include <cmath> using namespace std; //선분 int a, b, c; int equation(int x, int y){ // 직선의 방정식에 점을 대입하는 함수 int result = a*x + y*b +c;; if(result > 0){ return 1; } else if(result < 0) { return -1; } else { return 0; } } int main(void) { vector<pair<int, int>> p; p.resize(3); for(int i=0;i<3;i++){ scanf("%d%d",&p[i].first,&p[i].second); } a = p[0].second - p[1].second; b = p[1].first - p[0].first; c = (p[0].first-p[1].first)*p[0].second + (p[1].second-p[0].second)*p[0].first; // p[0]과 p[1]를 지나는 직선의 방정식을 구한다. // ax + by + c = 0 printf("%d\n",equation(p[2].first, p[2].second)); return 0; }
'BOJ C++ 알고리즘 공부' 카테고리의 다른 글
[기하학] 선분 교차 2(17387) (C++) (0) 2022.02.16 [기하학] 선분 교차1 (17386) (C++) (0) 2022.02.15 [기하학] 두 원(7869) (C++) (0) 2022.02.11 [기하학] 다각형의 넓이(2166) C++ (0) 2022.02.10 [플로이드-와샬] 운동(1956) (0) 2022.02.07