Tangent Circles Problem

Click here to return to the Tutorial.

Here is the problem: Given three lengths, construct a set of three circles that are mutually tangent and have those three lengths as their radii. In the figure above you can adjust the three lengths by moving the points labeled A2, B2 and C2 at the top of the diagram. As you do so, the three circles change size appropriately to maintain their tangency.

The Solution

The key observation is that if the radii of the three circles centered at A, B and C are to be a, b, and c, respectively, then the centers A and B must be a distance a+b apart, B and C must be b+c apart, and A and C must be a+c apart.

Thus the solution is pretty easy. First, we need to construct line segments that have the lengths d1 = a+b, d2 = b+c and d3 = c+a. Then we need to construct a triangle having these three segments as lengths. The vertices of this triangle will serve as centers for the three circles.

It is easy to construct a line segment that is the sum of two segments—just draw a line and from a single point, draw circles having radii equal to the two lengths. The points on opposite sides of the single point where they intersect the line will be separated by a length that is the sum of the two lengths.

In this way the three lengths of the desired triangle could be constructed. Once we know the lengths d1, d2 and d3, it is easy to construct the triangle. Draw circles of radii d2 and d3 about the two ends of a segment of length d1. The point where those circles intersect is d2 from one end and d3 from the other, so we are done.

Being lazy, we would like to minimize the number of times we have to copy lengths, so here is a reasonable way to do the construction. Assume that you have the three lengths a, b and c laid out as in the figure above. Draw a new line with a point "V" on it. Using V as the center, draw circles of radius a and b. (This can be done with the Ctr PP=>C command. This command first takes the center of a circle and then uses the distance between the two points you select as the radius of the circle. In Geometer you simply need to select V as the center and then the endpoints A1 and A2 of the length-defining segment as your radius to obtain the first circle, for example.)

On one side of V find the intersection of one of the circles and on the other, the intersection with the other. The distance between these two intersection points will be a+b. See the figure above.

Now we have identified A and B on our triangle, and they are clearly separated by a+b. Now draw a third circle about V of radius c. It should be clear that the distance from B to the intersection of that line with the circle on the other side of V from B is b+c and that the distance from A to intersection of that circle on the other side of V from A is a+c. Thus we can draw two circles centered at A and B having edge points at the two intersections with the line of the circle of radius c centered at V. The intersection of these circles yields the location of the point C.

To complete the diagram, draw circles of radius a, b, and c about points A, B and C, respectively. To clear up the clutter, you probably will want to change the color of all your auxiliary lines to the invisible color.

At this point the problem is solved, but suppose you would like to convert your diagram to a beautiful one that would be more suitable for a classroom presentation. Load the diagram Demos/TangentCircs.T and play with it as you read these notes. Here are some things that you might do:

Here is a complete listing of the Geometer code to produce the diagram:

.geometry "version 0.60";
v1 = .pinned(-0.78, 0.85, .red, "A\sub{1}");
v2 = .pinned(-0.78, 0.7, .green, "B\sub{1}");
v3 = .pinned(-0.78, 0.55, .cyan, "C\sub{1}");
v4 = .pinned(0.78, 0.85, .in);
v5 = .pinned(0.78, 0.7, .in);
v6 = .pinned(0.78, 0.55, .in);
l1 = .l.vv(v1, v4, .in);
l2 = .l.vv(v2, v5, .in);
l3 = .l.vv(v3, v6, .in);
v7 = .vonl(l1, -0.452096, 0.85, .red, "A\sub{2}");
v8 = .vonl(l2, -0.598802, 0.7, .green, "B\sub{2}");
v9 = .vonl(l3, -0.38024, 0.55, .cyan, "C\sub{2}");
l4 = .l.vv(v1, v7, .red);
l5 = .l.vv(v2, v8, .green);
l6 = .l.vv(v3, v9, .cyan);
v10 = .free(-0.517964, -0.0898204, .in);
v11 = .free(-0.0269461, -0.0898204, .in, "V");
l7 = .l.vv(v10, v11, .in, .longline);
c1 = .c.ctrvv(v11, v1, v7, .in);
c2 = .c.ctrvv(v11, v2, v8, .in);
v12 = .v.lc(l7, c1, 1, .red, "A");
v13 = .v.lc(l7, c2, 2, .green, "B");
c3 = .c.ctrvv(v11, v3, v9, .in);
v14 = .v.lc(l7, c3, 1, .in);
v15 = .v.lc(l7, c3, 2, .in);
c4 = .c.vv(v12, v15, .in);
c5 = .c.vv(v13, v14, .in);
v16 = .v.cc(c4, c5, 2, .cyan, "C");
c6 = .c.ctrvv(v16, v3, v9, .cyan);
c8 = .c.ctrvv(v13, v2, v8, .green);
c9 = .c.ctrvv(v12, v1, v7, .red);
l8 = .l.vv(v12, v16, .in);
l9 = .l.vv(v16, v13, .in);
v17 = .v.lc(l8, c6, 1, .in);
v18 = .v.lc(l9, c6, 2, .in);
l10 = .l.vv(v12, v11, .red);
l11 = .l.vv(v12, v17, .red);
l12 = .l.vv(v17, v16, .cyan);
l13 = .l.vv(v16, v18, .cyan);
l14 = .l.vv(v18, v13, .green);
l15 = .l.vv(v13, v11, .green);
.text("Given three lengths, construct three mutually
tangent circles having those three lengths
as their radii.");

Click here to return to the Tutorial.