1694 uint32_t ai = 0, bi = 0;
1696 double radius_A, radius_B, d;
1697 int is_disjoint, is_overlapping, is_contained, is_same_center;
1701 lwerror(
"lw_dist2d_arc_arc only supports mindistance");
1716 if (radius_A < 0 && radius_B < 0)
1729 is_disjoint = (d > (radius_A + radius_B));
1730 is_contained = (d < fabs(radius_A - radius_B));
1731 is_same_center =
p2d_same(¢er_A, ¢er_B);
1732 is_overlapping = ! (is_disjoint || is_contained || is_same_center);
1755 ¢er_A, radius_A,
1756 ¢er_B, radius_B,
1758 for (uint32_t i = 0; i < npoints; i++)
1780 if (is_disjoint || is_contained || is_overlapping)
1782 if (!is_same_center)
1787 ¢er_A, radius_A, ¢er_B,
1793 ¢er_B, radius_B, ¢er_A,
1800 ¢er_A, radius_A, B1,
1806 ¢er_A, radius_A, B3,
1812 ¢er_B, radius_B, A1,
1818 ¢er_B, radius_B, A3,
1826 for (uint32_t i = 0; i < ai; i++)
1827 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.