PostGIS  2.5.1dev-r@@SVN_REVISION@@

◆ distance2d_sqr_pt_seg()

double distance2d_sqr_pt_seg ( const POINT2D p,
const POINT2D A,
const POINT2D B 
)

Definition at line 2380 of file measures.c.

References distance2d_sqr_pt_pt(), r, s, POINT2D::x, and POINT2D::y.

Referenced by ptarray_dp_findsplit_in_place().

2381 {
2382  double r,s;
2383 
2384  if ( ( A->x == B->x) && (A->y == B->y) )
2385  return distance2d_sqr_pt_pt(p,A);
2386 
2387  r = ( (p->x-A->x) * (B->x-A->x) + (p->y-A->y) * (B->y-A->y) )/( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y) );
2388 
2389  if (r<0) return distance2d_sqr_pt_pt(p,A);
2390  if (r>1) return distance2d_sqr_pt_pt(p,B);
2391 
2392 
2393  /*
2394  * (2)
2395  * (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay)
2396  * s = -----------------------------
2397  * L^2
2398  *
2399  * Then the distance from C to P = |s|*L.
2400  *
2401  */
2402 
2403  s = ( (A->y-p->y)*(B->x-A->x)- (A->x-p->x)*(B->y-A->y) ) /
2404  ( (B->x-A->x)*(B->x-A->x) +(B->y-A->y)*(B->y-A->y) );
2405 
2406  return s * s * ( (B->x-A->x)*(B->x-A->x) + (B->y-A->y)*(B->y-A->y) );
2407 }
double distance2d_sqr_pt_pt(const POINT2D *p1, const POINT2D *p2)
Definition: measures.c:2322
char * r
Definition: cu_in_wkt.c:24
double x
Definition: liblwgeom.h:330
double y
Definition: liblwgeom.h:330
char * s
Definition: cu_in_wkt.c:23
Here is the call graph for this function:
Here is the caller graph for this function: