A Little Geometry

Allan Hayes
Leicester University
and
De Montfort University Leicester
Department of Mathematics
Leicester LE1 7RH
UNITED KINGDOM
hay@le.ac.uk

Mathematica in Education
Volume 3 Number 1
Winter 1994
(c) TELOS/Springer-Verlag

Introduction

I got this problem some time ago from a colleague; he could not solve it with the computer algebra system that he was using; I give below a solution using Mathematica.

Take any point on the circumcircle of a triangle; drop perpendiculars from this point onto the sides of the triangle.

Figure 1

What do we notice?The feet of the perpendiculars are colinear (the line is called Simpson's line, after its discoverer)– this has an elegant proof in Euclidean geometry, which I give later. But this was not the problem that my colleague had. What he wanted to know was: if we move the point around, is there any pattern to be seen in the corresponding Simpson lines , and if so can we describe it and find how it comes about? The answer,surprised me: it has to do with circles  rolling in circles and relates to a classic circle, the nine-point circle; but I still don't have a proof by Euclidean geometry – if you find one please let me know.  
A good way to see what's going on is by using animations ; several functions for making these are included.

I found it pleasantly satisfying to be able to combine some Euclidean geometery, coordinate geomety, trigonometry, vector algebra, simultaneous equations, integers modulo 3, determinants and the differential calculus –and, of course, Mathematica – in exploring a simple direct topic.

Some further investigations are suggested in the section Further Work.

The Exploration

I'm going to apply Mathematica.
First, I clear out all existing definitions in the current context.

ClearAll["`*"];

Now I can get to work.

The radius of the circle is taken to be 1, and t is the angle shown in the figure below (we are using polar coordinates). The triangle vertices are  v[0], v[1], v[2]; the point on the circle is  p[t]; and the feet of the perpendiculars from p[t] to the sides of the triangle are f[0,t],f[1,t],f[2,t].

Figure 2

Here is  how these fit together (the use of Mod[i,3]  simplifies formulas, since, for example, v[3] = p[ang[Mod[3,3]]] = p[ang[0]] = v[0])

p[t_] := {Cos[t], Sin[t]};
v[i_] := p[ang[Mod[i,3]]];

Put

ang[0]= a; ang[1]= b; ang[2]= c;

I shall find the formula for f[i,t] (the foot of the perpendicular fron p[t] onto the side opposite vertex v[i]); since it is a pair of coordinates  I call it {x,y}. 
What do I know about {x,y}? Because it is on the perpendicular from p[t] to the side v[i+1],v[i+2] it satisfies the equation

perp = ({x,y}-p[t]).(v[i+2]-v[i+1]) == 0;

and, because it is on the side v[i+1],v[i+2], it satisfies  the equation

onside = Det[{{x,y}-v[i+1], {x,y}-v[i+2]}] == 0;

Figure 3

So, with some simplification , the feet of the perpendiculars are given by

f[i_,t_] = Factor[{x,y}/.Solve[{perp,onside}, {x,y}][[1]], Trig -> True]

(Using "=" rather than ":=" in gets the right hand side simplified once and for all instead of every time that the function is subseqently used (it is important if one does this that the symbols i and t are unassigned). The option Trig is set to True because so thatt  Factor can use the special techniques available for trigonometric expressions.)

The determinant test for colinearity that we just used is very useful – here's another use.

The feet of the perpendiculars are colinear if and only if 							Det[{f[1,t]-f[0,t],f[2,t]-f[0,t]}] = 0.
Let's compute:

Factor[
	Det[{f[1,t]-f[0,t],f[2,t]-f[0,t]}],
	Trig->True
]

Fine, the feet of the perpendiculars are colinear.

We press on with investigating the family of Simpson lines produced by varying p[t].

First we need the equation of the Simpson line through the feet  f[i,t]; again we use the determinant test.

The point {x,y} is on the line if and only if the determinant  
	Det[{f[1,t]-{x,y}, f[2,t]-{x,y}}] 
is zero; calculate it:

Factor[
      Det[{f[1,t]-{x,y}, f[2,t]-{x,y}}],
      Trig->True
  	]

The first two factors are zero only in exceptional circumstances. So, if we pick the third one,

sl[t_] = %[[3]]

then the equation of the Simpson line for  p[t] is  sl[t] == 0.

Now for the pictures. The easiest way to get these is to call up a package designed for the job (you can find out about this package and many others in the technical report "Guide to Standard Mathematica Packages" that comes with Mathematica)

Needs["Graphics`ImplicitPlot`"];

First, I generate a list of equations  sl[t] == 0  for a range of values if t (it will speed calculation if I first get a numerical value for Pi)

pi = N[Pi];
Simpsonseqns[a_,b_,c_] = Table[sl[t]==0,{t,0,2pi,pi/12}];

Now I plot their graphs for particular values of a,b,c  (I have chosen .1, .7, -1.6). The option Epilog is used to draw the original circle and the vertices of the triangle on top of the rest of the picture.

ImplicitPlot[	 Simpsonseqns[.1, .7, -1.6], {x,-1.1, 2.5},{y,-1.5,1.5},
	Axes -> False,
	PlotStyle -> RGBColor[0.699, 0.129, 1.000],
	Epilog -> 
		{	
			GrayLevel[0.6],Circle[{0,0},1],
			PointSize[.03],
			Point/@ p/@{.1,.7,-1.6}
		}
];

Figure 4: the vertices of the triangle are the gray dots

How does this remarkable shape comes about? It was seeing this pattern that kept me working on this problem. Incidentally, the cusps (the sharp points) do form an equilateral triangle.

It looks as if the Simpson lines always touch a certain curve. This kind of thing often happens when a family of x-y  curves is given in terms of a parameter t by an equation like

g[x,y,t] = 0

(the curve is called the envelope of the family). Fortunately there is a surpisingly simple rule for finding the parametric equations for the x and y  components of the envelope. It is,

solve the pair of equations  g[x,y,t] = 0 , d[g[x,y,t]]/dt = 0 for x and y.

(x and y will be given in terms of t).

Apply this  rule to our family of Simpson lines and simplify the result.

env[a_,b_,c_,t_] = 
	Factor[
		({x,y}/.Solve[{sl[t]==0, sl'[t]==0},{x,y},{x,y}])[[1]],     (*1*)
		Trig -> True
	]//Expand

Well that really is nice! And if I manually rewrite it in the form

( {Cos[a],Sin[a]} + {Cos[b],Sin[b]} + {Cos[c],Sin[c]} )/2 +
  { Cos[t],Sin[t]} +
  {Cos[a + b + c - 2*t], Sin[a + b + c - 2*t]}/2{Cos[a], Sin[a]} + {Cos[b], Sin[b]} + {Cos[c], Sin[c]}
------------------------------------------------------ + 
                          2
 
                     {Cos[a + b + c - 2 t], Sin[a + b + c - 2 t]}
  {Cos[t], Sin[t]} + --------------------------------------------
                                          2

then it is clear that the point env[a,b,c,t] is reached from

fixedcenter[a_,b_,c_] = (p[a] + p[b] + p[c])/2;                   (*2*)

by going unit distance in direction  t  to

movingcenter[a_,b_,c_,t_] = fixedcenter[a,b,c] + p[t];

and then going distance 1/2  in direction  a+b+c-2 t.

In effect we have a rod of length 1 rotating positively about the fixedcenter, linked (at the movingcenter) to one of length 1/2 which rotates in the opposite direction at three times the rate (relative to the first rod) –this is illustrated below. The rods are in line when  t  = (a+b+c)/3 (and also when  t  = (a+b+c)/3 + 2π/3  and  t  = (a+b+c)/3 + 4π/3 ).

Figure 5

The descripton is much simpler if we measure angles from the direction  (a+b+c)/3.

Figure 6

This can be illustrated by animating the graphics produced by  MovingLinkage. Below is a sequence of the frames generated using Graphics Array. The triangle and its circumcircle are shown in gray (the black dot on this circle is the point p[t] used to construct the Simpson line); the fixed center is red; the moving center is blue and the point at the end of the linkage, that is carried round the envelope, is shown in blue.

Figure 7

The steps used to produce this were
MovingLinkage[.9, 1.5, -0.8, 4, DisplayFunction -> Identity]
Take[%,6]
Partition[%,3]
GraphicsArray[%]
Show[%, DisplayFunction -> $DisplayFunction]
Then the the final graphics adjusted for size and the cell given a surrounding box.

But the best explanation of this motion even simpler:  it is produced by rolling a circle of radius 1/2 round the inside of a circle of radius 3/2 .  The lengths of the rods obviously fit; and as for the angles:  look at in Figures 8 below. Start the small circle in contact with the large one at  P0 and roll it round the larger one to the position shown (the point on the small circle that was at P0 has been taken to P) . The arcs  QP and QP0 are of the same length (there is no slipping). But the radius of the small circle is 1/3 the radius of the large one; so the angle made at the center of the small circle by the arc QP is three times the angle made by the arc QP0 at the center of the large circle (in the opposite direction) – just what we need.

Figure 8

This can be illustrated by the animating the graphics produced by  RollingCircle. Below is a sequence of the frames generated using Graphics Array. As before, the triangle and its circumcircle are shown in gray (the black dot on this circle is the point p[t] used to construct the Simpson line); the fixed center is red. The fixed circle is the larger pale blue circle. As the smaller pale blue circle rolls round the inside of this it carries the initial point of contact  (at right hand cusp) all round the envelope. The linkage from the previous animation is shown for reference.

Figure 9

We have ended up with what is called a hypocycloid.

An immediate consequence of this construction is that the envelope is the same, apart from position, regardless of which triangle we take (provided that the circumcircle of the triangle is of radius 1). Changing the triangle simply rotates the envelope round the fixed center.

Finally the function RollingTangent shows the Simpson line rolling round its envelope.

Figure 10

Geometric Demonstration of Simpson's Line

Here are the two geometric facts  used (concyclic means on the same circle, and of course  iff  means  if and only if). A hint for proving them is given in the section Further Work.

Figure 11

Figure 12

One proof is as follows:

I show that the line through the feet, X and Y, of two of the perpendiculars will pass through the foot , Z, of the third perpendicular.

Figure 13

The points P, C, X, Y are concyclic because the right angles at X and Y are equal (Fact 1) . 
So, by Fact 2,
							y = c. 								(1)
The points P, A, B, C are concyclic because P is on the circumcircle of the triangle ABC. 
So by Fact 2 
							a = c.									(2)
Thus, by (1) and (2),
							a = y.    								(3)
But the points P, Z, A, Y are concyclic because the right angles at Z and Y are equal (Fact 2). So by Fact 1 
					 	 angle  PYZ =  a								(4)
Thus, by (3) and (4) 
						 angle  PYZ =  y                                                                (5)  By (5) the angle 	between YP and YZ is equal to the angle, y, between YP and the continuation of the line segment XY; so the line XY passes through Z.

The Nine-Point Circle

It turns out that our fixed center is a very famous point – the nine point centre – I'll explain what this is (questions about when three points are colinear and when three lines are concurrent have fascinated people for ages).

Here is a picture of a triangle  ABC and some constructions. on it.

Figure 14

This figure is fullof concidences , all of which can be readily proved using Mathematica and the ideas used above.  
The altitudes of the triangle (the perpendiculars from the vertices onto the opposite sides) meet at the orthocenter,O.
The medians (the lines joining the vertices to the mid points of the opposite sides) meet at the  centroid G.
The perpendicur bisectors of the sides meet at the circumcenter, S (the center of the circumcircle).
The nine points:
	• the feet of the altitudes, X, Y,  Z; 
	• the mid points of the sides , D, E, F; 
	• the midpoints, a, b, c, of the lines joining the orthocenter, O, to the vertices, A, B, C;
all lie on the  nine-point circle  (its center, N, is  the  nine-point center).

But, there is more:
The orthocenter, O, the nine-point center, N, the centroid, G, and the circumcenter, S, all lie on a line called the Euler line of the triangle.
And they are nicely arranged on this line:
The nine-point center N, is the mid point of the line joining the circumcenter, S to the orthocenter, O; and it is half as  far again from the circumcenter as  is the centroid, G.

The last property is why our fixed center is in fact the nine-point center. For, going back to equation (*2*) in the Exploration section, we see that the coordinates of the fixed center are

(p[a] + p[b] + p[c])/2

(remember that S is the origin for coordinate system)

And this is,

3/2 ( (p[a] + p[b] + p[c])/3 )
	=  3/2 the coordinates of the centroid G.

(I leave it to you to show that   SG = (p[a] + p[b] + p[c])/3)

In fact we now have the very simple and satisfying results:
	centroid = (p[a] + p[b] + p[c])/3;
	nine-point center = (p[a] + p[b] + p[c])/2;
	orthocenter = (p[a] + p[b] + p[c]).

Further Work

(1) 	Can the envelope be found without using calculus?
	Modify equation (*1*) in the Exploration section to give the intersection of the Simpson 	lines at  points  t  and t + h.

env[a_,b_,c_,t_,h_] = 
		Factor[
			({x,y}/.Solve[{sl[t]==0, sl[t + h]==0},{x,y},{x,y}])[[1]],   
			Trig -> True
		]//Expand

Find out  if this works and investigate its relation to the method used in the text.

(2) 	Prove the two facts used in the geometrical demonstration of the Simpson's line  (hint:
	join the points on the circle to the center of the circle and use isosceles triangles – a 		triangle is  isosceles if two of its sides are equal –the important consequence is that the 	angles opposite these side are also equal).

(3)	Find other ways of demonstrating Simpson’s line by Euclidean geometry - there are at 	least two othe ways using the two facts given.

(4) 	Prove the properties mentioned in the section on the nine point circle, (a) by using 		Mathematica, (b) by Euclidean geometry.

(5 )	Prove the result used in the text that, in two dimentions, three points  a ,b,c,are 		colinear if and only if  Det[{b-a,c-a}] = 0. 
	Extend this result to three points in three dimensions.
	Find tests for the colinearity of
		(a) more than three points in two dimensions ;
		(b) any number of points in any number of dimensions .

(6)	Find conditions for lines to be concurrent similar to those in (5) above for points to be 	colinear.

(7)	Find tests for four points in three dimensions to be in the same plane.

(8}	Find tests for four plane in three dimensions to pass through the same point.

I have not myselfdone the problems below; please let me know if you find anything interesting.

(9)	Is there a generalization of Simpson's line and our envelope result to three dimensions?

(10	Find a  Euclidean proof of the rolling circle construction for the envelope.

(11)	Explain in Euclidean terms the significance of the direction (a+b+c)/3.
	(I am grateful to the reviewer for the following general argument that introduces yet 	another technique . However, I would very much like to see a Euclidean explanation.
	The problem is particularly intriguing since it is known that trisection of a general angle 	is not  possible by Euclidean constructions.

Animations

In the following a,b,c are the positions, in radians, of the points of the triangle; and t  is the position in radians of the point from which the perpendiculars are dropped to the sides of the triangle; n can be any positive integer. To run the examples simply enter the input expression into Mathematica. The numbers can be changed – if you want to keep the original change them in a copy.
I have not shown the graphics generated by the last three since this was  done in the text.

SimpsonConstruction[a,b,c,t], shows the construction of Simpson's line.

Here is an array of the frames from this.

Figure 13

SimpsonConstruction[0,2,3.5,4.5]

SimpsonsLine[a,b,c,t], shows Simpson's line.

Figure 14

SimpsonConstruction[0,2,3.5,4.5]

SimpsonsLinesEnvelope[a,b,c,n], shows the envelope and Simpson's lines at
3n equally spaced points.

SimpsonsLinesEnvelope[0,2,3.5, 9]

RollingTangent[a,b,c,n] shows the envelope and Simpson's line rolling
round it at 3n equally spaced points in succession.

RollingTangent[.1, .7, -1.6, 8]

MovingLinkage[a,b,c,n] shows the rotating linkage at 3n equally spaced points in succession as its tip traces out the envelope.

MovingLinkage[.1, .7, -1.6, 8]

RollingCircle[a,b,c,n] shows the rolling circle at 3n equally spaced points
in succession as a point fixed to its circumfrence traces out the envelope.

RollingCircle[.1, .7, -1.6, 8]

The Code

Evaluated code

Off[General::spell1]

If a new symbol is close in spelling to an existing symbol , Mathematica asks if it was a spelling mistake; this is very useful when preparing code; but  if you intentionally include such symbols it will generate unwanted waeninsg every time the code is loaded; so many people turn this message off after finishing coding.

First I give evaluated forms of the  previous code to allow a quick start up.

p[t_] = {Cos[t], Sin[t]};
v[i_] = p[ang[Mod[i,3]]];
(ang[0]= a; ang[1]= b; ang[2]= c;)

f[i_,t_] = {(Cos[t] + Cos[ang[Mod[1 + i, 3]]] - 
     Cos[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] + 
     Cos[ang[Mod[2 + i, 3]]])/2, 
  -(-Sin[t] - Sin[ang[Mod[1 + i, 3]]] - 
      Sin[t - ang[Mod[1 + i, 3]] - ang[Mod[2 + i, 3]]] - 
      Sin[ang[Mod[2 + i, 3]]])/2};

sl[t_] = 2*y*Cos[a/2 + b/2 + c/2 - t/2] + Sin[a/2 + b/2 + c/2 - (3*t)/2] + 
  Sin[a/2 + b/2 - c/2 - t/2] + Sin[a/2 - b/2 + c/2 - t/2] - 
  2*x*Sin[a/2 + b/2 + c/2 - t/2] - Sin[a/2 - b/2 - c/2 + t/2];

env[a_,b_,c_,t_] = 
	{Cos[a]/2 + Cos[b]/2 + Cos[c]/2 + Cos[a + b + c - 2*t]/2 + Cos[t], 
  	Sin[a]/2 + Sin[b]/2 + Sin[c]/2 + Sin[a + b + c - 2*t]/2 + Sin[t]};

pi = N[Pi];

fixedcenter[a_,b_,c_] := (p[a] + p[b] + p[c])/2;
movingcenter[a_,b_,c_, t_] := fixedcenter[a,b,c] + p[t];
centroid[a_,b_,c_] := (p[a] + p[b] + p[c])/3;

plotRange[a_,b_,c_] := 
	{	{ Min[ -1, #1-1.6],  Max[1, #1+1.6] },
		{ Min[ -1, #2-1.6],  Max[1, #2+1.6] }
	}&@@N[fixedcenter[a,b,c]];
	 
	(*the N is put in to force numerical evaluation of expressions like 
	Sin[1] so that Min and Max can be determined at this stage*)

General Objects

The  graphics primitive Line[p,q] is really LineSegment[p,q], that is the part of the line between the two points p and q. The object fullLine, below approximates the complete line.

fullLine::usage = 
"fullLine[{p,q},k:(10^5)] gives Line[{p - k(q-p), q + k(q-p)}]";

fullLine[{p_,q_},k_:(10^5)] := Line[N[{p - k(q-p), q + k(q-p)}]]

We need to be able to show perpendicularity in the usual way (with a little box as in Fig. 1).

blockedLine[{s_,f_}] :=
	Module[{v,n,d,u,p},
		v = f-s;
		n = Sqrt[N[v.v]];
		d =  Min[.1,.3 n];
		u = d v /n;
		p = {{0,-1},{1,0}}.u;
		
		Line[{s,f,f+p, f+p-u,f-u}]
	]

Particular Objects

circumcircle := 
	{	GrayLevel[0.6], 
		Circle[{0,0},1]
	};

centroidpoint[a_,b_,c_] := 
	{	PointSize[0.02],
		GrayLevel[0.6],
		Point[N[centroid[a,b,c]]]
	};

fixedcenterpoint[a_,b_,c_] :=
	{	PointSize[0.02],
		RGBColor[1,0,0],
		Point[fixedcenter[a,b,c]]
	};

triangle[a_,b_,c_] =
   {  GrayLevel[0.6],
     	Table[Line[{v[i],v[i+1]}], {i,0,2}],
   	PointSize[0.03],
   	Table[Point[v[i]],{i,0,2}]
    };

fulltriangle[a_,b_,c_] =
   { 	GrayLevel[0.6],
     	Table[fullLine[{v[i],v[i+1]}], {i,0,2}],
    	PointSize[0.03],
   	Table[Point[v[i]],{i,0,2}]
   };

perpendiculars[a_,b_,c_,t_] =
		{	
			{RGBColor[0,0,1],
			 Table[blockedLine[{p[t],f[i,t]}], {i,0,2}]},
			PointSize[0.02],
			Point[p[t]]
		};

Graphics and Animations

simpsonsline[a_,b_,c_,t_] = 
		{	RGBColor[0.699, 0.129, 1.000],
			fullLine[{f[0,t], f[1,t]}]
		};

SimpsonConstruction[a_,b_,c_,t_, opts___] :=
	Map[
		Show[Graphics[#],
			opts,			
			PlotRange -> plotRange[a,b,c],
			AspectRatio -> Automatic
		]&,
		{
			{circumcircle},
			{circumcircle, fulltriangle[a,b,c]},
			{circumcircle, fulltriangle[a,b,c], perpendiculars[a,b,c,t]},
			{circumcircle, fulltriangle[a,b,c],
							perpendiculars[a,b,c,t], simpsonsline[a,b,c,t]}
		}
	]

SimpsonsLine[a_,b_,c_,t_, opts___] :=
	Show[
		Graphics[{
			circumcircle, 
			fulltriangle[a,b,c],
		 	perpendiculars[a,b,c,t], 
		 	simpsonsline[a,b,c,t]
		}],
			opts,
			PlotRange -> plotRange[a,b,c],
			AspectRatio -> Automatic
	]

envelope[a_,b_,c_] := (envelope[a,b,c]=       (*note the caching*)
	Block[{t},
		ParametricPlot[
			Evaluate[env[a, b, c, t]], {t,0,N[2Pi]}, 
			
			PlotStyle -> {{RGBColor[0.699, 0.129, 1.000]}}, (*purple*)
			DisplayFunction ->Identity
		][[1]]  
		(* [[1]] removes the options, so we don't need change DisplayFunction*)
	])

SimpsonsLinesEnvelope[a_,b_,c_,n_, opts___]:=
	Show[
		Graphics[{
			circumcircle,
			triangle[a,b,c],		
			Table[
				simpsonsline[a,b,c,t],
				{t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)}
			]
		}],
		opts,
		AspectRatio -> Automatic, 
		PlotRange -> plotRange[a,b,c]
	]

movingpoint[a_,b_,c_,t_] := 
	{
		{	GrayLevel[.6],
			Line[{{0,0},p[t]}]
		},
		PointSize[.02], 
		Point[{0,0}],
		Point[p[t]]
	}

RollingTangent[a_,b_,c_,n_, opts___] :=
	Table[
		Show[
			Graphics[{
				circumcircle,
				triangle[a,b,c],
				envelope[a,b,c], 
				movingpoint[a,b,c, (a+b+c)/3 +t],
				PointSize[0.02],
				RGBColor[0,0,1],
				Point[env[a,b,c,(a+b+c)/3 + t]],
				simpsonsline[a,b,c,(a+b+c)/3 + t]
			}],
			opts,
			AspectRatio -> Automatic, 
			PlotRange -> plotRange[a,b,c]
		],
	{t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)}
	]

linkage[a_,b_,c_,t_]:=
	{  
	  	Line[{fixedcenter[a,b,c], movingcenter[a,b,c,t], env[a,b,c,t]}],
	  	fixedcenterpoint[a,b,c],
		PointSize[.02],
		RGBColor[0,0,1],
	  	Point[movingcenter[a,b,c,t]],
	  	Point[env[a,b,c,t]]    
	}

MovingLinkage[a_,b_,c_, n_, opts___] :=
	Table[
		Show[
			Graphics[{
				circumcircle,
				centroidpoint[a,b,c],
				triangle[a,b,c], 
				movingpoint[a,b,c, (a+b+c)/3 +t],
				envelope[a,b,c],
			  	linkage[a,b,c, (a+b+c)/3 +t]
			}],
			opts, 
			AspectRatio -> Automatic, 
			PlotRange -> plotRange[a,b,c]
		],
	{t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)}
	]

rollingcircle[a_,b_,c_,t_]:=
	{  
		linkage[a,b,c,t],
		
		RGBColor[0.545, 0.700, 1.000],          (*pale blue*)
		Circle[movingcenter[a,b,c,t],0.5],
		Circle[fixedcenter[a,b,c],1.5],
		
		RGBColor[0,0,1],                        (*arcs rolled out*) 
		Circle[fixedcenter[a,b,c],3/2, {(a+b+c)/3,t + 10^-6}],
		Circle[movingcenter[a,b,c,t],0.5, { (a+b+c) - 2t, t + 10^-6}]
	};
	
RollingCircle[a_,b_,c_,n_, opts___] :=
	Table[
		Show[
			Graphics[{
				circumcircle,
				centroidpoint[a,b,c],
				triangle[a,b,c],
				movingpoint[a,b,c, (a+b+c)/3 +t],
				envelope[a,b,c],
			  	rollingcircle[a,b,c, (a+b+c)/3 +t]
		  	}], 
			opts,
			AspectRatio -> Automatic, 
			PlotRange -> plotRange[a,b,c]
		],
		{t,0, 2(1-1/(3n)) N[Pi], 2 N[Pi]/(3n)}
	]

References

Wagon, S. 1991. Mathematica in Action. W. H. Freeman, New York.
Monasse, D. Symbolic Geometry, Golden Spirals and Descartes-Geometry. This  Journal,  Vol 2, Number 3, Spring 1993.
Helzer, G. Constructions with Straight Edge and Compass. The Mathematica Journal, Vol 2, Issue 3, Summer 1992.

About the Author

Allan Hayes received his Ph.D from Cambridge University in 1960. He has held posts in mathematics at MIT and Purdue University and, from 1965, the University of Leicester. He has become increasingly concerned with teaching and with encouraging a more active role for students. In 1988 he became an independent consultant in the use of computer systems, principally Mathematica , in  education. He is active in the Institute for Mathematics and its Applications and is currently helping to develop the use of Mathematica  at De Monfort University Leicester.

Department of Mathematics
The University
Leicester LE1 7RH
U.K.
email: hay@le.ac.uk