# CoriolisBall.frink

``` /** 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 */ // Initial velocity components veast  = 0 m/s vnorth = 6.0015 m/s  // Less than this, ball stops short vup    = 0 mph // Initial positions     east  = 0 yards north = 0 yards up    = 0 inches   // Initial height above ground. timestep = 0.01 s omega = 1 revolution/day      // Rotation rate of the earth latitude = 33.63326 degrees // Atlanta airport useCoriolis = true            // Change this to see with/without Coriolis effect. t = 0 s while north < 726 m and vnorth > 0.001 m/s {    t = t + timestep        // Eastward component    if useCoriolis       aeast = 2 omega (vnorth sin[latitude] - vup cos[latitude])    else       aeast = 0 m/s^2    speed = sqrt[vnorth^2 + veast^2]    // Friction always works *opposite* of direction of rolling, so we    // calculate friction components for each velocity component.    vangle = arctan[veast, vnorth]  // Angle east of north //   println["Angle is " + (angle->"degrees")]    aFriction = -0.0248 m/s^2    aFrictionEast = aFriction sin[vangle]    aFrictionNorth = aFriction cos[vangle]    veast = veast + aeast timestep + aFrictionEast 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 + aFrictionNorth timestep    north = north + vnorth timestep    speed = sqrt[vnorth^2 + veast^2]        // Upward component    // Rolling, so no upward acceleration    aup = 0 m/s^2    //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["t: "     + format[t, "s", 3]       + "\t" +            "East: "  + format[east,"m",3]     + "\t" +            "North: " + format[north,"m",3] + "\t" +            "Speed: "    + format[speed,"m/s",3]] } if north < 726 m    println["*** Ball stopped short. ***"] ```

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 18115 days, 20 hours, 12 minutes ago.