Skip to content

Instantly share code, notes, and snippets.

@morgulbrut
Created July 14, 2021 13:55
Show Gist options
  • Save morgulbrut/189abed95e95ce787385829826a24b59 to your computer and use it in GitHub Desktop.
Save morgulbrut/189abed95e95ce787385829826a24b59 to your computer and use it in GitHub Desktop.
import turtle
def curve(iteration):
'''
https://de.wikipedia.org/wiki/Drachenkurve#Pseudocode
Die Drachenkurve 0. Ordnung besteht nur aus der Anfangslinie „nach oben“.
Die Drachenkurve 1. Ordnung ist R (Anfangslinie, dann Rechtswende und eine weitere Linie)
Berechne eine Drachenkurve der Ordnung i folgendermaßen:
Hänge an eine Drachenkurve der Ordnung i-1 ein R an
Hänge an das Ergebnis erneut die Drachenkurve der Ordnung i-1, wobei das mittlere Zeichen durch L ersetzt wird.
'''
cur = ""
if iteration == 0:
pass
elif iteration == 1:
cur += "R"
else:
c = curve(iteration-1) # Kurve Ordnung i-1
# Kurve Ordnung i-1 bei das mittlere Zeichen durch ein L ersetzt wurde
cl = c[:int(len(c)/2)] + "L" + c[int(len(c)/2)+1:]
cur = c + "R" + cl # Kurve Ordnung i+1
return cur
def paint_round(curve, length):
for l in curve:
if l == 'L':
turtle.circle(-length, 90, 36)
else:
turtle.circle(length, 90, 36)
def paint(curve, length, angle):
turtle.left(angle)
turtle.forward(length)
for l in curve:
if l == 'L':
turtle.left(angle)
turtle.forward(length)
else:
turtle.right(angle)
turtle.forward(length)
if __name__ == '__main__':
turtle.showturtle()
turtle.hideturtle()
turtle.speed(0)
turtle.pensize(2)
colors = ['red', 'green', 'blue']
for i in range(10, -1, -1):
print("Painting curve({}) in {}".format(i, colors[i % len(colors)]))
print("L-System:{}\n".format(curve(i)))
turtle.penup()
turtle.setpos(0, 0)
turtle.pendown()
turtle.pencolor(colors[i % len(colors)])
paint(curve(i), 4, 75)
turtle.done()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment