Calculate the shortest distance between an arc and an edge.
1298 int pt_in_arc, pt_in_seg;
1303 lwerror(
"lw_dist2d_seg_arc does not support maxdistance mode");
1313 if ( radius_C < 0.0 )
1319 lwerror(
"lw_dist2d_pt_seg failed in lw_dist2d_seg_arc");
1327 if ( dist_C_D < radius_C )
1333 dist_D_EF = sqrt(radius_C*radius_C - dist_C_D*dist_C_D);
1334 length_A = sqrt((A2->
x-A1->
x)*(A2->
x-A1->
x)+(A2->
y-A1->
y)*(A2->
y-A1->
y));
1337 E.
x = D.
x - (A2->
x-A1->
x) * dist_D_EF / length_A;
1338 E.
y = D.
y - (A2->
y-A1->
y) * dist_D_EF / length_A;
1340 F.
x = D.
x + (A2->
x-A1->
x) * dist_D_EF / length_A;
1341 F.
y = D.
y + (A2->
y-A1->
y) * dist_D_EF / length_A;
1348 if ( pt_in_arc && pt_in_seg )
1360 if ( pt_in_arc && pt_in_seg )
1372 else if ( dist_C_D == radius_C )
1379 if ( pt_in_arc && pt_in_seg )
1393 G.
x = C.
x + (D.
x-C.
x) * radius_C / dist_C_D;
1394 G.
y = C.
y + (D.
y-C.
y) * radius_C / dist_C_D;
1400 if ( pt_in_arc && pt_in_seg )
1412 if (pt_in_arc && !pt_in_seg)
1419 else if (pt_in_seg && !pt_in_arc)
#define LW_TRUE
Return types for functions with status returns.
double lw_arc_center(const POINT2D *p1, const POINT2D *p2, const POINT2D *p3, POINT2D *result)
Determines the center of the circle defined by the three given points.
int lw_pt_in_seg(const POINT2D *P, const POINT2D *A1, const POINT2D *A2)
Returns true if P is between A1/A2.
int lw_arc_is_pt(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3)
Returns true if arc A is actually a point (all vertices are the same) .
int lw_pt_in_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3)
Returns true if P is on the same side of the plane partition defined by A1/A3 as A2 is.
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
int lw_dist2d_pt_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, DISTPTS *dl)
int lw_dist2d_pt_seg(const POINT2D *p, const POINT2D *A, const POINT2D *B, DISTPTS *dl)
lw_dist2d_comp from p to line A->B This one is now sending every occasion to lw_dist2d_pt_pt Before i...
int lw_dist2d_seg_seg(const POINT2D *A, const POINT2D *B, const POINT2D *C, const POINT2D *D, DISTPTS *dl)
Finds the shortest distance between two segments.
void lw_dist2d_distpts_init(DISTPTS *dl, int mode)
int lw_dist2d_pt_pt(const POINT2D *thep1, const POINT2D *thep2, DISTPTS *dl)
Compares incoming points and stores the points closest to each other or most far away from each other...
Structure used in distance-calculations.