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