python-turtle库-科赫雪花与花千树

前言

你好! 科赫雪花花千树是经典的绘图案例,很适合初学者对turtle库的了解与运用。其中包含函数递归的方法,通过递归的调用,能大大提高代码的利用率,减少其复杂度。

设计

科赫雪花

科克曲线定义:
我们可以设想一个边长为1的等边三角形,取每边中间的三分之一,接上去一个形状完全相似的但边长为其三分之一的三角形,结果是一个六角形。现在取六角形的每个边做同样的变换,即在中间三分之一接上更小的三角形,以此重复,直至无穷。外界的变得原来越细微曲折,形状接近理想化的雪花。它的名字叫科克曲线。
----我们可以定义一个递归函数来重复这个过程。递归函数会接受两个参数:一个是边长size,另一个是迭代次数n。如果迭代次数n为0,函数就简单地绘制一条直线;如果n大于0,则将当前线段分成三等分,并在中间部分绘制两个新的等边三角形。
ddddddddd
以下是1,2,3,4阶科克曲线
- 一阶二阶科克曲线
在这里插入图片描述在这里插入图片描述

  • 具体代码如下:
import turtle as t

#order为科克曲线的阶数
def snow(length, order):
    if order == 0:
        t.forward(length)  # 向前画画线
    else:
        for angle in [60, -120, 60, 0]:
            snow(length/3, order-1)  # 递归
            t.left(angle)  # 向左转一个角度


t.speed(0.005)  # 提高画笔速度,0~10速度逐渐降低
snow(400, 3)  # 画第一部分
t.right(120)  # 转向120度
snow(400, 3)  # 画第二部分
t.right(120)
snow(400, 3)  # 画第三部分
t.done()

运行效果:
在这里插入图片描述

花千树

花千树通常是用来描绘一个非常繁华、热闹或者绚丽的景象,如同千树万树的话同时盛开,非常壮观和美丽!
----花千树是一种具有自相似性的图形,即它的整体形状与它的局部形状相似。这种自相似性使得递归成为绘制花千树的理想选择

- 设计思路

  • 1.设计一个递归函数来绘制花千树。这个函数应该接受一些参数,如当前绘制的树枝长度、角度等。在函数内部,首先判断当前树枝的长度是否满足停止条件(例如,长度小于某个阈值),如果满足则停止递归;否则,继续执行以下步骤。

  • 2.根据当前树枝的长度和角度,绘制出树枝的形状。这可以通过绘制一条线段或者使用其他图形表示。

  • 3.根据当前树枝的长度和角度,计算出左右子树枝的位置和角度。然后分别调用递归函数,传入左右子树枝的长度和角度,以绘制左右子树枝。

具体代码如下:

def draw_tree(len1):
    t.speed(0.005)  # 提高画笔速度
    t.pencolor("green")  # 设置画笔颜色
    angle = random.randint(22, 30)  # 旋转角度
    sf = random.uniform(0.6, 0.8)  # 随机生成缩放因子,范围为0.6到0.8
    if len1 < 3:
        return
    else:
        t.forward(len1)  # 向前移动指定长度
        t.left(angle)  # 左转指定角度
        draw_tree(len1*sf)  # 递归绘制左子树
        t.right(angle*2)  # 右转两倍的角度
        draw_tree(len1*sf) # 递归绘制右子树
        t.left(angle)  # 左转回原来的角度
        t.backward(len1)  # 向后移动指定长度

运行效果:
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值