(Python)实例8:科赫曲线(雪花曲线)绘制

背景

本题需要提前了解递归的方法。这是一个采用递归方法绘制科赫曲线的实例,分形几何采用类似递归的核心思想。

函数的递归

函数定义中调用函数自身的方式形成递归。递归不是循环,是有限次数的,能递归到底的(存在基例)。

以阶乘为例:

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值控制着科赫曲线的复杂程度。

输出图像:

level = 1

level = 3

level = 5 (运行时间有一点点长哈,而且level越大要画的越久)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值