Python Turtle库画树

本文介绍使用Python的Turtle模块绘制四种不同风格的树形图的方法。通过递归调用和随机化参数,实现树木的自然生长效果,并展示了如何通过改变颜色、线条粗细等属性来增加图像的真实感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、树形1

代码:

from turtle import *
from random import *
from math import *

def tree(n, l):
    pd() # 下笔
    # 阴影效果
    t = cos(radians(heading() + 45)) / 8 + 0.25
    pencolor(t, t, t)
    pensize(n / 3)
    forward(l) # 画树枝


    if n > 0:
        b = random() * 15 + 10 # 右分支偏转角度
        c = random() * 15 + 10 # 左分支偏转角度
        d = l * (random() * 0.25 + 0.7) # 下一个分支的长度
        # 右转一定角度,画右分支
        right(b)
        tree(n - 1, d)
        # 左转一定角度,画左分支
        left(b + c)
        tree(n - 1, d)

        # 转回来
        right(c)
    else:
        # 画叶子
        right(90)
        n = cos(radians(heading() - 45)) / 4 + 0.5
        pencolor(n, n*0.8, n*0.8)
        circle(3)
        left(90)

        # 添加0.3倍的飘落叶子
        if(random() > 0.7):
            pu()
            # 飘落
            t = heading()
            an = -40 + random()*40
            setheading(an)
            dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
            forward(dis)
            setheading(t)


            # 画叶子
            pd()
            right(90)
            n = cos(radians(heading() - 45)) / 4 + 0.5
            pencolor(n*0.5+0.5, 0.4+n*0.4, 0.4+n*0.4)
            circle(2)
            left(90)
            pu()

            #返回
            t = heading()
            setheading(an)
            backward(dis)
            setheading(t)

    pu()
    backward(l)# 退回

bgcolor(0.5, 0.5, 0.5) # 背景色
ht() # 隐藏turtle
speed(0) # 速度,1-10渐进,0最快
tracer(0, 0)
pu() # 抬笔
backward(100)
left(90) # 左转90度
pu() # 抬笔
backward(300) # 后退300
tree(12, 100) # 递归7层
done()

二、树形2

效果图:

代码:

from turtle import *

# 设置色彩模式是RGB:
colormode(255)

lt(90)

lv = 14
l = 120
s = 45

width(lv)

# 初始化RGB颜色:
r = 0
g = 0
b = 0
pencolor(r, g, b)

penup()
bk(l)
pendown()
fd(l)

def draw_tree(l, level):
    global r, g, b
    # save the current pen width
    w = width()

    # narrow the pen width
    width(w * 3.0 / 4.0)
    # set color:
    r = r + 1
    g = g + 2
    b = b + 3
    pencolor(r % 200, g % 200, b % 200)

    l = 3.0 / 4.0 * l

    lt(s)
    fd(l)

    if level < lv:
        draw_tree(l, level + 1)
    bk(l)
    rt(2 * s)
    fd(l)

    if level < lv:
        draw_tree(l, level + 1)
    bk(l)
    lt(s)

    # restore the previous pen width
    width(w)

speed("fastest")

draw_tree(l, 4)

done()

三、树形3

效果图:

代码:

import turtle
import random
from turtle import *
from time import sleep

t = turtle.Turtle()
w = turtle.Screen()

def tree(branchLen, t):
    if branchLen > 3:
        if 8 <= branchLen <= 12:
            if random.randint(0, 2) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')
            t.pensize(branchLen / 3)
        elif branchLen < 8:
            if random.randint(0, 1) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')
            t.pensize(branchLen / 2)
        else:
            t.color('sienna')
            t.pensize(branchLen / 10)

        t.forward(branchLen)
        a = 1.5 * random.random()
        t.right(20*a)
        b = 1.5 * random.random()
        tree(branchLen-10*b, t)
        t.left(40*a)
        tree(branchLen-10*b, t)
        t.right(20*a)
        t.up()
        t.backward(branchLen)
        t.down()


def petal(m, t):  # 树下花瓣
    for i in range(m):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        t.color("lightcoral")
        t.circle(1)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)


def main():
    t = turtle.Turtle()
    myWin = turtle.Screen()
    getscreen().tracer(5, 0)
    turtle.screensize(bg='wheat')
    t.left(90)
    t.up()
    t.backward(150)
    t.down()
    t.color('sienna')
    tree(60, t)
    petal(100, t)

    myWin.exitonclick()

main()
done()

 

四、树形4

效果图

代码:

from turtle import *
from random import *
from math import *

def tree(n, l):
    pd()
    t = cos(radians(heading() + 45)) / 8 + 0.25
    pencolor(t, t, t)
    pensize(n / 4)
    forward(l)
    if n > 0:
        b = random() * 15 + 10
        c = random() * 15 + 10
        d = l * (random() * 0.35 + 0.6)
        right(b)
        tree(n - 1, d)
        left(b + c)
        tree(n - 1, d)
        right(c)
    else:
        right(90)
        n = cos(radians(heading() - 45)) / 4 + 0.5
        pencolor(n, n, n)
        circle(2)
        left(90)
    pu()
    backward(l)

bgcolor(0.5, 0.5, 0.5)
ht()
speed(0)
tracer(0, 0)
left(90)
pu()
backward(300)
tree(13, 100)
done()

 

### 回答1: Python turtle是一个非常有趣的绘图工具,可以用来绘制各种形状和图案。以下是一些常见的Python turtle图代码: 1. 绘制正方形: import turtle turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.forward(100) 2. 绘制五角星: import turtle turtle.color("red") turtle.begin_fill() for i in range(5): turtle.forward(100) turtle.right(144) turtle.end_fill() 3. 绘制圆形: import turtle turtle.circle(50) 4. 绘制螺旋线: import turtle for i in range(100): turtle.forward(i) turtle.right(90) 5. 绘制三角形: import turtle turtle.forward(100) turtle.left(120) turtle.forward(100) turtle.left(120) turtle.forward(100) 以上是一些常见的Python turtle图代码,可以根据需要进行修改和扩展。 ### 回答2: Python turtle是一个非常好用的绘图工具,它可以很快地帮助我们创造出一些简单、生动的图。在使用Turtle进行图形绘制时,我们可以在图形绘制的同时,通过学习Turtle的运用,提高我们的Python编程能力。 以下是一些Python turtle图代码: 1.正方形: import turtle turtle.speed(10) turtle.color("red") for i in range(4): turtle.forward(100) turtle.right(90) 2.三角形: import turtle turtle.speed(5) turtle.color("blue") for i in range(3): turtle.forward(100) turtle.left(120) 3.五角星: import turtle turtle.speed(5) turtle.color("purple") for i in range(5): turtle.forward(100) turtle.right(144) 4.六边形: import turtle turtle.speed(5) turtle.color("green") for i in range(6): turtle.forward(100) turtle.right(60) 5.圆形: import turtle turtle.speed(5) turtle.circle(50) 6.心形: import turtle turtle.speed(10) turtle.color("pink") turtle.left(45) turtle.forward(100) turtle.circle(50, 180) turtle.right(90) turtle.circle(50, 180) turtle.forward(100) 7.菱形: import turtle turtle.speed(5) turtle.color("orange") turtle.left(45) turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.forward(100) turtle.right(90) turtle.forward(100) Python turtle是一个非常有趣、易学易用、充满趣味的图形绘制工具,我们可以通过不断的实践和探索,来不断提高我们的交互式编程技能。 ### 回答3: Pythonturtle 是一个非常有趣和常用的绘图工具,可以通过简单的代码绘制有趣的图形和动,而且非常易学易用。本文将为大家介绍一些常用的 turtle 绘图代码和技巧,帮助读者更好地使用 turtle 。 1. 前进和后退 使用 turtle 绘图时,最基本的操作就是前进和后退,可以通过向前和向后方法 forward() 和 backward() 来实现。例如: ```python import turtle turtle.forward(100) #向前移动100个像素 turtle.backward(100) #向后移动100个像素 turtle.done() #完成后关闭窗口 ``` 2. 左右转向 除了前进和后退,turtle 还可以左右转向,可以通过左右方法 left() 和 right() 来实现。例如: ```python import turtle turtle.left(90) #向左旋转90度 turtle.right(90) #向右旋转90度 turtle.done() #完成后关闭窗口 ``` 3. 圆和弧线 turtle 还可以圆和弧线,可以通过 circle() 和 circle(半径, 角度) 方法来实现。例如: ```python import turtle turtle.circle(50) # 半径为50的圆 turtle.circle(50, 180) # 半径为50的圆的一半 turtle.done() #完成后关闭窗口 ``` 4. 多边形 除了圆和弧线,turtle 还可以出多边形,可以通过 for 循环和 forward() 方法来实现,例如: ```python import turtle n = 6 # 多边形边数 angle = 360 / n # 多边形内角度数 for i in range(n): turtle.forward(100) turtle.left(angle) turtle.done() #完成后关闭窗口 ``` 5. 颜色和填充 turtle 还可以设置不同的颜色和填充效果,可以通过 color() 和 fillcolor() 方法来实现。例如: ```python import turtle turtle.color("red", "yellow") turtle.begin_fill() turtle.circle(50) turtle.end_fill() turtle.done() #完成后关闭窗口 ``` 6. 图形重复 turtle 还可以通过 dot 和 stamp() 方法来重复绘制图形,例如: ```python import turtle turtle.dot(50) # 绘制圆点 turtle.stamp() # 重复绘制当前图形 turtle.done() #完成后关闭窗口 ``` 7. 自定义图形 turtle 还可以通过 register_shape() 方法来注册自定义图形。需要先定义一个列表,将像素的 x 和 y 坐标值依次添加到列表中,最后调用 register_shape() 方法。例如: ```python import turtle my_shape = ((0,0), (50,0), (50,50), (0,50)) # 定义自定义图形 turtle.register_shape("myshape", my_shape) # 注册自定义图形 turtle.shape("myshape") # 使用自定义图形 turtle.done() #完成后关闭窗口 ``` 8. 绘制文本 turtle 还可以绘制文本,可以通过 write() 方法来实现。例如: ```python import turtle turtle.write("Hello, world!") # 绘制文本 turtle.done() #完成后关闭窗口 ``` 9. 清屏和控制速度 turtle 还可以清屏和控制绘速度,可以通过 clear() 和 speed() 方法来实现。例如: ```python import turtle turtle.speed(1) # 设置绘速度 turtle.clear() # 清空屏幕 turtle.done() #完成后关闭窗口 ``` 以上是常用的 turtle 绘图代码和技巧,可以让读者更好地使用 turtle 绘图。当然,还有许多其他使用方法,希望读者可以通过更多练习和查阅官方文档来深入掌握 turtle
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻欢子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值