Application Center - Maplesoft

App Preview:

Rolling Wheel on a Parametric Curve

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

road.mws

Rolling wheel on a parametric road

by Thomas Grapperon, Facult des Sciences de Luminy, France, t.grapperon@laposte.net, 2001 Thomas Grapperon

NOTE: This worksheet demonstrates the use of Maple for displaying non analytical trajectories and retrieving the common parametric curves.

Introduction

My work began with a rolling circle on the x-axis. We could define all the parameters of this animation with analytical expressions. In this case, the position of a point of the wheel of radius 1 at the time "t" is given by x = t-sin(t), y = 1-cos(t) . We could see two different equation in each coordinates : one for the motion of the center of the wheel, e.g. x[1] = t, y[1] = 1 , and one for the rotation of the wheel, e.g. x[2] = -sin(t), y[2] = -cos(t) . The complete trajectory is thus given by %? .

At the beginning, I supposed that the generalisation for any kind of road is simple, e.g., adding the rotation part to another path. The result is not very usefull...

The problem is that the length of road covered by the wheel is an integral that does not always have an analytical solution. For example, if the road is a circle of radius R, and the wheel a circle of radius r inside the first circle, the distance covered at t is K*t , with K a constant. But if the road is the Lissajou curve, the speed is not constant, and the integral has no an analytical solution.

One solution is to calculate the sum of the little displacements from the beginning to t. We lose a lot of precision in this case, because the distance is known at t and t+1 but not between. We could partialy recover it if we increase the resolution (but also the computation).

I made a procedure, traj(r,C,s,T,res) . It returns an animation of the wheel rolling on the road.

The procedure arguments are :

- r , the radius of the wheel.

- C , the parametric equation of the road.

- s , the relative position of the wheel to the road : s=1 for the wheel on the road, or inside a closed one, s=-1 for the wheel under the road or outside a closed one.

- T , the duration of the motion.

- res , the number of frames.

The grey curve is the position of the center of the wheel.

> restart;

Section I: The procedure

The procedure body

> traj:=proc(r,C,s,T,res) #(Radius, Param.equation, Position(+-1), Time, Resolution)
local totale,tt,CC,dc,dtc,dist,ddist,ctct,tc,i,j,k,a;


#curve and speed
CC:=[subs(t=tt,op(1,C)),subs(t=tt,op(2,C))]:
dc:=diff(CC,tt):

#norm of the speed
ddist:=unapply(sqrt(op(1,dc)^2+op(2,dc)^2),tt);

#array of the total displacement at t*T/res
dist:=array(0..res);dist[0]:=0;
for k from 1 to res do dist[k]:=dist[k-1]+evalf(int(ddist(k*T/res),tt=(k-1)*T/res..k*T/res)): od:


#coordinates of the center of the wheel at t*T/res
tc:=[
unapply( op(1,CC)-s*r*op(2,dc)/ddist(tt),tt ),
unapply( op(2,CC)+s*r*op(1,dc)/ddist(tt),tt )
]:

#coordinates of the contact point at t*T/res
ctct:=unapply(CC,tt):

#initial angle
a:=-s*(Pi-linalg[angle](
[op(1,tc(0)),op(2,tc(0))]-ctct(0) ,[0,-1])):

#animation
totale:=
seq(

plots[display]({


#road
plot([op(CC),tt=0..T],color=black),

#wheel
plot([
op(1,tc(j*T/res))+r*cos(i),
op(2,tc(j*T/res))+r*sin(i),
i=0..2*Pi],color=red,thickness=2),

#distance center/contact point
plot([
[op(1,tc(j*T/res)),op(2,tc(j*T/res))],
[op(1,ctct(j*T/res)),op(2,ctct(j*T/res))]
],color=grey),

#center of the wheel trajectory
plot([op(1,tc(tt)),op(2,tc(tt)),tt=0..(j+.01)*T/res],color=grey),

#radius of the wheel
plot([
[op(1,tc(j*T/res)),op(2,tc(j*T/res))],
[op(1,tc(j*T/res)),op(2,tc(j*T/res))]-r*[sin(a+s*dist[j]/r),cos(a+s*dist[j]/r)]
],color=red,thickness=2),

#trajectory of the point on the wheel
seq(plot([
[op(1,tc(m*T/res))-r*sin(a+s*dist[m]/r),op(2,tc(m*T/res))-r*cos(a+s*dist[m]/r)],
[op(1,tc((m+1)*T/res))-r*sin(a+s*dist[(m+1)]/r),op(2,tc((m+1)*T/res))-r*cos(a+s*dist[(m+1)]/r)]],color=tan,thickness=2),m=0..(j-1))



})
,j=0..res):

plots[display](totale,insequence=true,scaling=constrained,axes=none);

end:

Section 2: Some curves

The cycloid:

> traj(1,[t,0],1,15,30);

[Maple Plot]

The hypocycloid:

> traj(1,5*[cos(t),sin(t)],1,2*Pi,50);

[Maple Plot]

The epicycloid:

> traj(1,5*[cos(t),sin(t)],-1,2*Pi,50);

[Maple Plot]

Sinusoidal trip:

> traj(1,1.5*[(t),sin(t)],1,3*Pi,30);

[Maple Plot]

Climbing the Gauss Mountain:

> traj(1,4*[(t),3*exp(-(t-2)^2)],1,4,50);

[Maple Plot]

Rolling on the infinity:

> traj(1,2*[3*cos(t),sin(2*t)],-1,2*Pi,50);

[Maple Plot]

>

Disclaimer: While every effort has been made to validate the solutions in this worksheet, Waterloo Maple Inc. and the contributors are not responsible for any errors contained and are not liable for any damages resulting from the use of this material.