Picture this: you’re standing on a spinning turntable and you throw a ball toward your friend. The ball travels in a perfectly straight line — but because you and your friend are rotating with the platform, you both perceive its path as curved. That, scaled to the entire Earth, is the Coriolis effect: any object moving within a rotating reference frame experiences an apparent force that deflects it from a straight-line trajectory.

1. Evidence 1 — North-South Deflection (Atmospheric Science)


This argument comes from atmospheric science textbooks (e.g., Holton & Hakim, An Introduction to Dynamic Meteorology) and provides the clearest physical intuition for the Coriolis effect.

Imagine an object launched from the equator (radius $R$, tangential speed $v_0 = \Omega R$) moving northward until it reaches latitude $\varphi$. At that latitude, Earth’s surface has tangential speed $v(\varphi) = \Omega R\cos\varphi$ — slower than the equator. But the object still carries its original angular momentum, so its eastward speed exceeds the ground beneath it. Result: the object deflects eastward — in the Northern Hemisphere this means a deflection to the right relative to the direction of motion.

General rule: In the Northern Hemisphere, moving objects deflect to the right; in the Southern Hemisphere, to the left. At the equator the effect is zero because $\sin 0 = 0$.

2. Evidence 2 — The Sink Drain: Myth vs. Shapiro Experiment


You’ve probably heard that “water drains counterclockwise in the Southern Hemisphere.” This is one of the most famous scientific beliefs — and it’s partly wrong.

Why ordinary drains don’t show the Coriolis effect

The Coriolis acceleration in a typical sink is about $a_{\text{Cor}} \approx 2 \times 7.27\times10^{-5} \times 0.01 \times \sin(45°) \approx 10^{-6}$ m/s². Gravity is $g = 9.8$ m/s². The ratio is roughly $10^{-7}$ — meaning Coriolis is ten million times weaker than local effects (bowl shape, initial water disturbance, any tiny breeze).

When can it be observed?

In 1962, Ascher Shapiro (MIT) demonstrated that under highly controlled conditions, the Coriolis effect is measurable in a 1.8-meter pool — provided the water is left completely undisturbed for 24 hours to dissipate all initial rotation. Result: the vortex was always clockwise in the Northern Hemisphere.

At larger scales — hurricanes, ocean gyres, jet streams — the Coriolis effect dominates and shapes Earth’s global climate system.

Ocean currents — Coriolis effect
Global ocean currents — Coriolis-driven rotation is clearly visible at planetary scale (source: Wikipedia)

3. Mathematical Foundation — Rotating Frames (Simon’s Analytical Mechanics)


In Analytical Mechanics by Simon (2013), the time derivative of an arbitrary vector $\mathbf{A}$ as seen from an inertial frame ($S$) and a rotating frame ($S’$) are related by:

$$\left(\frac{d\mathbf{A}}{dt}\right)_S = \left(\frac{d\mathbf{A}}{dt}\right)_{S’} + \boldsymbol{\Omega} \times \mathbf{A}$$

where:
$\mathbf{A}$ : Arbitrary vector
$\boldsymbol{\Omega}$ : Angular velocity vector of rotating frame — in rad/s
$S$ : Inertial (non-rotating) frame
$S’$ : Rotating frame

Applying this relation twice to the position vector $\mathbf{r}$ yields the equation of motion in the rotating frame:

$$m\ddot{\mathbf{r}}’ = \mathbf{F}_{\text{real}} – 2m(\boldsymbol{\Omega} \times \dot{\mathbf{r}}’) – m\boldsymbol{\Omega} \times (\boldsymbol{\Omega} \times \mathbf{r}’) – m\dot{\boldsymbol{\Omega}} \times \mathbf{r}’$$

where:
$m$ : Mass of object — in kg
$\ddot{\mathbf{r}}’$ : Acceleration in rotating frame — in m/s²
$\mathbf{F}_{\text{real}}$ : Real (inertial) force — in N
$\boldsymbol{\Omega}$ : Earth’s angular velocity — in rad/s; $7.27\times10^{-5}$
$\dot{\mathbf{r}}’$ : Velocity of object in rotating frame — in m/s

The three extra terms are fictitious forces:

Key insight: The Coriolis force is always perpendicular to velocity, so it never does work and never changes the object’s speed — it only changes the direction of motion. This is exactly analogous to the magnetic force on a moving electric charge.

For Earth, $\Omega \approx 7.27 \times 10^{-5}$ rad/s. The Coriolis acceleration at latitude $\varphi$ for an object with speed $v$ is:

$$a_{\text{Cor}} = 2\Omega v \sin\varphi$$

where:
$\Omega$ : Earth’s angular velocity — in rad/s; $7.27\times10^{-5}$
$v$ : Speed of object — in m/s
$\varphi$ : Geographic latitude — in °
$a_{\text{Cor}}$ : Coriolis acceleration — in m/s²

4. Evidence 3 — Hurricanes and Geostrophic Flow


The most spectacular everyday evidence of the Coriolis effect is in weather systems. Air flows from high-pressure to low-pressure regions — but the Coriolis effect deflects it:

The governing equation for geostrophic flow — where the Coriolis force exactly balances the pressure gradient — is:

$$\mathbf{v}_g = \frac{1}{2\Omega\rho\sin\varphi}\left(-\nabla p \times \hat{z}\right)$$

where:
$\mathbf{v}_g$ : Geostrophic wind velocity — in m/s
$\rho$ : Air density — in kg/m³; $\approx 1.2$
$\nabla p$ : Pressure gradient — in Pa/m
$\hat{z}$ : Vertical unit vector

5. The Foucault (Coriolis) Pendulum


The Foucault pendulum is the most direct laboratory demonstration of the Coriolis effect. The equations of motion in the horizontal plane are:

$$\ddot{x} = -\omega_0^2 x + 2\Omega_z \dot{y}$$
$$\ddot{y} = -\omega_0^2 y – 2\Omega_z \dot{x}$$

where:
$\omega_0$ : Natural frequency of pendulum $\sqrt{g/L}$ — in rad/s
$\Omega_z$ : Vertical component of Earth’s rotation $\Omega\sin\varphi$ — in rad/s
$x, y$ : Horizontal displacement of pendulum bob — in m

Defining the complex variable $\zeta = x + iy$, the solution is:

$$\zeta(t) = e^{-i\Omega_z t}\left(A e^{i\omega_+ t} + B e^{-i\omega_- t}\right)$$

The oscillation plane rotates at rate $\Omega_z$. The period for one complete precession is:

$$T_{\text{prec}} = \frac{24\,\text{h}}{\sin\varphi}$$

where:
$T_{\text{prec}}$ : Precession period of oscillation plane — in h
$\varphi$ : Geographic latitude — in °
Key values:

Location Latitude Precession Period
North Pole 90° 24 hours
Paris (original Foucault pendulum) 48.8° 32.1 hours
Tehran 35.7° 41.1 hours
Equator ∞ (no precession)

Foucault Pendulum at the Panthéon, Paris

The original Foucault pendulum at the Panthéon in Paris — its plane of oscillation completes one full rotation every 32 hours:

6. Simulation 1 — Trajectory Deflection in a Rotating Frame


The code below shows the trajectory of a ball thrown northward in two frames: inertial (no Coriolis) and rotating (with Coriolis). Adjust the latitude and initial speed to see how the deflection changes.

[pyodide]
import numpy as np
import matplotlib
matplotlib.use(‘Agg’)
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# Parameters
lat_deg = 45.0 # latitude (degrees)
v0 = 300.0 # initial speed (m/s) northward
t_max = 200.0 # simulation time (s)
Omega = 7.2921e-5 # Earth rotation rate (rad/s)

lat = np.radians(lat_deg)
Omega_z = Omega * np.sin(lat) # vertical component

def coriolis_ode(t, state):
x, y, vx, vy = state
ax = 2 * Omega_z * vy
ay = -2 * Omega_z * vx
return [vx, vy, ax, ay]

def inertial_ode(t, state):
x, y, vx, vy = state
return [vx, vy, 0, 0]

state0 = [0, 0, 0, v0]
t_eval = np.linspace(0, t_max, 2000)

sol_cor = solve_ivp(coriolis_ode, [0, t_max], state0, t_eval=t_eval, rtol=1e-8)
sol_in = solve_ivp(inertial_ode, [0, t_max], state0, t_eval=t_eval, rtol=1e-8)

fig, axes = plt.subplots(1, 2, figsize=(11, 5))
fig.suptitle(f’Coriolis Deflection at Latitude {lat_deg}N | v0 = {v0} m/s’, fontsize=12, fontweight=’bold’)

ax = axes[0]
ax.plot(sol_in.y[0]/1000, sol_in.y[1]/1000, ‘b–‘, lw=1.5, label=’Inertial (no Coriolis)’)
ax.plot(sol_cor.y[0]/1000, sol_cor.y[1]/1000, ‘r-‘, lw=2.5, label=’Rotating frame (with Coriolis)’)
deflection = sol_cor.y[0][-1] – sol_in.y[0][-1]
ax.annotate(f’Deflection: {deflection/1000:.2f} km East’,
xy=(sol_cor.y[0][-1]/1000, sol_cor.y[1][-1]/1000),
xytext=(sol_cor.y[0][-1]/1000 – 20, sol_cor.y[1][-1]/1000 – 10),
arrowprops=dict(arrowstyle=’->’, color=’darkred’),
fontsize=9, color=’darkred’)
ax.set_xlabel(‘East displacement (km)’)
ax.set_ylabel(‘North displacement (km)’)
ax.set_title(‘Trajectory (top view)’)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
ax.set_aspect(‘equal’)
ax.axhline(0, color=’gray’, lw=0.5)
ax.axvline(0, color=’gray’, lw=0.5)

lats = np.linspace(5, 85, 200)
deflections = []
for la in lats:
Oz = Omega * np.sin(np.radians(la))
def ode(t, s):
return [s[2], s[3], 2*Oz*s[3], -2*Oz*s[2]]
s = solve_ivp(ode, [0, t_max], state0, t_eval=[t_max], rtol=1e-8)
deflections.append(s.y[0][-1] / 1000)

ax2 = axes[1]
ax2.plot(lats, deflections, ‘r-‘, lw=2.5)
ax2.axvline(lat_deg, color=’gray’, ls=’–‘, lw=1, label=f’Current: {lat_deg}’)
ax2.set_xlabel(‘Latitude (degrees North)’)
ax2.set_ylabel(‘Eastward deflection (km)’)
ax2.set_title(f’Deflection vs Latitude (t = {t_max} s)’)
ax2.legend(fontsize=8)
ax2.grid(True, alpha=0.3)
ax2.fill_between(lats, 0, deflections, alpha=0.15, color=’red’)

plt.tight_layout()
plt.savefig(‘/tmp/coriolis_sim_en.png’, dpi=130, bbox_inches=’tight’)
plt.close()
print(f’Coriolis deflection at {lat_deg}N after {t_max}s: {deflections[int(len(lats)*lat_deg/90)]:.2f} km East’)
[/pyodide]

7. Simulation 2 — Planetary Coriolis Parameter


Compare the Coriolis parameter $f = 2\Omega\sin\varphi$ across Solar System planets. Select a planet or enter custom values:

[pyodide]
import numpy as np
import matplotlib
matplotlib.use(‘Agg’)
import matplotlib.pyplot as plt

# Planet data: name, radius_km, rotation_period_hours
planets = {
‘Earth’: {‘R’: 6371, ‘T’: 23.93, ‘color’: ‘#1a73e8’, ‘diff’: False},
‘Mars’: {‘R’: 3390, ‘T’: 24.62, ‘color’: ‘#e53935’, ‘diff’: False},
‘Jupiter’: {‘R’: 71492, ‘T’: 9.925, ‘color’: ‘#fb8c00’, ‘diff’: True},
‘Saturn’: {‘R’: 60268, ‘T’: 10.56, ‘color’: ‘#fdd835’, ‘diff’: True},
‘Uranus’: {‘R’: 25559, ‘T’: 17.24, ‘color’: ‘#00acc1’, ‘diff’: False},
‘Neptune’: {‘R’: 24764, ‘T’: 16.11, ‘color’: ‘#3949ab’, ‘diff’: False},
}

# User settings
lat_deg = 45.0 # latitude in degrees
wind_speed = 50.0 # m/s

lat = np.radians(lat_deg)
results = {}

for name, data in planets.items():
T_s = data[‘T’] * 3600.0
Omega = 2 * np.pi / T_s
f = 2 * Omega * np.sin(lat)
a_cor = abs(f) * wind_speed
results[name] = {‘Omega’: Omega, ‘f’: f, ‘a_cor’: a_cor, ‘diff’: data[‘diff’], ‘color’: data[‘color’]}

fig, axes = plt.subplots(1, 2, figsize=(12, 5))
fig.suptitle(f’Planetary Coriolis Parameter | lat={lat_deg} wind={wind_speed} m/s’, fontsize=12, fontweight=’bold’)

names = list(results.keys())
f_vals = [results[n][‘f’]*1e4 for n in names]
colors = [results[n][‘color’] for n in names]

ax1 = axes[0]
bars = ax1.bar(names, f_vals, color=colors, edgecolor=’white’, linewidth=1.5)
ax1.set_ylabel(‘Coriolis parameter f = 2*Omega*sin(lat) [x 10^-4 rad/s]’)
ax1.set_title(‘Coriolis Parameter by Planet’)
ax1.grid(True, alpha=0.3, axis=’y’)
for bar, name in zip(bars, names):
if results[name][‘diff’]:
bar.set_hatch(‘//’)
ax1.text(bar.get_x()+bar.get_width()/2, bar.get_height()+0.05,
‘*diff’, ha=’center’, fontsize=7, color=’gray’)

ax1.legend(handles=[
plt.Rectangle((0,0),1,1, fc=’white’, hatch=’//’, ec=’gray’, label=’Differential rotation (gas giant)’)
], fontsize=8, loc=’upper left’)

a_vals = [results[n][‘a_cor’]*1000 for n in names]
ax2 = axes[1]
bars2 = ax2.bar(names, a_vals, color=colors, edgecolor=’white’, linewidth=1.5)
ax2.set_ylabel(‘Coriolis acceleration a = f*v [x 10^-3 m/s^2]’)
ax2.set_title(f’Coriolis Acceleration (v={wind_speed} m/s)’)
ax2.grid(True, alpha=0.3, axis=’y’)

plt.tight_layout()
plt.savefig(‘/tmp/coriolis_planets_en.png’, dpi=130, bbox_inches=’tight’)
plt.close()

print(‘=== Planetary Coriolis Parameters ===’)
print(f’Latitude: {lat_deg} deg | Wind speed: {wind_speed} m/s’)
print(f'{“Planet”:<10} {"Omega (rad/s)":<18} {"f (1e-4 rad/s)":<20} {"a_Cor (mm/s^2)":<18} {"Notes"}') print('-'*80) for name in names: r = results[name] note = 'differential rotation' if r['diff'] else '' print(f'{name:<10} {r["Omega"]:.4e} {r["f"]*1e4:.4f} {r["a_cor"]*1000:.4f} {note}') print() print('* Gas giants (Jupiter, Saturn) have differential rotation:') print(' Omega varies with latitude => f = 2*Omega(lat)*sin(lat) is non-uniform.’)
print(‘ Jupiter System I (equator): 9h 50m | System III (magnetic): 9h 55m 37s’)
print(‘ Saturn equatorial period: ~10h 14m vs polar: ~10h 38m’)
[/pyodide]

Note on differential rotation: Gas giants like Jupiter and Saturn are not solid bodies — their equators rotate faster than their poles. This means $\Omega$ varies with latitude, so the Coriolis force changes continuously across the planet’s surface.

8. Planetary Storms — Jupiter’s Great Red Spot


The Solar System’s most dramatic examples of the Coriolis effect are found on giant gas planets.

Jupiter’s Great Red Spot

Why do gas giants produce such storms?

The answer lies in their rapid rotation:

Jupiter’s differential rotation

Jupiter does not rotate as a rigid body — its angular velocity depends on latitude:

Rossby number and Coriolis dominance

The Rossby number expresses the ratio of inertial to Coriolis forces:

$$Ro = \frac{U}{f \cdot L}$$

where:
$U$ : Characteristic flow speed — in m/s; $\approx 100$
$f$ : Coriolis parameter $2\Omega\sin\varphi$ — in rad/s; $\approx 3\times10^{-4}$
$L$ : Characteristic length scale — in m; $\approx 8\times10^{6}$
$Ro$ : Rossby number — in dimensionless; $\approx 0.01$

For the Great Red Spot, $Ro \approx 0.01$ — meaning Coriolis completely dominates the dynamics. This is why the storm has persisted for centuries.

Saturn’s North Polar Hexagon

Saturn hosts one of the Solar System’s most striking geometric structures: a stable hexagonal jet stream at its north pole, approximately 30,000 km across. This pattern persisted unchanged from Voyager observations (1980s) through Cassini’s mission end (2017) — a remarkable demonstration of the precise balance between Coriolis force, pressure gradients, and wave instabilities.

9. Educational Videos


Drain vortex experiment on both sides of the equator

Destin (SmarterEveryDay) and Derek (Veritasium) perform a controlled drain experiment on opposite sides of the equator in Kenya:

Coriolis effect in meteorology

Visual explanation of how hurricanes and the jet stream form due to the Coriolis effect:

10. Summary


11. Quick Reference Table


Concept Symbol / Formula Earth value Notes
Coriolis acceleration $a_{\text{Cor}} = 2\Omega v\sin\varphi$ $\sim 10^{-2}$ m/s² (50 m/s wind, 45°) Perpendicular to velocity
Earth’s rotation rate $\Omega$ $7.27\times10^{-5}$ rad/s Sidereal rotation
Coriolis parameter $f = 2\Omega\sin\varphi$ $1.03\times10^{-4}$ rad/s (45°N) Used in meteorology
Foucault pendulum period $T_{\text{prec}} = 24\,\text{h}/\sin\varphi$ 41.1 h (Tehran, 35.7°) ∞ at equator
Rossby number $Ro = U/(fL)$ $\sim 0.1$ (hurricane) $Ro \ll 1$ → Coriolis dominates
Jupiter GRS Rossby number $Ro$ $\approx 0.01$ Coriolis completely dominant
Jupiter rotation period System III 9 h 55 min 37 s Differential rotation
Saturn hexagon diameter ~30,000 km North polar jet stream

References


  1. Simon, J. (2013). Analytical Mechanics. Chapter on Non-Inertial Reference Frames. Cambridge University Press.
  2. Holton, J. R. & Hakim, G. J. (2013). An Introduction to Dynamic Meteorology (5th ed.). Academic Press.
  3. Shapiro, A. H. (1962). “Bath-Tub Vortex”. Nature, 196, 1080–1081.
  4. Persson, A. (1998). “How Do We Understand the Coriolis Force?” Bulletin of the American Meteorological Society, 79(7).
  5. Taylor, J. R. (2005). Classical Mechanics. Chapter 9: Non-Inertial Reference Frames. University Science Books.
  6. Mitchell, J. L. et al. (2011). “Dynamics of Saturn’s North Polar Hexagon”. Geophysical Research Letters.
  7. Rogers, J. H. (1995). The Giant Planet Jupiter. Cambridge University Press.

Have a question? 🤔

If something isn't clear or you have a question, ask it here. The answer will be published on this page.

💬 جواب بهتری داری؟ یا یه سؤال جدید؟

اگه به سؤالای بالا پاسخی داری که فکر می‌کنی روشن‌تر یا کامل‌تر از مال منه، یا یه سؤال جدید برای دانش‌آموزای دیگه داری — تو بخش نظرات پایین صفحه ارسال کن. هر پیامی رو می‌خونم، تأیید می‌کنم و منتشر می‌شه. این‌جوری همه از تجربه‌ی همدیگه استفاده می‌کنیم. 🌱

در حال آپلود فایل...
لطفاً صبر کنید — صفحه را نبندید
۰٪