1684 uint32_t ai = 0, bi = 0;
1686 double radius_A, radius_B, d;
1687 int is_disjoint, is_overlapping, is_contained, is_same_center;
1691 lwerror(
"lw_dist2d_arc_arc only supports mindistance");
1706 if (radius_A < 0 && radius_B < 0)
1719 is_disjoint = (d > (radius_A + radius_B));
1720 is_contained = (d < fabs(radius_A - radius_B));
1721 is_same_center =
p2d_same(¢er_A, ¢er_B);
1722 is_overlapping = ! (is_disjoint || is_contained || is_same_center);
1745 ¢er_A, radius_A,
1746 ¢er_B, radius_B,
1748 for (uint32_t i = 0; i < npoints; i++)
1770 if (is_disjoint || is_contained || is_overlapping)
1772 if (!is_same_center)
1777 ¢er_A, radius_A, ¢er_B,
1783 ¢er_B, radius_B, ¢er_A,
1790 ¢er_A, radius_A, B1,
1796 ¢er_A, radius_A, B3,
1802 ¢er_B, radius_B, A1,
1808 ¢er_B, radius_B, A3,
1816 for (uint32_t i = 0; i < ai; i++)
1817 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 void lwerror(const char *fmt,...) __attribute__((format(printf
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.