spirographe1.py

Created by schraf

Created on November 26, 2018

391 Bytes

Un point A parcourt un cercle de rayon R1 (repéré avec un angle t).
Sur un second cercle de rayon R2 centré en A, on place le point M à l’angle t*v où v est fixé dès le départ.
Le programme ci-dessous affiche la trajectoire du point M

Il ne s’agit donc pas du cas d’un cercle roulant à l’intérieur (hypocycloïde) ou à l’extérieur (épicycloïde) d’un autre cercle comme on l’a sur les jeux pour enfants :


>> go(5,1,10) pour un grand cercle R1=5, un petit cercle R2=1 et une vitesse = 10 (le point M tourne 10 fois plus vite autour du petit cercle que le point A autour du grand)

>> go(1,3,10,1000) pour un petit cercle R1=1, un grand cercle R2=3, une vitesse = 10 et 1000 points

>> go(4,2,2) Le point M sur le petit cercle va 2 fois plus vite que le A sur le grand cercle

>> go(1,10,2)

>> go(10,1,40,1000)


La ligne while random()>.001: t=0 est juste là pour ralentir la machine qui va trop vite pour afficher le déroulement…


from kandinsky import *
from math import *
from random import *


# rayons cercles + vitesse cercle 2 + nb pts
def go(r1,r2,v=1,n=500):
  p = 100/(r1+r2)
  for k in range(n):
    a = k/n*2*pi
    x = 160 + r1*p*cos(a) 
    y = 110 + r1*p*sin(a)
    set_pixel(int(x),int(y),63488)
    set_pixel(int(x + r2*p*cos(a*v)),int(y + r2*p*sin(a*v)),0)
    while random()>.001: a=0