본문 바로가기
PS/기본구현

선분교차판정 코드 (세 점 일직선 포함)

by jaehoonChoi 2022. 8. 7.

[ Code ] 

using ll = long long;
using pll = pair<ll, ll>;
#define x first
#define y second

int ccw(pll a, pll b, pll c) {
	ll t = (a.x - b.x) * (c.y - b.y) - (a.y - b.y) * (c.x - b.x);
	return (t > 0) - (t < 0);
}

int cross(pll a, pll b, pll c, pll d) {
	int abc = ccw(a, b, c);
	int abd = ccw(a, b, d);
	int cda = ccw(c, d, a);
	int cdb = ccw(c, d, b);
	if (abc * abd == 0 && cda * cdb == 0) {
		if (a > b) swap(a, b);
		if (c > d) swap(c, d);
		return (a <= d && c <= b);
	}
	return (abc * abd <= 0 && cda * cdb <= 0);
}

 

'PS > 기본구현' 카테고리의 다른 글

FFT 코드  (0) 2022.08.23
플로우 - Dinic, Edmonds-Karp 알고리즘  (0) 2022.08.08
레이지 프로퍼게이션 코드  (0) 2022.08.07
세그먼트 트리 코드  (0) 2022.08.07

댓글