Application Center - Maplesoft

App Preview:

Coriolis Effect

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

Learn about Maple
Download Application

Coriolis Effect

Pascal Thériault-Lauzier
Cégep de Rimouski
Québec, Canada

revised by Robert Israel



This worksheet demonstrates the action of Coriolis force on a projectile launched from Earth.



VectorCalculus is only used in the Model section to use vectors in an easier way.


restart; with(VectorCalculus)

Section 1: Model


This part of the code is used to compute the 3D model of the Coriolis force of a projectile from differential equations. The positive x axis is assumed to point East, the positive y axis North and the positive z axis up.  The origin is at latitude θ on the surface of the Earth..  Air resistance, the curvature of the Earth's surface and the decrease in gravitation with altitude are not taken into account.  The units used are meters for distance and seconds for time.


Here is the position vector::


X := `<,>`(x(t), y(t), z(t))


The velocity and acceleration vectors are obtained by differentiation:

V := diff(X, t)

A := diff(X, t, t)

The angular velocity vector of the Earth.  Units are radians per second: note that the Earth turns by π radians in 12 hours, and each hour is 3600 seconds.

Omega := Typesetting:-delayDotProduct(VectorCalculus:-`*`(Pi, 1/VectorCalculus:-`*`(12, 3600)), `<,>`(0, VectorCalculus:-`-`(cos(theta)), VectorCalculus:-`-`(sin(theta))))

The Coriolis acceleration:

F[cor] := Typesetting:-delayCrossProduct(VectorCalculus:-`*`(2, V), Omega)

The gravitational acceleration: we assume NULLg = 9.8 &lobrk;m/(s^(2))&robrk;.

g := 9.8;

The differential equations: one for each component, saying that the acceleration is the sum of the Coriolis and gravitational accelerations.

eqs := seq(A[i] = VectorCalculus:-`+`(F[cor][i], F[grav][i]), i = 1 .. 3)

The initial conditions: we will start at height z[0] above the origin, with initial velocity components Vx[0], Vy[0], Vz[0].``

ics := x(0) = 0, y(0) = 0, z(0) = z[0], (D(x))(0) = Vx[0], (D(y))(0) = Vy[0], (D(z))(0) = Vz[0]

Now we solve the initial value problem using dsolve, putting the result back into a vector and simplifying.

sol := simplify(eval(X, dsolve({eqs, ics})));


Section 2: Plotting


Here is a procedure that plots the projectile trajectory.until it hits the ground.  We need to know at what value of t that occurs.  The equation for z(t) when the Coriolis force is included can't be solved in closed form, as it contains trigonometric functions of t as well as t and t^2 terms.  We therefore use the numerical solver fsolve, starting at  t = Vz[0]/g+sqrt(Vz[0]^2+2*g*z[0])/g  which is when the projectile would hit the ground if there were no Coriolis force.


plotcanon := proc (V, ang1, ang2, Z0, Theta) local vx0, vy0, vz0, Sol, T; vx0 := V*cos((1/180)*Pi*ang1)*sin((1/180)*ang2*Pi); vy0 := V*cos((1/180)*Pi*ang1)*cos((1/180)*ang2*Pi); vz0 := sin((1/180)*Pi*ang1)*V; Sol := eval(sol, {theta = (1/180)*Theta*Pi, Vx[0] = vx0, Vy[0] = vy0, Vz[0] = vz0, z[0] = Z0}); T := fsolve(Sol[3] = 0, t = vz0/g+sqrt(vz0^2+2*g*Z0)/g); plots:-spacecurve(Sol, t = 0 .. T, colour = red, axes = boxed, labels = [x, y, z], title = sprintf("Final position: (%0.2f , %0.2f)", evalf(eval(Sol[1], t = T)), evalf(eval(Sol[2], t = T)))) end proc

Usage : plotcanon( Initial speed (m/s) , Initial angle above horizon (degrees) , Initial angle clockwise from North (degrees), Initial altitude (m) , North latitude (degrees) )


Here's an example where you can notice the effect of Coriolis force. The projectile is launched East (90 degrees from North) at 55 degrees elevation from ground level at latitude 49 degrees.. Without the Coriolis force the projectile shouldn't deviate from y = 0..  The deviation is rather small: it's visible only because the scales on the x and y axes differ by a factor of over 100..

plotcanon(650, 55, 90, 0, 49)

Section 3: Aiming



The following procedure takes an initial speed V (in m/sec), altitude Z0  above the target (in m), latitude Theta (in degrees North), horizontal distance dist to target (in m) and heading head to target (in degrees clockwise from North) and returns a heading, elevation angle  and time of flight to hit the target.  Of course, if the target is too far away it is impossible to hit, and the procedure will return an error "No solution".  The calculation uses fsolve, starting with the values that would work if there were no Coriolis force.

aim := proc (V, Z0, Theta, dist, head) local x1, y1, Sol, ti, Q; x1 := dist*sin((1/180)*head*Pi); y1 := dist*cos((1/180)*head*Pi); Sol := eval(sol, {theta = (1/180)*Theta*Pi, Vx[0] = V*cos((1/180)*ang1*Pi)*sin((1/180)*ang2*Pi), Vy[0] = V*cos((1/180)*ang1*Pi)*cos((1/180)*ang2*Pi), Vz[0] = V*sin((1/180)*ang1*Pi), z[0] = Z0}); ti := Re(sqrt(2)*sqrt(g*Z0+V^2-sqrt(2*V^2*Z0*g+V^4-g^2*dist^2)))/g; Q := fsolve({0 = Sol[3], x1 = Sol[1], y1 = Sol[2]}, {t = ti, ang1 = 180*arctan((1/2)*(-2*Z0+g*ti^2)/(ti*V), dist/(ti*V))/Pi, ang2 = head}); if not type(Q, set) then error "No solution" end if; Q end proc



For example:

aim(650, -100, 49, 30000, 90)


For convenience, you can enter the input parameters in the table below and press the Go button: the elevation angle, heading and time of flight will be placed in the table below the button.



Initial speed (m/sec)

Initial altitude (m)

Latitude (degrees N)

Horizontal distance (m)

Heading (degrees)





Elevation (degrees)

Heading (degrees)

Time of flight (sec)






Etchecopar, Philippe. Guide d'initiation à Maple. Rimouski: Presses pédagogiques de l'est, 2004.

Wikipedia. Coriolis Effect. (February 11th 2005).



We have demonstrated that Coriolis effect has an influence on the trajectory of a projectile.

Legal Notice: The copyright for this application is owned by the author(s). Neither Maplesoft nor the author are responsible for any errors contained within and are not liable for any damages resulting from the use of this material. This application is intended for non-commercial, non-profit use only. Contact the author for permission if you wish to use this application in for-profit activities.