The Cycloid and Other Curves

Parametrized curves occur in a number of different settings and in a variety of applications. For example, the cycloid is the path traced out by a point on a wheel as it rolls on a horizontal surface. (Click image below to animate)

[Maple Plot]

In particular, suppose that R is the radius of a wheel rolling along the x -axis, and suppose that the point on the wheel that traces out the cycloid is at (0,0) initially. If the wheel rotates through an angle theta , then it rolls a distance R theta along the x -axis.

[Maple OLE 2.0 Object]

As a result, if the point (0,0) is moved to the point ( x,y ) by the rolling of the wheel, then

x + R sin(theta) = R theta , y + R cos(theta) = R

so that

x = R*theta-R*sin(theta) , y = R-R*cos(theta)

Moreover, if the wheel is rolling with an angular speed of omega radians per unit time and if t denotes time, then the angle theta is related to the time t by theta = omega*t . As a result, the parametrization of the cycloid is

x = R*omega*t-R*sin(omega*t) , y = R-R*cos(omega*t)

which as a vector-valued function is

r ( t ) = [ R*omega*t-R*sin(omega*t) , R-R*cos(omega*t) ]

Let's draw this curve along with the circle and point that traces it out. First we define the curve.

> R:=2; # radius of the wheel
omega:=1; # angular velocity of the wheel in units of radians per unit time
cycloid:=[R*omega*t-R*sin(omega*t),R-R*cos(omega*t)];

R := 2

omega := 1

cycloid := [2*t-sin(t), 2-cos(t)]

>

Next, we draw the cycloid in grey, then retrace it in blue. We include the circle and the point P for illustration.

> min_t:=0: #Enter the low value of the parameter
max_t:=5*Pi: #Enter the high value of the parameter
cycloid_static:=plot([cycloid[1],cycloid[2],t=min_t..max_t],color=grey):
for i from 1 to 30 do # Draw 30 frames to be displayed in sequence
current_t:=min_t+max((i-1)*(max_t-min_t)/30,0.01):
wheel:=circle([R*omega*current_t,R],R,color=brown):
P_point:=disk(subs(t=current_t,cycloid),0.3,color=black):
P_label:=textplot([subs(t=current_t,cycloid[1])-0.4,
subs(t=current_t,cycloid[2])+0.4,`P`],font=[TIMES,ITALIC,12],align={ABOVE,LEFT}):
cycloid_sec:=plot([cycloid[1],cycloid[2],t=min_t..current_t],color=blue):
cyc_frames[i]:=display(wheel,P_point,cycloid_sec):
end do:
cycloid_ani:=display([seq(cyc_frames[i],i=1..30)],insequence=true):
display(cycloid_static,cycloid_ani,scaling=constrained);

[Maple Plot]

>

Circles are often used to form more elaborate curves, as is evidenced by the once popular children's toy Spirograph. In particular, many interesting curves can be formed by rolling a smaller circle on the inside of a larger circle, or alternatively, by rolling any circle on the outside of another circle. For example, let's define a curve by following the path of a point P on the edge of a circle of radius 1/4 as it rolls on the inside of the unit circle.

Once the smaller circle has rolled through an angle theta , the center of the smaller circle is at ( 3/4*cos(theta), 3/4*sin(theta) ). Moreover, if the smaller circle rolls without slipping, then the green and blue arcs must have the same length. The relationship s = r*theta implies that the smaller circle has rotated through an angle of 4*theta .

[Maple OLE 2.0 Object]

Thus, P is at the point offset from the center by the sine and cosine of 3*theta , which is at

( 3/4 cos( theta ) + 1/4 cos( 3*theta ), 3/4 sin( theta ) + 1/4 sin( 3*theta ) )

However, identifies for triple angles reduce these even further:

> 1/4*cos(3*theta)=expand(1/4*cos(3*theta));
3/4*cos(theta)+1/4*cos(3*theta)=expand(3/4*cos(theta)+1/4*cos(3*theta));

1/4*cos(3*theta) = cos(theta)^3-3/4*cos(theta)

3/4*cos(theta)+1/4*cos(3*theta) = cos(theta)^3

>

Likewise, the y -coordinates simplify, thus implying that the coordinates of P are

( cos^3 ( theta ), sin^3 ( theta ) )

Since P traces out the astroid, the parametrization of the astroid is

r ( t ) = [ cos^3 ( t ), sin^3 ( t ) ]

Let's look at the astroid graphically below:

> min_t:=0: max_t:=2*Pi: #Once around the circle
unitcircle:=plot([cos(t),sin(t),t=0..2*Pi],color=black):
for i from 1 to 30 do # Draw 30 frames to be displayed in sequence
current_t:=min_t+max((i-1)*(max_t-min_t)/29,0.01):
innercircle:=circle([0.75*cos(current_t),0.75*sin(current_t)],0.25,color=brown):
astroid:=plot([cos(t)^3,sin(t)^3,t=0..current_t],color=blue):
P_point:=disk([cos(current_t)^3,sin(current_t)^3],0.02,color=black):
P_label:=textplot([0.9*cos(current_t)^3,0.9*sin(current_t)^3,`P`],
font=[TIMES,ITALIC,12],align={BELOW,LEFT}):
cyc_frames[i]:=display(innercircle,astroid,P_point,P_label):
end do:
cycloid_ani:=display([seq(cyc_frames[i],i=1..30)],insequence=true):
display(unitcircle,cycloid_ani,scaling=constrained);

[Maple Plot]

>