actually added the content 🤦
This commit is contained in:
parent
41ee9f8558
commit
b7de24ee5d
BIN
Levy_C.ctb
Normal file
BIN
Levy_C.ctb
Normal file
Binary file not shown.
@ -1,2 +1,2 @@
|
|||||||
# Levy_C
|
# Levy_C
|
||||||
A turtle (python) implementation of the Lévy C curve (that i seem to have forgotten to upload)
|
A turtle (python) implementation of the Lévy C curve
|
||||||
|
131
levy_c_full.py
Normal file
131
levy_c_full.py
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
import turtle
|
||||||
|
|
||||||
|
t=turtle.Turtle()
|
||||||
|
n = int(input("Recursion Depth [-1 for inf]:"))
|
||||||
|
if n<0:
|
||||||
|
color_diff = 1
|
||||||
|
else:
|
||||||
|
color_diff = 1/(n+1)
|
||||||
|
color = [0,0,1]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
a = input("Starting Structure [I for one line, L for l-shape, C for custom]:")
|
||||||
|
if a.upper() == "I":
|
||||||
|
s=[(0, True)]
|
||||||
|
elif a.upper() == "L":
|
||||||
|
s = [(-90, True), (90, True)]
|
||||||
|
elif a.upper() == "C":
|
||||||
|
s = eval(input("Input custom starting structure [Format: [(int Rotation, bool Walk first), (int Rotation, bool Walk first)]]:\n"))
|
||||||
|
else:
|
||||||
|
print("Invalid input!")
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
m = input("Size Multiplier [default 50]:")
|
||||||
|
if m:
|
||||||
|
m=int(m)
|
||||||
|
else:
|
||||||
|
m=50
|
||||||
|
speed = input("speed [default 0]:")
|
||||||
|
if speed:
|
||||||
|
speed=int(speed)
|
||||||
|
else:
|
||||||
|
speed=0
|
||||||
|
clr = input("Color (many times slower) [default 0]")
|
||||||
|
if clr:
|
||||||
|
clr = int(clr)
|
||||||
|
else:
|
||||||
|
clr = 0
|
||||||
|
r = input("Start Rotation [default 0]:")
|
||||||
|
if r:
|
||||||
|
r=int(r)
|
||||||
|
else:
|
||||||
|
r=0
|
||||||
|
frm = input("Display from [default 0]:")
|
||||||
|
if frm:
|
||||||
|
frm=int(frm)
|
||||||
|
else:
|
||||||
|
frm=0
|
||||||
|
to = input("Display to [default inf]:")
|
||||||
|
if to:
|
||||||
|
to=int(to)
|
||||||
|
else:
|
||||||
|
to=9e999
|
||||||
|
|
||||||
|
if -1>speed>10:
|
||||||
|
t.speed(10-speed)
|
||||||
|
else:
|
||||||
|
turtle.tracer(0, 0)
|
||||||
|
|
||||||
|
def draw_arr(arr, multiplier=50, step=1, frm=0, to=9e999):
|
||||||
|
x=0
|
||||||
|
rot=0
|
||||||
|
for i,j in arr:
|
||||||
|
if x >= frm and x <= to:
|
||||||
|
if j:
|
||||||
|
if rot:
|
||||||
|
t.right(rot)
|
||||||
|
t.forward(multiplier)
|
||||||
|
t.right(i)
|
||||||
|
rot=0
|
||||||
|
else:
|
||||||
|
rot += i
|
||||||
|
if step>1:
|
||||||
|
if not x % step:
|
||||||
|
turtle.update()
|
||||||
|
x+=1
|
||||||
|
t.right(rot)
|
||||||
|
|
||||||
|
|
||||||
|
def levy_c(n, rotations, start_rotation=0):
|
||||||
|
def gen(n):
|
||||||
|
|
||||||
|
yield start_rotation, False
|
||||||
|
if n == 0:
|
||||||
|
yield from next(rotations)
|
||||||
|
else:
|
||||||
|
yield 45, False
|
||||||
|
if clr:
|
||||||
|
color[0] += color_diff
|
||||||
|
color[2] -= color_diff
|
||||||
|
t.color(tuple(color))
|
||||||
|
yield from gen(n-1)
|
||||||
|
if clr:
|
||||||
|
color[0] -= color_diff
|
||||||
|
color[2] += color_diff
|
||||||
|
t.color(tuple(color))
|
||||||
|
yield -90, False
|
||||||
|
yield from gen(n-1)
|
||||||
|
yield 45, False
|
||||||
|
while True:
|
||||||
|
yield gen(n)
|
||||||
|
|
||||||
|
def arr_generator(arr):
|
||||||
|
def gen():
|
||||||
|
for i in arr:
|
||||||
|
yield i
|
||||||
|
while True:
|
||||||
|
yield gen()
|
||||||
|
|
||||||
|
def optimize_arr(arr):
|
||||||
|
for i in range(len(arr)):
|
||||||
|
while len(arr) > i+1 and not arr[i+1][1]:
|
||||||
|
arr[i] = ((arr[i][0] + arr.pop(i+1)[0])%360, arr[i][1])
|
||||||
|
return arr
|
||||||
|
|
||||||
|
s = arr_generator(s)
|
||||||
|
|
||||||
|
if n < 0:
|
||||||
|
while True:
|
||||||
|
turtle.update()
|
||||||
|
if not clr:
|
||||||
|
s = arr_generator(optimize_arr([i for i in next(s)]))
|
||||||
|
|
||||||
|
s = levy_c(1, s)
|
||||||
|
t.right(-45)
|
||||||
|
draw_arr(next(s), multiplier=m, step=speed, frm=frm, to=to)
|
||||||
|
color_diff=1/(1/color_diff+1)
|
||||||
|
else:
|
||||||
|
draw_arr(next(levy_c(n, s, r)), multiplier=m, step=speed, frm=frm, to=to)
|
||||||
|
|
||||||
|
turtle.update()
|
||||||
|
input("Done!")
|
28
levy_c_minimal.py
Normal file
28
levy_c_minimal.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import turtle
|
||||||
|
turtle.speed(int(input("Speed[ 0 - fastest, 10 - slowest ]:"))) # geschwindigkeit einlesen und festlegen
|
||||||
|
|
||||||
|
def levy_c(n:int, tp:str="I", size:int=50):
|
||||||
|
"""
|
||||||
|
n:int = rekursionstiefe
|
||||||
|
tp:str = typ des anfangspunktes (I oder L)
|
||||||
|
size:int = größe der gezeichneten linien
|
||||||
|
"""
|
||||||
|
if n == 0: # abbruchsbedingung
|
||||||
|
if tp=="I": # je nach typ grundstruktur zeichnen
|
||||||
|
turtle.forward(size) # einen einzelnen Strich für I
|
||||||
|
else:
|
||||||
|
turtle.forward(size) # eine L-förmige Struktur für L
|
||||||
|
turtle.right(-90)
|
||||||
|
turtle.forward(size)
|
||||||
|
turtle.right(90)
|
||||||
|
else:
|
||||||
|
turtle.right(45) # der rekursive aufruf von Levy C
|
||||||
|
levy_c(n-1, tp, size) # die nächst kleinere rekursion wird aufgerufen
|
||||||
|
turtle.right(-90)
|
||||||
|
levy_c(n-1, tp, size) # ^
|
||||||
|
turtle.right(45)
|
||||||
|
|
||||||
|
levy_c(int(input("Recursion Depth:")), tp=input("Type [I or L]"), size=int(input("Size Multiplier:")))
|
||||||
|
# rekursionstiefe, typ des anfangspunktes und größe der gezeichneten linien werden eingelesen
|
||||||
|
input("Done!")
|
Loading…
Reference in New Issue
Block a user