Calculate the shortest distance between an arc and an edge.
1373 int pt_in_arc, pt_in_seg;
1378 lwerror(
"lw_dist2d_seg_arc does not support maxdistance mode");
1394 lwerror(
"lw_dist2d_pt_seg failed in lw_dist2d_seg_arc");
1402 if (dist_C_D < radius_C)
1408 dist_D_EF = sqrt(radius_C * radius_C - dist_C_D * dist_C_D);
1409 length_A = sqrt((A2->
x - A1->
x) * (A2->
x - A1->
x) + (A2->
y - A1->
y) * (A2->
y - A1->
y));
1412 E.
x = D.
x - (A2->
x - A1->
x) * dist_D_EF / length_A;
1413 E.
y = D.
y - (A2->
y - A1->
y) * dist_D_EF / length_A;
1415 F.
x = D.
x + (A2->
x - A1->
x) * dist_D_EF / length_A;
1416 F.
y = D.
y + (A2->
y - A1->
y) * dist_D_EF / length_A;
1422 if (pt_in_arc && pt_in_seg)
1434 if (pt_in_arc && pt_in_seg)
1446 else if (dist_C_D == radius_C)
1453 if (pt_in_arc && pt_in_seg)
1467 G.
x = C.
x + (D.
x - C.
x) * radius_C / dist_C_D;
1468 G.
y = C.
y + (D.
y - C.
y) * radius_C / dist_C_D;
1474 if (pt_in_arc && pt_in_seg)
1485 if (pt_in_arc && !pt_in_seg)
1492 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.