Function Repository Resource:

JohnsonCircles

Source Notebook

Generate three congruent Johnson circles given a reference triangle

Contributed by: Shenghui Yang

ResourceFunction["JohnsonCircles"][{p1,p2,p3}]

returns the congruent Johnson circle triplets of the triangle defined by vertices p1,p2 and p3.

Details

The three Johnson circles are congruent to the circumcircle of the reference triangle.
Each Johnson circle passes through the orthocenter and two vertices of the reference triangle.
ResourceFunction["JohnsonCircles"][Triangle[{p1,p2,p3}]] is equivalent to ResourceFunction["JohnsonCircles"][{p1,p2,p3}].

Examples

Basic Examples (2) 

Find the three Johnson circles of given the reference triangle:

In[1]:=
tri = {{0, 0}, {1.2, 4}, {5, 0}};
jcs = ResourceFunction["JohnsonCircles"][tri]
Out[2]=

Exact values can be used:

In[3]:=
tri = {{0, 0}, {1, 4}, {5, 0}};
jcs = ResourceFunction["JohnsonCircles"][tri]
Out[4]=

Properties and Relations (3) 

The Johnson circles are closely related to the circumcircle and orthocenter of the reference triangle:

In[5]:=
tri = {{0, 0}, {1.2, 4}, {5, 0}};
orthoCen = TriangleCenter[tri, "Orthocenter"];
jcs = ResourceFunction["JohnsonCircles"][tri]
Out[6]=

The three Johnson circles are congruent to the circumcircle of the reference triangle:

In[7]:=
refCircum = TriangleConstruct[tri, "Circumcircle"]
Out[7]=

The three Johnson circles are congruent to the circle that passes through the centers of the three Johnson circles:

In[8]:=
johnsonCenterCircum = CircleThrough[jcs[[All, 1]]]
Out[8]=

The three Johnson circles meet at the orthocenter of the reference triangle:

In[9]:=
EuclideanDistance[orthoCen, #] & /@ (jcs[[All, 1]])
Out[9]=

Visualize the five congruent circles in one diagram with the reference triangle:

In[10]:=
labelFun[v1_, v2_] := {
   PointSize[Scaled[0.05`]], Hue[0.58`, 1, 1], Point[v1], Text[Style[v2, White, FontSize -> Scaled[0.03`]], v1]};
(* visualize 5 congruent circles together with the reference triangle *)
Legended[
 Module[{or = TriangleCenter[tri, "Orthocenter"]},
  Graphics[{
     {Orange, Opacity[0.2`], Triangle[tri]},
     {Dashed, Green, refCircum},
     {Dashed, Blue, johnsonCenterCircum},
     jcs,
     labelFun[or, "H"],
     MapThread[
      labelFun, {jcs[[All, 1]], {"\!\(\*SubscriptBox[\(J\), \(A\)]\)",
         "\!\(\*SubscriptBox[\(J\), \(B\)]\)", "\!\(\*SubscriptBox[\(J\), \(C\)]\)"}}],
     MapThread[labelFun, {tri, {"A", "B", "C"}}]
     }, PlotRange -> {{-4.5, 7.5}, {-5, 7}}] // Framed],
 Placed[
LineLegend[{Black, 
Directive[Green, Dashed], 
Directive[Blue, Dashed]}, {"Johnson Circles", "Circumcircle of ABC", "Circle through Johnson centers"}], Bottom]]
Out[11]=

The Soddy circle for the three Johnson circles is the circumcircle of PAPBPC, the anticomplementary triangle of the reference triangle ABC:

In[12]:=
tri = {{0, 0}, {1.2, 4}, {5, 0}};
jcs = ResourceFunction["JohnsonCircles"][tri];
jcsTri = Triangle[jcs[[All, 1]]];
orthoCen = TriangleCenter[tri, "Orthocenter"];
anti = TriangleConstruct[tri, "AntimedialTriangle"];
In[13]:=
labelFun[v1_, v2_] := {
   PointSize[Scaled[0.05`]], Hue[0.58`, 1, 1], Point[v1], Text[Style[v2, White, FontSize -> Scaled[0.03`]], v1]};
(* visualize 5 congruent circles together with the reference triangle *)
Legended[
 Module[{or = TriangleCenter[tri, "Orthocenter"]},
  Graphics[{
     
Sequence[
Map[Line[{orthoCen, #}]& , 
Part[anti, 1]], {
Opacity[0.4], 
EdgeForm[Thick], Cyan, anti}, {Orange, 
Opacity[0.2], 
Triangle[tri]}, {Transparent, 
EdgeForm[Dashed], jcsTri}, {Dashed, Blue, 
TriangleConstruct[anti, "Circumcircle"]}, jcs, 
labelFun[or, "H"], 
MapThread[labelFun, {
Part[jcsTri, 1], {"\!\(\*SubscriptBox[\(J\), \(A\)]\)", "\!\(\*SubscriptBox[\(J\), \(B\)]\)", "\!\(\*SubscriptBox[\(J\), \(C\)]\)"}}], 
MapThread[labelFun, {tri, {"A", "B", "C"}}], 
MapThread[labelFun, {
Part[anti, 1], {"\!\(\*SubscriptBox[\(P\), \(A\)]\)", "\!\(\*SubscriptBox[\(P\), \(B\)]\)", "\!\(\*SubscriptBox[\(P\), \(C\)]\)"}}]]
     }, PlotRange -> {{-4.8, 7.5}, {-5.3, 7}}] // Framed],
 Placed[
LineLegend[{Black, 
Directive[Blue, Dashed]}, {"Johnson Circles", "Soddy circle of the Johnson circles"}], Bottom]]
Out[14]=

Use ScalingTransform function to verify the homothety relation between triangle JAJBJC and PAPBPC:

In[15]:=
t = ScalingTransform[{2, 2}, orthoCen];
Triangle[t /@ jcs[[All, 1]]]
Out[16]=

Compare to the antimedial triangle:

In[17]:=
anti
Out[17]=

Therefore, the triangle PAPBPC is the dilation of JAJBJC by a factor of two from the orthocenter H of the reference triangle (as the center of similitude):

In[18]:=
RegionSimilar[anti, Triangle[tri]]
Out[18]=

Because both triangle ABC and JAJBJC are similar to PAPBPC with contracting scaling factor of 1/2, the two triangles are in fact congruent to each other:

In[19]:=
{RegionSimilar[Triangle[jcs[[All, 1]]], Triangle[tri]],
 Chop[Area[Triangle[jcs[[All, 1]]]] - Area[Triangle[tri]]]}
Out[19]=

The Johnson triangle and its reference triangle share the same nine-point center, the same Euler line and the same radius for nine-point circle:

In[20]:=
tri = {{0, 0}, {1.2, 4}, {5, 0}};
jcs = ResourceFunction["JohnsonCircles"][tri];
jcsTri = Triangle[jcs[[All, 1]]];
In[21]:=
{TriangleCenter[tri, "NinePointCenter"], TriangleCenter[jcsTri, "NinePointCenter"]}
Out[21]=
In[22]:=
ResourceFunction[
  "LineFit"] /@ {ResourceFunction["EulerLinePoints"][Triangle[tri]], ResourceFunction["EulerLinePoints"][jcsTri]}
Out[22]=
In[23]:=
{TriangleMeasurement[tri, "NinePointRadius"], TriangleMeasurement[jcsTri, "NinePointRadius"]}
Out[23]=

Publisher

Shenghui Yang

Requirements

Wolfram Language 13.0 (December 2021) or above

Version History

  • 1.0.0 – 15 April 2024

Source Metadata

Related Resources

License Information