outerTangent static method
Implementation
static LineSegment? outerTangent(
Coordinate c1, double r1, Coordinate c2, double r2) {
if (r1 > r2) {
LineSegment seg = outerTangent(c2, r2, c1, r1)!;
return LineSegment(seg.p1, seg.p0);
}
double x1 = c1.x;
double y1 = c1.y;
double x2 = c2.x;
double y2 = c2.y;
double a3 = -atan2(y2 - y1, x2 - x1);
double dr = r2 - r1;
double d = sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
double a2 = asin(dr / d);
if (a2.isNaN) return null;
double a1 = a3 - a2;
double aa = (pi / 2) - a1;
double x3 = x1 + (r1 * cos(aa));
double y3 = y1 + (r1 * sin(aa));
double x4 = x2 + (r2 * cos(aa));
double y4 = y2 + (r2 * sin(aa));
return LineSegment.of2(x3, y3, x4, y4);
}