https://www.acmicpc.net/problem/12781
12781번: PIZZA ALVOLOC
입력의 첫 줄에는 도윤이와 친구들이 선택한 점의 좌표 x, y(-10,000 ≤ x, y ≤ 10,000)가 순서대로 4개 주어진다. x, y값은 항상 정수이다.
www.acmicpc.net
단순하게 수학처럼 선의 방정식을 구해서 교점을 찾으려고 했지만,
교점이 그 도형 안에 존재하는지에 대한 확신을 구하기에는 너무 복잡해서 다른 식으로 접근해야 했다._.
https://www.acmicpc.net/blog/view/27
점 3개의 방향성을 나타내는 CCW
세 점 P1(x1, y1), P2(x2, y2), P3(x3, y3)가 있을 떄, 점 3개를 이은 선분은 어떤 방향성을 나타내게 될까요? 11758번 문제: CCW 가능한 경우의 수는 총 3가지가 있습니다. 반시계 방향, 시계 방향, 일직선. 시
www.acmicpc.net
위 사진에서는 파란선과 보라색선의 방향이 다르니 -1,
아래 사진에서는 방향이 같으니 1 이 나온다.
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int CCW(int x1, int y1, int x2, int y2, int x3, int y3) {
int a = (x1 * y2) + (x2 * y3) + (x3 * y1) - (x2 * y1) - (x3 * y2) - (x1 * y3);
if (a > 0) {
return 1;
}
else if (a == 0) {
return 0;
}
else if (a < 0) {
return -1;
}
}
int main() {
int x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
int a = CCW(x1, y1, x2, y2, x3, y3);
int b = CCW(x1, y1, x2, y2, x4, y4);
if (a * b < 0) {
cout << 1;
}
else {
cout << 0;
}
}
주저리.
세상엔 신기한 방식이 정말많다..
그나저나 배열 선언하기도 귀찮았나 보다 ㅇ0ㅇ
'ALGORITHM > MATH' 카테고리의 다른 글
17266 어두운 굴다리 (0) | 2021.01.07 |
---|