int LineSegment2x<int>::point_distance(const Vec2i &point) { int L = pow2(q.x - p.x) + pow2(q.y - p.y); int r = ((point.x - p.x)*(q.x - p.x) + (point.y - p.y)*(q.y - p.y)) / L; if (r <= 0 || r >= 1) { return min(point.distance(p), point.distance(q)); } int s = ((p.y - point.y)*(q.x - p.x) - (p.x - point.x)*(q.y - p.y)) / L; s *= (int)(sqrt((float)L) + 0.5f); if (s < 0) s = -s; return s; }