[C++]CCW - 백준11758
문제
풀이
문제 해석을 하자면,
- 입력으로 주어지는 세 점의 회전 방향을 구하라
풀이
- 벡터의 외적을 이용해서 p1xp2 외적값이 양수인가 음수인가 0인가로 방향을 나타낸다.
- 양수 : 반시계
- 음수 : 시계
- 0 : 일직선
코드
#include<iostream>
//#include<fstream>
#include<vector>
using namespace std;
struct point {
int x; int y;
};
typedef point Point;
int ccw2(Point p, Point q) {
return p.x * q.y - p.y * q.x;
}
int ccw(Point r, Point p, Point q) {
// r만큼 빼서 원점으로 이동 (ccw2 계산 위해)
p.x -= r.x;
p.y -= r.y;
q.x -= r.x;
q.y -= r.y;
return ccw2(p, q);
}
int direction(Point a, Point b, Point c) {
if (ccw(a, b, c) > 0) return 1;
if (ccw(a, b, c) < 0)return -1;
return 0;
}
vector<Point> vc;
int main() {
//ifstream fin("1.inp");
//ofstream fout("11.out");
Point inPoint;
for (int i = 0; i < 3; i++) {
cin >> inPoint.x >> inPoint.y;
vc.push_back(inPoint);
}
cout << direction(vc[0], vc[1], vc[2]);
return 0;
}
느낀점
생략
댓글남기기