Calculate the shortest distance between an arc and an edge.
1384 int pt_in_arc, pt_in_seg;
1389 lwerror(
"lw_dist2d_seg_arc does not support maxdistance mode");
1405 lwerror(
"lw_dist2d_pt_seg failed in lw_dist2d_seg_arc");
1413 if (dist_C_D < radius_C)
1419 dist_D_EF = sqrt(radius_C * radius_C - dist_C_D * dist_C_D);
1420 length_A = sqrt((A2->
x - A1->
x) * (A2->
x - A1->
x) + (A2->
y - A1->
y) * (A2->
y - A1->
y));
1423 E.
x = D.
x - (A2->
x - A1->
x) * dist_D_EF / length_A;
1424 E.
y = D.
y - (A2->
y - A1->
y) * dist_D_EF / length_A;
1426 F.
x = D.
x + (A2->
x - A1->
x) * dist_D_EF / length_A;
1427 F.
y = D.
y + (A2->
y - A1->
y) * dist_D_EF / length_A;
1433 if (pt_in_arc && pt_in_seg)
1445 if (pt_in_arc && pt_in_seg)
1457 else if (dist_C_D == radius_C)
1464 if (pt_in_arc && pt_in_seg)
1478 G.
x = C.
x + (D.
x - C.
x) * radius_C / dist_C_D;
1479 G.
y = C.
y + (D.
y - C.
y) * radius_C / dist_C_D;
1485 if (pt_in_arc && pt_in_seg)
1496 if (pt_in_arc && !pt_in_seg)
1503 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.