Dr Michael Penn recently post this question in his outdoor lecture series on YouTube as most part of continental USA is getting warmer and greener week by week. This configuration is part of a more general classic geometry problem called Problem of Apollonius, in which you are going to find the fourth circle that tangent to three given circles by using only straightedge and a non-collapsing compass.
You may also checkout Mathmaniac’s video about using circle inversion to solve some general cases with detached base circles.
Construction and Animation
Construction and Animation
In this blog I am going to show a code golf that quickly solves the particular case in Michael’s video for arbitrary triangle. This code is also very efficient and numerically stable, you can just drag one vertex around and the largest circle is solved on the fly.
Only one function is needed here. My Apollonius function use the definition of internally tangent circles. Basically it means the distance between two internally tangent circles equal to the difference of their radii. Repeating the definition for three times and wrap everything in the FindRoot function.
In[]:=
Apollonius[c1_,c2_,c3_,r1_,r2_,r3_]:=With[{gc=(c1+c2+c3)/3},FindRoot[{EuclideanDistance[{x,y},c1]r-r1,EuclideanDistance[{x,y},c2]r-r2,EuclideanDistance[{x,y},c3]r-r3},{{x,gc[[1]]},{y,gc[[2]]},{r,r1+r2+r3}}]]
FindRoot needs to know the initial values before the solver kicks off. So I carefully choose the gravity center of three given centers of circles as the educated guess for initial value of the fourth center. This guarantees the convergences of the solve. Same reason for choosing sum of radii as the initial value for the fourth radius.
Just follow Michael’s statement of the problem to make three sides of a given triangle as the diameter. Use Manipulate to create the animation, WLOG, with two points of the triangle fixed at origin and {2,0}.
In[]:=
a={0,0};b={2,0};Manipulate[c1=Midpoint[{a,b}];c2=Midpoint[{b,c}];c3=Midpoint[{c,a}];r1=EuclideanDistance[a,b]/2;r2=EuclideanDistance[b,c]/2;r3=EuclideanDistance[c,a]/2;Graphics[{{Transparent,EdgeForm[{Thick,Red}],Triangle[{a,b,c}]},{Dashed,Circle[c1,r1],Circle[c2,r2],Circle[c3,r3]},{Red,Circle[{x,y},r]/.Apollonius[c1,c2,c3,r1,r2,r3]}}],{{c,{3,4}/2},Locator,AppearanceNone},SaveDefinitionsTrue]
Out[]=
Hidden Orthic Triangle
Hidden Orthic Triangle
This problem is as beautify as the forest backyard from Michael’s video not only because of the amazing animation, but also from the precise concurrency of the circles and sides of triangle. Here I claim that DFE is the orthic triangle of ABC
Lets assume D is the intersection of circle with diameter BC and side AB. I can immediately say Angle BDC is right angle based on Thale's theorem.
Therefore CD is an altitude of triangle ABC and D is the foot. Because Thale’s theorem works in two direction, it immediately follows that arc ADC forms a semi circle. This proves the concurrency part. The same arguments apply to point F and E. Connecting DEF then we have the orthic triangle of ABC.
This is quite nice problem for Euclidean geometry study. Not too difficult but it includes three import conclusions in one problem. Indeed, kill three birds with one stone!