1683 uint32_t ai = 0, bi = 0;
1685 double radius_A, radius_B, d;
1686 int is_disjoint, is_overlapping, is_contained, is_same_center;
1690 lwerror(
"lw_dist2d_arc_arc only supports mindistance");
1705 if (radius_A < 0 && radius_B < 0)
1718 is_disjoint = (d > (radius_A + radius_B));
1719 is_contained = (d < fabs(radius_A - radius_B));
1720 is_same_center =
p2d_same(¢er_A, ¢er_B);
1721 is_overlapping = ! (is_disjoint || is_contained || is_same_center);
1744 ¢er_A, radius_A,
1745 ¢er_B, radius_B,
1747 for (uint32_t i = 0; i < npoints; i++)
1769 if (is_disjoint || is_contained || is_overlapping)
1771 if (!is_same_center)
1776 ¢er_A, radius_A, ¢er_B,
1782 ¢er_B, radius_B, ¢er_A,
1789 ¢er_A, radius_A, B1,
1795 ¢er_A, radius_A, B3,
1801 ¢er_B, radius_B, A1,
1807 ¢er_B, radius_B, A3,
1815 for (uint32_t i = 0; i < ai; i++)
1816 for (uint32_t j = 0; j < bi; j++)
#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_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.
int p2d_same(const POINT2D *p1, const POINT2D *p2)
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
static uint32_t lw_dist2d_circle_circle_intersections(const POINT2D *cA, double rA, const POINT2D *cB, double rB, POINT2D *I)
Calculates the intersection points of two overlapping circles.
double distance2d_pt_pt(const POINT2D *p1, const POINT2D *p2)
int lw_dist2d_pt_arc(const POINT2D *P, const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, DISTPTS *dl)
static void lw_dist2d_distpts_set(DISTPTS *dl, double distance, const POINT2D *p1, const POINT2D *p2)
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.
int lw_dist2d_seg_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl)
Calculate the shortest distance between an arc and an edge.
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...
static int lw_dist2d_circle_intersections(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *center_A, double radius_A, const POINT2D *P, POINT2D *I, uint32_t *ni)
Calculates the intersection points of a circle and line.