블로그 옮겼습니다
두 선분의 교차 여부 판별 본문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | int isOver1(line l1, line l2){ int ab = ccw(l1.p1, l1.p2, l2.p1) * ccw(l1.p1, l1.p2, l2.p2); int cd = ccw(l2.p1, l2.p2, l1.p1) * ccw(l2.p1, l2.p2, l1.p2); if(ab == 0 && cd == 0) { return !(l1.p2 < l2.p1 || l2.p2 < l1.p1); } return ab <= 0 && cd <= 0; } int isOver2(line l1, line l2){ if(!ccw(l2.p1, l1.p2, l1.p1) && !ccw(l1.p2, l2.p2, l1.p1)){ // 일직선상 if(l2.p1 < l1.p1) swap(l1, l2); if(l1.p2 < l2.p1) return false; return true; } int cond1 = ccw(l2.p1, l1.p2, l1.p1) * ccw(l1.p2, l2.p2, l1.p1) >= 0; int cond2 = ccw(l1.p1, l2.p1, l2.p2) * ccw(l2.p1, l1.p2, l2.p2) >= 0; return cond1 && cond2; } | cs |
ccw를 사용한다는건 같은데 직선상에 놓이는 조건과 한점에서 만나는지 판별하는 조건이 약간 다르다.
'Algorithm > Memo &Tips' 카테고리의 다른 글
N개의 비트에서 모든 부분집합들의 부분집합 순회하기 (0) | 2017.09.10 |
---|---|
비트 마스크의 모든 부분 집합 순회 하기 (0) | 2017.07.23 |
트리에서 노드 A,B 사이의 경로에 노드 C 존재 판별 O(1)에 하기 (1) | 2017.07.11 |
길이가 K인 단순경로가 N개 존재하는 트리만들기 (0) | 2017.06.29 |
서로 다른 두 수의 최소합 O(n) 에 구하기 (0) | 2017.06.27 |
Comments