Para facilitar o desenho de figuras geométricas usando os L-Systems, o Python possui um módulo denominado "turtle graphics for TK", o qual já está presente na instalação padrão de distribuições como a Anaconda 3.
O módulo "turtle graphics for TK" possui os métodos necessários para o desenho por meio da interpretação "turtle".
Portanto, para reproduzir a Curva de Gosper hexagonal, pode-se implementar o seguinte código:
"""
Faz um desenho da Gosper Hexagonal Curve por meio do turtle t de ordem - 'order' - e tamanho - 'size'.
O Código para o desenho da Gosper Hexagonal Curve é o seguinte:
n=4, δ=60◦
Fr
Fr→ -Fl+FrFr++Fr+Fl--Fl-Fr
Fl→ Fl+Fr++Fr-Fl--FlFl-Fr+
"""
import turtle
def rgosper(t, order, size):
"""
Fr→ -Fl+FrFr++Fr+Fl--Fl-Fr
right Gosper
"""
if order == 0: # ordem 0
t.right(60)
t.forward(size)
t.left(60)
t.forward(size)
t.forward(size)
t.left(60)
t.left(60)
t.forward(size)
t.left(60)
t.forward(size)
t.right(60)
t.right(60)
t.forward(size)
t.right(60)
t.forward(size)
else: # ordem k - 1
t.right(60)
lgosper(t, order-1, size)
t.left(60)
rgosper(t, order-1, size)
rgosper(t, order-1, size)
t.left(60)
t.left(60)
rgosper(t, order-1, size)
t.left(60)
lgosper(t, order-1, size)
t.right(60)
t.right(60)
lgosper(t, order-1, size)
t.right(60)
rgosper(t, order-1, size)
def lgosper(t, order, size):
"""
Fl→ Fl+Fr++Fr-Fl--FlFl-Fr+
left Gosper
"""
if order == 0: # ordem 0
t.forward(size)
t.left(60)
t.forward(size)
t.left(60)
t.left(60)
t.forward(size)
t.right(60)
t.forward(size)
t.right(60)
t.right(60)
t.forward(size)
t.forward(size)
t.right(60)
t.forward(size)
t.left(60)
else: # ordem k-1
lgosper(t, order-1, size)
t.left(60)
rgosper(t, order-1, size)
t.left(60)
t.left(60)
rgosper(t, order-1, size)
t.right(60)
lgosper(t, order-1, size)
t.right(60)
t.right(60)
lgosper(t, order-1, size)
lgosper(t, order-1, size)
t.right(60)
rgosper(t, order-1, size)
t.left(60)
if __name__ == "__main__":
t = turtle.Turtle() # objeto turtle
turtle.tracer(100)
turtle.hideturtle()
t.penup()
t.setx(-250)
t.sety(-250)
t.pendown()
rgosper(t, 4, 5) # n = 4; size = 5
turtle.update()
turtle.done()
turtle.Screen().exitonclick()
Com o código acima o resultado obtido é:
_blobid=6365339289663311454