int ccw(pair<int, int> a, pair<int, int> b, pair<int, int> c)
{
int op = a.first*b.second + b.first*c.second + c.first*a.second;
op -= (a.second*b.first + b.second*c.first + c.second*a.first);
if (op > 0)return 1;
else if (op == 0)return 0;
else return -1;
}
bool isIntersect(pair<pair<int, int>, pair<int, int>> x, pair<pair<int, int>, pair<int, int>> y)
{
pair<int, int> a = x.first;
pair<int, int> b = x.second;
pair<int, int> c = y.first;
pair<int, int> d = y.second;
int ab = ccw(a, b, c)*ccw(a, b, d);
int cd = ccw(c, d, a)*ccw(c, d, b);
if (ab == 0 && cd == 0)
{
if (a > b)swap(a, b);
if (c > d)swap(c, d);
return (c <= b&&a <= d);
}
return (ab <= 0 && cd <= 0);
}
'📑코드 포스트잇' 카테고리의 다른 글
유전 알고리즘 (0) | 2020.08.13 |
---|---|
c++ 기하 문제들 풀기위한 vector2 구조체 (0) | 2020.03.30 |
네트워크 플로우(일반적 구현, 구조체로 구현) (0) | 2020.02.19 |
여러개의 숫자 한줄로 받아 따로 저장하기 (1) | 2020.02.18 |
경우의 수 구하기 (0) | 2020.01.29 |
int ccw(pair<int, int> a, pair<int, int> b, pair<int, int> c)
{
int op = a.first*b.second + b.first*c.second + c.first*a.second;
op -= (a.second*b.first + b.second*c.first + c.second*a.first);
if (op > 0)return 1;
else if (op == 0)return 0;
else return -1;
}
bool isIntersect(pair<pair<int, int>, pair<int, int>> x, pair<pair<int, int>, pair<int, int>> y)
{
pair<int, int> a = x.first;
pair<int, int> b = x.second;
pair<int, int> c = y.first;
pair<int, int> d = y.second;
int ab = ccw(a, b, c)*ccw(a, b, d);
int cd = ccw(c, d, a)*ccw(c, d, b);
if (ab == 0 && cd == 0)
{
if (a > b)swap(a, b);
if (c > d)swap(c, d);
return (c <= b&&a <= d);
}
return (ab <= 0 && cd <= 0);
}
'📑코드 포스트잇' 카테고리의 다른 글
유전 알고리즘 (0) | 2020.08.13 |
---|---|
c++ 기하 문제들 풀기위한 vector2 구조체 (0) | 2020.03.30 |
네트워크 플로우(일반적 구현, 구조체로 구현) (0) | 2020.02.19 |
여러개의 숫자 한줄로 받아 따로 저장하기 (1) | 2020.02.18 |
경우의 수 구하기 (0) | 2020.01.29 |