背景
本题需要提前了解递归的方法。这是一个采用递归方法绘制科赫曲线的实例,分形几何采用类似递归的核心思想。
函数的递归
函数定义中调用函数自身的方式形成递归。递归不是循环,是有限次数的,能递归到底的(存在基例)。
以阶乘为例:
def fact(n):
if n==0:
return 1
else:
return n*fact(n-1)
num = eval(input("输入一个整数:"))
print(fact(abs(int(num))))
fact()函数在其定义内部引用了自身,形成了递归过程。
科赫曲线
正整数n代表科赫曲线的阶数, 表示生成科赫曲线过程的操作次数。科赫曲线初始化阶数为0,表示一个长度为L 的直线。对于直线L,将其等分为3 段,中间一段用边长为L/3的等边三角形的两个边替代, 得到1阶科赫曲线, 它包含4条线段。进一步对每条线段重复同样的操作后得到2阶科赫曲线。继续重复同样的操作n次可以得到n阶科赫曲线。
直线上的科赫曲线:
import turtle
def koch(size,n):
if n==0:
turtle.fd(size)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
koch(size/3,n-1)
def main():
turtle.setup(800,400)
turtle.speed(0)
turtle.penup()
turtle.goto(-300,-50)
turtle.pendown()
turtle.pensize(2)
koch(600,3)
turtle.hideturtle()
main()
turtle.done()
输出图像:
倒置三角形上的科赫曲线:
import turtle
def koch(size,n):
if n==0:
turtle.fd(size)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
koch(size/3,n-1)
def main():
turtle.setup(600,600)
turtle.speed(0)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
turtle.pensize(2)
level = 5 #雪花的复杂程度和你的level值有关
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
turtle.hideturtle()
main()
turtle.done()
代码中的level值控制着科赫曲线的复杂程度。