Para realizar a resolução dos fractais definidas neste exercício usaremos a biblioteca Turtle do Python. Uma boa explicação sobre a biblioteca você encontra aqui. As especificações de cada função podem ser vistas aqui.
Para entender maiores detalhes do problema sobre o qual estamos tratando, sugiro a leitura deste artigo.
A ideia é que se comece com um triângulo equilátero sólido (preenchido) S (0) e , a partir dele, dividir o mesmo em quatro triângulos equiláteros menores usando os pontos médios dos três lados do triângulo original como os novos vértices. Em seguida, desconsiderar o triâgulo interior. Assim devemos remover o interior do triângulo do meio para obter S (1). Agora repita este procedimento em cada um dos três triângulos equiláteros sólidos remanescentes para obter S (2). Veja esse procedimento na figura abaixo:

import turtle
# função para desenhar um trigângulo
def desenheTriagulo(pontos, pincel):
defininePosicaoInicial(pontos, pincel)
desenhaUmTriangulo(pontos, pincel)
#parte da tarefa de desenhar um triângulo
def desenhaUmTriangulo(pontos, pincel):
pincel.goto(pontos[1][0], pontos[1][5])
pincel.goto(pontos[2][0], pontos[2][6])
pincel.goto(pontos[0][0], pontos[0][7])
def defininePosicaoInicial(pontos, pincel):
pincel.up()
pincel.goto(pontos[0][0], pontos[0][8])
pincel.down()
#obtem o pronto médio para os triângulos internos
def pontoMedio(ponto1,ponto2):
eixoX = (ponto1[0]+ponto2[0])/2
eixoY = (ponto1[1]+ponto2[1])/2
return (eixoX, eixoY)
#método recursivo
def constroiSeirpinkiDiagram(pontos, grau, pincel):
desenheTriagulo(pontos, pincel)
#condiÇão de parada
if grau > 0:
constroiSeirpinkiDiagram(getpontos(pontos,0,1,2), grau-1, pincel)
constroiSeirpinkiDiagram(getpontos(pontos, 1, 0, 2), grau - 1, pincel)
constroiSeirpinkiDiagram(getpontos(pontos, 2, 1, 0), grau - 1, pincel)
#método auxilar para extrair os pontos do triângulo
def getpontos(pontos, base, aux1, aux2):
return (pontos[base], pontoMedio(pontos[base], pontos[aux1]), pontoMedio(pontos[base], pontos[aux2]))
#método para testar a execução do algoritimo
#o valor do grau pode ser definido na primeira linha.
#no caso em questão optamos por usar o parâmentro com o valor 5
def main():
grau = 5
pincel = turtle.Turtle()
janela = turtle.Screen()
pontosIniciais = [[-200,-100],[0,200],[200,-100]]
constroiSeirpinkiDiagram(pontosIniciais,grau,pincel)
janela.exitonclick()
main()
Nosso exemplo vai gerar a seguinte figura:
