double distanceLS(const line& l, const line& s) { return intersectLS(l, s) ? 0.0 : min(distanceLP(l, s.a), distanceLP(l, s.b)); }
double distanceLS(const L &l, const L &s) { if (intersectLS(l, s)) return 0; return min(distanceLP(l, s[0]), distanceLP(l, s[1])); }
double distanceLL(const line& l, const line& m) { return intersectLL(l, m) ? 0.0 : distanceLP(l, m.a); }
double distanceLL(const L &l, const L &m) { return intersectLL(l, m) ? 0 : distanceLP(l, m[0]); }