| 13 | return conj(z / w) * w + about1; } |
| 14 | point proj(P(u), P(v)) { return dot(u, v) / dot(u, u) * u; } |
| 15 | point normalize(P(p), double k = 1.0) { |
| 16 | return abs(p) == 0 ? point(0,0) : p / abs(p) * k; } |
| 17 | double ccw(P(a), P(b), P(c)) { return cross(b - a, c - b); } |
| 18 | bool collinear(P(a), P(b), P(c)) { |
| 19 | return abs(ccw(a, b, c)) < EPS; } |