Warum das Drehen des Rings nichts ändert
Kugeln springen in einem drehenden Ring mit einer Lücke, die wächst. Die Drehung trägt nur die Lücke herum.
Läuft nach einem Klick von YouTube.
Warum es funktioniert
Kugeln springen unter Gravitation in einem Ring mit einer Lücke umher, und der Ring dreht sich. Man könnte erwarten, dass die Drehung die Kugeln herumschleudert, aber ein reibungsfreier, sich drehender Ring lässt sie genau so abprallen wie ein ruhender. Die Drehung trägt nur die Lücke an ihnen vorbei.
Abprall: v → v − 2·(v · n)·ndie Wand bewegt sich entlang t ⊥ n, also hängt (v · n) nicht von der Drehung ab
Bau es selbst
Python 3 · numpy · matplotlibEine Kugel unter Gravitation in einem Ring, dessen 18°-Lücke sich alle 4 Sekunden einmal dreht, bis sie entkommt.
"""A ball under gravity in a ring with a gap that spins; the bounces are elastic and without friction.
Run: python spinning-ring.py (needs: pip install numpy matplotlib)
"""
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("dark_background")
R, ball, g = 1.0, 0.05, 9.81 # ring radius (m), ball radius, gravity
gap, spin = np.radians(18), 2 * np.pi / 4 # an 18 degree gap, one turn every 4 seconds
p, v = np.array([0.3, 0.2]), np.array([1.8, 0.7])
dt, t, track = 0.0005, 0.0, []
while t < 60:
v[1] -= g * dt
p = p + v * dt
t += dt
track.append(p.copy())
r = np.linalg.norm(p)
if r > R - ball: # the ball touches the wall, or is at the gap
angle = np.arctan2(p[1], p[0])
centre = -np.pi / 2 + spin * t # where the gap is now
off = abs((angle - centre + np.pi) % (2 * np.pi) - np.pi)
if off < gap / 2 - ball / R: # all of the ball fits through: out
break
normal = p / r
v = v - 2 * np.dot(v, normal) * normal # the bounce: the spin plays no part in it
p = normal * (R - ball)
track = np.array(track)
print(f"escaped after {t:.1f} s" if t < 60 else "still inside after 60 s")
plt.figure(figsize=(6, 6))
plt.plot(track[:, 0], track[:, 1], color="#5eead4", linewidth=0.4)
plt.gca().add_patch(plt.Circle((0, 0), R, fill=False, color="white"))
plt.axis("equal")
plt.axis("off")
plt.show()
# Try: spin = 0 and centre = -np.pi / 2 (a still gap at the bottom): the bounces stay the same
Probier: Setze spin = 0 und schieb die Lücke nach unten: Die Abpraller bleiben gleich, nur der Weg nach draußen ändert sich.
Lerne dieses Skript Zeile für Zeile, mit Übungen und einem Quiz → · starte es in Google Colab (auf Englisch) →
Die Mathematik, wie der Film sie erzählt
Die Notizen zum Film lesen (von YouTube, auf Englisch)
Two balls bounce under gravity inside a circle that spins once every four bars of the music. Every bounce is perfectly elastic — no energy is lost, so the balls never calm down. One thing may surprise you: the spinning changes nothing about the bounces.
The wall of a rotating circle only ever moves sideways, along itself, so it cannot push a ball in or out; a frictionless spinning ring bounces exactly like a still one. The only thing the rotation does is carry the hole around — and because gravity keeps the balls near the bottom, their chances come each time the hole sweeps past the floor, once per revolution. The hole widens at the start of each round (8°, 12°, then 18°), and a ball only gets out if the whole of it fits through the gap at the moment it arrives.
The run you are watching was chosen from 500 simulated starting conditions for one reason: the first escape lands in the final seconds, and the other ball is still inside when the music ends.
Aus der Beschreibung von Two Balls, One Growing Hole (auf Englisch).