hash vp(const point& v1, const point& v2, const point& c){ hash ret; ret.a = v1.dist(c); ret.b = v2.dist(c); ret.c = v1.dist(v2); return ret; }
double distance(point& p) { line r(a, b); auto q = r.closest(p); if(equals(det(a, b, q), 0) && this->contains(q)) return p.dist(q); return min(p.dist(a), p.dist(b)); }
bool operator<(const point& b) const { double crs = b * *this; if (fabs(crs) > eps) return crs > 0; return dist() < b.dist(); }