1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
// ----------------------------------------------------------------------------
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
// Distributed under the (new) BSD License.
// ----------------------------------------------------------------------------
/* ---------------------------------------------------------
Compute distance from a point to a line (2d)
Parameters:
-----------
p0, p1: Points describing the line
p: Point to computed distance to
Return:
-------
Distance of p to (p0,p1)
--------------------------------------------------------- */
float point_to_line_distance(vec2 p0, vec2 p1, vec2 p)
{
// Projection p' of p such that p' = p0 + u*(p1-p0)
vec2 v = p1 - p0;
float l2 = v.x*v.x + v.y*v.y;
float u = ((p.x-p0.x)*v.x + (p.y-p0.y)*v.y) / l2;
// h is the projection of p on (p0,p1)
vec2 h = p0 + u*v;
return length(p-h);
}
|