Spirographe Python

Le Spirographe est un jeu de création de motifs géométriques à l’aide de cercles crantés. Il fonctionne en plaçant un point traceur dans un petit cercle qui roule à l’intérieur d’un cercle fixe. Ce mouvement génère des motifs appelés hypocycloïdes.

En utilisant des équations d’hypocycloïde et quelques paramètres (rayon du cercle fixe, rayon du cercle roulant et distance du point traceur), il est possible de générer automatiquement des tracés similaires à ceux obtenus avec le jeu Spirographe. La variation de ces paramètres permet de produire des motifs différents, allant de figures simples et régulières à des formes plus complexes.

Mouvement Equations
Une hypocycloïde peut être définie en Python par l’équation paramétrique suivante :

x = (R - r) * cos(t) + d * cos((R - r) / r * t)

y = (R - r) * sin(t) - d * sin((R - r) / r * t)


R : rayon du cercle fixe
r : rayon du cercle roulant
d : distance du point traceur au centre du cercle roulant
t : angle de rotation du cercle roulant

Spirographe Python

Modules requis

Les classes numpy et matplotlib seront nécéssaires :

python -m pip install numpy matplotlib

Principes

Le script est relativement simple et le principe repose sur un grand cercle fixe, sur un petit cercle qui tourne à l’intérieur, et un point précis sur ce dernier (là où le stylo se place) :

Grand cercle (R)
  └── Petit cercle (r) qui roule dedans
       └── Stylo à une distance (d) du centre

Script

Variation des Valeurs :

d = 0 : stylo au centre (cercle simple)
d < r : formes douces
d = r : stylo sur le bord du petit cercle
d > r : stylo en dehors (boucles folles)

#!/usr/bin/env python3

import numpy as np
import matplotlib.pyplot as plt

# ==================================================
# Paramètres du spirographe
# ==================================================

R = 8 # Rayon du cercle fixe
r = 3 # Rayon du cercle roulant
d = 4 # Distance du point traceur
T = 20 # Nombre de tours

# Plus il y a de points, plus la courbe est lisse
points = 5000
t = np.linspace(0, T * np.pi, points)

# ==================================================
# Équations du spirographe (hypotrochoïde)
# ==================================================

x = (R - r) * np.cos(t) + d * np.cos((R - r) / r * t)
y = (R - r) * np.sin(t) - d * np.sin((R - r) / r * t)

# ==================================================
# Affichage
# ==================================================

trace_color = '#6600ff'
background_color = '#000000'
plt.figure(facecolor=background_color)
plt.plot(x, y, color=trace_color)
plt.axis("equal")
plt.axis("off") # Afficher ou pas les axes
plt.show()

Exemples

Pour des motifs hypotrochoïdes ( formes étoile ou fleur), le secret réside dans le rapport R / r et la distance d.

Pour une figure en étoile/fleur avec beaucoup de pétales :

  • R et r premiers entre eux (gcd(R,r) = 1) : le motif fait R tours avant de se refermer
  • d < r : boucles serrées → pétales fins
  • d ≈ r : pétales qui touchent le centre → forme étoile plus marquée
  • d > r : motifs plus ouverts et boucles plus grosses

Exemples de variations en fonction des Valeurs R, r et d :

  Valeurs   Formes   Valeurs   Formes   Valeurs   Formes
R = 8
r = 3
d = 4
T = 20
R = 13
r = 3.33
d = 33
T = 10
R = 15
r = 9
d = 10
T = 20
R = 26
r = 10
d = 5
T = 20
R = 8
r = 3
d = 2
d = 10
R = 20
r = 9
d = 10
T = 20
R = 14
r = 3
d = 7.5
T = 10
R = 50
r = 8
d = 50
d = 10
R = 17
r = 9.5
d = 10
T = 50
R = 8.5
r = 3.39
d = 4
T = 20
R = 9.56
r = 12
d = 19
T = 118
R = 52
r = 7.5
d = 40
T = 20
R = 52
r = 7.5
d = 40
T = 12
R = 14
r = 3
d = 2
T = 14
R = 12.1
r = 13.1
d = 5.3
T = 107.25

Documentation

https://fr.wikipedia.org/wiki/Hypocyclo%C3%AFde
https://fr.wikipedia.org/wiki/Repr%C3%A9sentation_param%C3%A9trique
https://fr.wikipedia.org/wiki/Courbe_cyclo%C3%AFdale

🡅 Partager