cycloid.mws
Animation of a Cycloid
by Jason Schattman, Waterloo Maple, Inc.
jschattman@maplesoft.com
October, 2000
A cycloid is the path followed by a point on a disk that rolls on a flat surface at uniform speed. We derive the parametric formula for the cycloid and produce an animation of the system.
>
restart; with(plots): with(plottools):
Warning, the name changecoords has been redefined
Derivation of the parametric cycloid formula
Assume the disk rolls along the
x
-axis to the right, starting from the origin. Consider the point
at the top of the circle in its initial position. The goal is to find the parametric formula for the path
as the disk rolls, given the disk's radius
and angular velocity
(in radians per second).
The motion of point
may be decomposed into translation and rotation. The translation of point
is equal to the translation of the center of the disk. To derive the latter, note that the number of revolutions as a function of time
is
>
revolutions := omega * t / (2 * Pi);
Then the horizontal translation of the center at time
is the number of revolutions times the perimeter of the circle,
, and the vertical translation is
0
:
>
translation := [2 * Pi * r * revolutions, 0];
Now we derive the motion of
due to rotation. Because the disk rolls to the right, and the starting point is the top of the disk, we measure the angle of rotation
with respect to the
y
-axis. Then the rotation is given by
>
rotation := [r * sin(omega * t), r * cos(omega * t)];
The cycloid motion of
is the vector sum of its translation and rotation, offset vertically by the radius
, so that the disk rolls on top of the
x
-axis.
>
cycloid := translation + rotation + [0, r];
Animation of a cycloid
This animation contains three layers:
- Tracing of the cycloid
- A circle moving to the right to show the translation of the disk
- A chord through the center of the circle that rotates with angular velocity
and translates with the circle, to create the impression that the circle is rotating.
We build each layer separately, using Maple's built-in functions
animatecurve()
for the cycloid, and
animate()
for the circle and chord. We then combine the layers and show the resulting animation using Maple's
display()
function.
We first specify the constants and give the time the disk will roll.
>
omega := 1; r:= 1; rollTime := 4 * Pi;
Layer 1: Tracing of the cycloid
>
cycloidTrace := animatecurve([cycloid[1], cycloid[2], t = 0..rollTime],
view = [0..r * omega * rollTime, 0..4*r],
scaling = constrained, color = black,
frames = 100, thickness=2):
cycloidTrace;
Layer 2: The circle
, drawn parametrically in each frame with respect to parameter
, and translated to the right in each frame using the vector
derived above.
>
disk:=animate([translation[1] + r * cos(s), r + r * sin(s), s = 0..2 * Pi],
t = 0..rollTime, scaling = constrained, frames = 100,
view = [0..r * omega * rollTime, 0..4*r], thickness=2):
disk;
Layer 3: The chord through the center
, drawn parametrically in each frame with respect to parameter
. The chord must both translate and rotate, so we make use of the vectors
translation
and
rotation
. Note that the tip of the chord, which corresponds to the parameter value
, follows the cycloid.
>
chord:=animate([translation[1] + (s/r) * rotation[1], (s/r) * rotation[2] + r, s = -r..r],
t = 0..rollTime, scaling = constrained, color = blue, frames = 100,
view = [0..r * omega * rollTime, 0..4*r], thickness=2):
chord;
The final result
>
display( [cycloidTrace, disk, chord], axes=none );
>