블로그 옮겼습니다

두 선분의 교차 여부 판별 본문

Algorithm/Memo &Tips

두 선분의 교차 여부 판별

sgc109 2017. 8. 22. 22:38
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를 사용한다는건 같은데 직선상에 놓이는 조건과 한점에서 만나는지 판별하는 조건이 약간 다르다.

Comments