[GRASSLIST:3871] Re: distance between polygons
    Glynn Clements 
    glynn.clements at virgin.net
       
    Wed Jun 12 10:39:40 EDT 2002
    
    
  
Johannes B|hler wrote:
> > That won't necessarily produce the correct answer. The shortest
> > distance could be between a vertex of one polygon and a point on an
> > edge of the other polygon.
> 
> you are right. I need the shortest distance between a vertex and an 
> edgepoint. is there a solution for this?
The following function[1] computes the square of the shortest distance
between a point and a line segment (which is either the distance to
the line, or the distance to one of the endpoints).
[1] from src/libes/vect32/diglib/line_dist.c
double dig_distance2_point_to_line (
    double x,double y,         /* point */
    double x1,double y1,double x2,double y2)	/* line segment */
{
    register double dx,dy;
    double t;
    dx = x2 - x1;
    dy = y2 - y1;
    if (ZERO(dx) && ZERO(dy)) /* line is degenerate */
    {
	dx = x1 - x;
	dy = y1 - y;
	return dx*dx + dy*dy;	/* compute distance x,y to x1,y1 */
    }
    t = (dx * (x - x1) + dy * (y - y1)) / (dx * dx + dy * dy);
    if (t < 0.0)		/* go to x1,y1 */
	t = 0.0;
    else if (t > 1.0)		/* go to x2,y2 */
	t = 1.0;
/* go t from x1,y1 towards x2,y2 */
    dx = dx * t + x1 - x;
    dy = dy * t + y1 - y;
    return dx*dx + dy*dy;
}
-- 
Glynn Clements <glynn.clements at virgin.net>
    
    
More information about the grass-user
mailing list