Przekształcenia geometryczne

import turtle
import math

okno = turtle.Screen()
stefan = turtle.Turtle()
stefan.shape("turtle")
stefan.speed(0)

figura1 = [[10,10],[20,10],[20,30],[30,30],[30,40],[10,40]]

def Rysuj(f):
    stefan.penup()
    for p in f:
        stefan.goto(p)
        stefan.pendown()
    stefan.goto(f[0])

def Przesun(f,v):
    rezultat = []
    xv, yv = v
    for p in f:
        x,y = p
        rezultat.append((x+xv,y+yv))
    return rezultat

def Skaluj(f,s):
    rezultat = []
    for p in f:
        x,y = p
        rezultat.append((x*s,y*s))
    return rezultat

def SymetriaY(f):
    rezultat = []
    for p in f:
        x,y = p
        rezultat.append((-x,y))
    return rezultat

def SymetriaX(f):
    rezultat = []
    for p in f:
        x,y = p
        rezultat.append((x,-y))
    return rezultat

def SymetriaXY(f):
    rezultat = []
    for p in f:
        x,y = p
        rezultat.append((-x,-y))
    return rezultat

def Obroc(f,k):
    rezultat = []
    krad = k * math.pi / 180
    for p in f:
        x, y = p
        rezultat.append((x * math.cos(krad) - y * math.sin(krad),\
                         x * math.sin(krad) + y * math.cos(krad)))
    return rezultat

#-------------------------------------------------------------------------------
# Przykłady użycia
# 
Rysuj(figura1)
figura2 = Przesun(figura1, (100,100))
Rysuj(figura2)
for i in range(5):
    figura3 = Skaluj(figura1, i+1)
    figura3 = Przesun(figura3, (50*i, -30*i))
    Rysuj(figura3)
figura4 = SymetriaY(figura1)
Rysuj(figura4)
figura5 = SymetriaX(figura1)
Rysuj(figura5)
figura6 = Obroc(figura1,135)
Rysuj(figura6)
#-------------------------------------------------------------------------------

stefan.penup()
stefan.goto(0,0)
okno.mainloop()