| 27 | } |
| 28 | return x; } |
| 29 | bool intersect(L(a,b), L(p,q), point &res, |
| 30 | bool lseg=false, bool rseg=false) { |
| 31 | // NOTE: check parallel/collinear before |
| 32 | point r = b - a, s = q - p; |
| 33 | double c = cross(r, s), |
| 34 | t = cross(p - a, s) / c, u = cross(p - a, r) / c; |
| 35 | if (lseg && (t < 0-EPS || t > 1+EPS)) return false; |
| 36 | if (rseg && (u < 0-EPS || u > 1+EPS)) return false; |
| 37 | res = a + t * r; return true; } |
| 38 | // vim: cc=60 ts=2 sts=2 sw=2: |