吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3283|回复: 6
收起左侧

[Python 转载] python利用函数递归绘制雪花图形

  [复制链接]
tsu.xxw 发表于 2022-1-11 12:06
在学习函数递归的过程中,课程老师介绍了一个很有趣的小例子,利用turtle和函数递归绘制科赫雪花,效果如下: koch_snow.gif
科赫曲线:仔细观察可以发现,雪花的边缘和雪花的整体结构之间存在着一定的相似性,这种相似性就是科赫曲线的数学描述
光看定义可能不太明白,下面上图
科赫曲线.png
是不是已经有雪花的雏形了呢,接下来我们来绘制
首先定义一个科赫函数,两个参数分别为想要绘制直线的长度和绘制的阶数n:
[Python] 纯文本查看 复制代码
def koch(size,n):

然后用分支结构区分基例(最简单的情形)和链条(每一次递推的具体过程)
[Asm] 纯文本查看 复制代码
    if n == 0:                               
        turtle.fd(size)
    else:
        for angle in [0,60,-120,60]:           
            turtle.left(angle)
            koch(size/3,n-1)  

到这,其实就已经结束了,我们给出计算机第一次怎么绘制,之后的绘制按照这个递归就可以一直执行下去,怎么样,递归是不是很有趣,接下来完成绘制的过程
我们引入turtle库
设置画布的尺寸,画笔的大小,出发点,速度
[Python] 纯文本查看 复制代码
turtle.setup(600,600)                 
    turtle.penup()                           
    turtle.goto(-200,100)                   
    turtle.pendown()                       
    turtle.pensize(2)                   
    turtle.speed(speed=6)                
    level=3      

接下来调用刚才的科赫函数进行绘制,绘制的过程按照等边三角形为框架,先直边,然后两个斜边进行绘制,完整代码和注释见下
[Python] 纯文本查看 复制代码
import turtle

def koch(size,n):
    if n == 0:                               #对于科赫雪花,如果考虑最简单的情形,就是一条直线
        turtle.fd(size)
    else:
        for angle in [0,60,-120,60]:           #绘制方向从0°,然后抬起60°,然后向下120°,再向上60°回到水平,相当于等边三角形去掉下底
            turtle.left(angle)
            koch(size/3,n-1)                 #运用递归,上面只给出第一次画的方法,剩下的n-1次全部如此

def main():
    turtle.setup(600,600)                  #设置画布尺寸
    turtle.penup()                            #抬起画笔
    turtle.goto(-200,100)                   #画笔上指定位置
    turtle.pendown()                       #落笔
    turtle.pensize(2)                   #设置画笔尺寸为2像素
    turtle.speed(speed=6)                #控制小海龟的移动速度,0和10最大,6正常
    level=3                                #传入koch雪花函数的参数,3,即在每条边上进行三次迭代
    koch(400,level)                      #开始绘制等边三角形第一条边(横着的边)的雪花图形
    turtle.right(120)                    #画笔方向向下旋转120°,进行第二条边绘制
    koch(400,level)                      #开始绘制等边三角形第一条斜边
    turtle.right(120)                    #画笔再次旋转,此时指向了起始点
    koch(400, level)                      #开始绘制等边三角形第二条斜边
    turtle.hideturtle()                   #隐藏画笔

main()                        #调用函数开始绘制


其实这个科赫雪花是最基础的,我们还可以修改雪花的颜色,雪花的数量,还可以再写一个函数,让雪花实现飘落的效果,也可以修改科赫曲线的旋转角度,基础框架的形状等等
非常希望这个案例能够激发大家的兴趣,动手一起敲代码,看到图形那一刻会非常有成就感。

免费评分

参与人数 6吾爱币 +12 热心值 +6 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yjn866y + 1 + 1 我很赞同!
lene + 1 + 1 用心讨论,共获提升!
fengshu + 1 + 1 用心讨论,共获提升!
雷欧库珀 + 1 + 1 用心讨论,共获提升!
ncu.xxy + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

素问何问 发表于 2022-1-11 14:26
要想学会递归,你必需先学会递归
vethenc 发表于 2022-1-11 12:30
ghoob321 发表于 2022-1-11 15:17
xyl52p 发表于 2022-1-11 16:25
看着挺酷的,一行行代码变成了好玩的图形了,厉害!
头像被屏蔽
15555549980 发表于 2022-1-11 19:32
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表