CoriolisKick.frink

Download or view CoriolisKick.frink in plain text format


/** This program calculates the effect of the Coriolis force on a kicked
football.  (Or any other projectile).  It models the effects of the
Coriolis force in 3 dimensions.

For the equations and coordinate system used, see:
   https://en.wikipedia.org/wiki/Coriolis_effect#Rotating_sphere
*/


var t1
var t2
var e1
var e2
var n1
var n2
var u1
var u2

for useCoriolis = [false, true]
{
   // Initial velocity components
   veast  = 30 mph
   vnorth = 30 mph
   vup    = 10 mph

   // Initial positions; will terminate when up = 0 m
   east  = 0 yards
   north = 0 yards
   up    = 3 inches   // Initial height above ground.

   timestep = 0.0001 s

   omega = 1 revolution/day      // Rotation rate of the earth

   latitude = +40 degrees        // Boulder, Colorado

   t = 0 s
   while up > 0 mm
   {
      t = t + timestep
      
      // Eastward component
      if useCoriolis
         aeast = 2 omega (vnorth sin[latitude] - vup cos[latitude])
      else
         aeast = 0 m/s^2
      
      veast = veast + aeast timestep
      east = east + veast timestep

      
      // Northward component
      if useCoriolis
         anorth = 2 omega (-veast sin[latitude])
      else
         anorth = 0 m/s^2
      
      vnorth = vnorth + anorth timestep
      north = north + vnorth timestep

      
      // Upward component
      aup = -gravity                             // Constant gravity
      if useCoriolis
         aup = aup + 2 omega (veast cos[latitude])  // Add coriolis effect upwards
      vup = vup + aup timestep    // deltaV = a t
      up  = up + vup timestep     // deltaDistance = v t
   }

   println["\nuseCoriolis = $useCoriolis:\nt: "     + format[t, "s", 3]       + "\t" +
           "East: "  + format[east, "yards", 3] + "\t" +
           "North: " + format[north,"yards", 3] + "\t" +
           "Up: "    + format[up,   "yards", 3]]

   if useCoriolis == false
      [t1, e1, n1, u1] =[t, east, north, up]
   else
      [t2, e2, n2, u2] =[t, east, north, up]
}

// Calculate total deflection
dtotal = sqrt[(e2-e1)^2 + (n2-n1)^2 + (u2-u1)^2]
println["\nDeflection difference due to Coriolis effect:"]
println["dt: "     + format[t2-t1, "s", 3] + "\t" +
        "dEast: "  + format[e2-e1,"mm",3]  + "\t" +
        "dNorth: " + format[n2-n1,"mm",3]  + "\t" +
        "dUp: "    + format[u2-u1,"mm",3]  + "\n" +
        "total: " + format[dtotal,"mm",3]]


Download or view CoriolisKick.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19971 days, 14 hours, 41 minutes ago.