Python Turtle 小项目 7 二叉树

 这次,我们依然使用Turtle模块进行绘图

我们要绘制一幅随机生成的树,如下图

代码教学↓↓↓

首先,导入我们需要的模块turtle,和random

import turtle as t
import random

设置每根树枝的倾斜角度,自己设置,也可以设置为随机,本次教学使用固定数值

de=10 # 每根树枝的倾斜角度

定义tree函数(使用递归)

def tree(x,y,degree,length,n):

n表示剩余延申出去的树枝数量

    if n<=5 and n>=2:
        t.pencolor("green")
        t.pensize(5)
    elif n<2:
        t.pencolor("Tomato")
        t.pensize(4)
    else:
        t.pencolor("brown")
        t.pensize(7)

根据剩余分叉树枝数量设置画笔颜色(花为Tomato颜色,叶子为green颜色,树枝为brown颜色)

然后抬笔,移动画笔,面向正确的方向并绘制线段

    t.pu()
    t.goto(x,y)
    t.setheading(degree)
    t.pd()
    t.forward(length)

递归时,如果n(延申出去的树枝数量剩余1,就返回)

    if n==1:
        return

否则,获得当前坐标,并传入下一个线段的一个端点位置(当前画笔位置,为上一个线段的结束端点),倾斜角度上下浮动-5到5°,长度上下浮动-5到5像素,10%的可能性多画一根树枝(即n变量不进行-1的操作)

pos=t.pos()
tree(pos[0],pos[1],degree+de+random.randint(-5,5),length+random.randint(-5,5),n-1 if random.randint(1,100)<=90 else n)
tree(pos[0],pos[1],degree-de+random.randint(-5,5),length+random.randint(-5,5),n-1 if random.randint(1,100)<=90 else n)

函数外,设置画笔基本属性,背景为LightSalmon,速度设为最快,延迟设为0,速度加400倍(由于递归占用内存大,运行速度慢),然后启动递归函数。画完后,隐藏画笔,保持窗口显示。

t.bgcolor("LightSalmon")
t.speed(0)
t.delay(0)
t.tracer(400)
tree(0,-300,90,40,10)
t.hideturtle()
t.done()

最终代码:

import turtle as t
import random

de=10 # 每根树枝的倾斜角度

def tree(x,y,degree,length,n):
    if n<=5 and n>=2:
        t.pencolor("green")
        t.pensize(5)
    elif n<2:
        t.pencolor("Tomato")
        t.pensize(4)
    else:
        t.pencolor("brown")
        t.pensize(7)
    t.pu()
    t.goto(x,y)
    t.setheading(degree)
    t.pd()
    t.forward(length)
    if n==1:
        return
    else:
        pos=t.pos()
        tree(pos[0],pos[1],degree+de+random.randint(-5,5),length+random.randint(-5,5),n-1 if random.randint(1,100)<=90 else n)
        tree(pos[0],pos[1],degree-de+random.randint(-5,5),length+random.randint(-5,5),n-1 if random.randint(1,100)<=90 else n)

t.bgcolor("LightSalmon")
t.speed(0)
t.delay(0)
t.tracer(400)
tree(0,-300,90,40,10)
t.hideturtle()
t.done()

运行程序,就有一棵自动设置数值的树啦!

 

 


喜欢的话记得点赞关注哦!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值