import turtle import math class Line: def __init__(self, Point1,Point2): self.Point1 = Point1 self.Point2 = Point2 myTurtle = turtle.Turtle() #edit the scale to make the overall image bigger or smaller scale = 1500 #edit fractal count to increase or decrease the amount of transformations performed fractalCount = 1 def DrawLine(Point1, Point2): myTurtle.penup() myTurtle.goto(ReturnX(Point1[0]),ReturnY(Point1[1])) myTurtle.pendown() myTurtle.goto(ReturnX(Point2[0]),ReturnY(Point2[1])) def ReturnX(x): return (x - 1/2) * scale def ReturnY(y): return y * scale - scale / 10 def Transformation1(Point): newX = (1/3)*math.cos(math.radians(0))*Point[0] - (1/3)*math.sin(math.radians(0))*Point[1] newY = (1/3)*math.sin(math.radians(0))*Point[0] + (1/3)*math.cos(math.radians(0))*Point[1] return (newX,newY) def Transformation2(Point): newX = (1/3)*math.cos(math.radians(60))*Point[0] - (1/3)*math.sin(math.radians(60))*Point[1] + (1/3) newY = (1/3)*math.sin(math.radians(60))*Point[0] + (1/3)*math.cos(math.radians(60))*Point[1] return (newX,newY) def Transformation3(Point): newX = (1/3)*math.cos(math.radians(-60))*Point[0] - (1/3)*math.sin(math.radians(-60))*Point[1] + (1/2) newY = (1/3)*math.sin(math.radians(-60))*Point[0] + (1/3)*math.cos(math.radians(-60))*Point[1] + (math.sqrt(3)/6) return (newX,newY) def Transformation4(Point): newX = (1/3)*math.cos(math.radians(0))*Point[0] - (1/3)*math.sin(math.radians(0))*Point[1] + (2/3) newY = (1/3)*math.sin(math.radians(0))*Point[0] + (1/3)*math.cos(math.radians(0))*Point[1] return (newX,newY) turtle.tracer(0,0) myTurtle.speed('fastest') lines = [Line((0.0,0.0),(1.0,0.0))] transformations = (Transformation1,Transformation2,Transformation3,Transformation4) for x in range (fractalCount): newLines = [] for line in lines: for Transformation in transformations: newLines.append(Line(Transformation(line.Point1),Transformation(line.Point2))) lines = newLines myTurtle.color("red") myTurtle.pensize(1) for line in lines: DrawLine(line.Point1,line.Point2) turtle.update() turtle.exitonclick()