示例#1
0
	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;
	}