# =========================================================
# Spirograph using the turtle module
# =========================================================
# ---------------------------------------------------------
# --- import
# ---------------------------------------------------------
import math
import sys
import turtle as t
if sys.version_info.major is 3:
from tkinter import *
py3 = True
else:
from Tkinter import *
py3 = False
# ---------------------------------------------------------
# --- global (default) variables
# ---------------------------------------------------------
R = 160 # raidus of large circle
r = 20 # raidus of small circle
d = 60 # distance from drawing point to
# center of small circle
# ---------------------------------------------------------
# --- functions
# ---------------------------------------------------------
# --- calculate x,y coordinates of the drawing point
# --- return x,y as integers
def xyCoords(a,R,r,d):
rad = math.radians(a)
x = ((R-r)*math.cos(rad)) + \
(d*math.cos(((R-r)/r)*rad))
y = ((R-r)*math.sin(rad)) + \
(d*math.sin(((R-r)/r)*rad))
return (int(x),int(y))
def quit():
##print('Key Input Event')
sys.exit()
# ---------------------------------------------------------
# --- main
# ---------------------------------------------------------
# --- don't show the turtle icon
t.hideturtle()
# --- ask the user for input
R = t.numinput('Large Circle','Raidus',R)
r = t.numinput('Small Circle','Raidus',r)
d = t.numinput('Drawing Point','Distance',d)
# --- quit?
t.listen(None,None)
t.onkeypress(quit,key='q')
# --- move to the starting point
startx,starty = xyCoords(0,R,r,d)
t.penup()
t.goto(startx,starty)
t.pendown()
# --- keep drawing until the starting point is reached
a = 0
while True:
a += 1
x,y = xyCoords(a,R,r,d)
t.goto(x,y)
##print('Coords: a={} x={}, y={}'.format(a,x,y))
if startx == x and starty == y:
break
# --- main loop
mainloop()