Finds the four lines tangent to two circles with given centers and radii.
The function solves the belt problem in 2D for circles with center c and radii r.
INPUT
2-by-2 matrix containig coordinates of the centers of the circles; one row per circle.
2-by-1 vector with the radii of the circles.
OUPUT
4-by-4 matrix with the points of tangency. Each row describes a segment(edge).
4-by-2 vector with the point of intersection of the inner tangents (crossed belts)
with the segment that joins the centers of the two circles. If
the i-th edge is not an inner tangent then inner(i,:)=[NaN,NaN].
Example:
c         = [0 0;1 3];
r         = [1 0.5];
[T inner] = beltProblem(c,r)
⇒ T =
 -0.68516   0.72839   1.34258   2.63581
  0.98516   0.17161   0.50742   2.91419
  0.98675  -0.16225   1.49338   2.91888
 -0.88675   0.46225   0.55663   3.23112
⇒ inner =
  0.66667   2.00000
  0.66667   2.00000
      NaN       NaN
      NaN       NaN
See also: edges2d.
The following code
c = [0 0;1 3]; r = [1 0.5]; [T inner] = beltProblem(c,r) figure(1) clf hold on h = drawEdge (T); set(h(find(~isnan(inner(:,1)))),'color','m'); set(h,'linewidth',2); hold on drawCircle([c(1,:) r(1); c(2,:) r(2)],'linewidth',2); axis tight axis equal # ------------------------------------------------------------------- # The circles with the tangents edges are plotted. The solution with # crossed belts (inner tangets) is shown in red.
Produces the following output
T =
  -0.68516   0.72839   1.34258   2.63581
   0.98516   0.17161   0.50742   2.91419
   0.98675  -0.16225   1.49338   2.91888
  -0.88675   0.46225   0.55663   3.23112
inner =
   0.66667   2.00000
   0.66667   2.00000
       NaN       NaN
       NaN       NaN
and the following figure
| Figure 1 | 
|---|
![]()  | 
Package: geometry