📜  神奇的树与 python turtle - Python (1)

📅  最后修改于: 2023-12-03 15:41:03.038000             🧑  作者: Mango

神奇的树与 Python Turtle

Python Turtle是一个用于创建图形的Python库,它可以通过简单的指令来移动一个海龟(turtle)画出各种图形。

在本文中,我们将利用Python Turtle来绘制一棵神奇的树。

绘制树干

首先,我们需要绘制树干。树干由若干个直线段组成,每个直线段的长度逐渐减小,角度逐渐增大。

import turtle

def draw_branch(branch_length):
    if branch_length > 0:
        turtle.forward(branch_length)
        turtle.right(20)
        draw_branch(branch_length - 10)
        turtle.left(40)
        draw_branch(branch_length - 10)
        turtle.right(20)
        turtle.backward(branch_length)

turtle.speed(0)
turtle.left(90)
draw_branch(60)
turtle.exitonclick()

在上面的代码中,我们定义了一个名为draw_branch的函数来绘制树干。函数参数branch_length表示树干的长度。

函数的实现过程如下:

  1. 将海龟向前移动branch_length个像素
  2. 将海龟向右旋转20度
  3. 递归绘制左分支,长度为branch_length - 10
  4. 将海龟向左旋转40度
  5. 递归绘制右分支,长度为branch_length - 10
  6. 将海龟向右旋转20度
  7. 将海龟向后移动branch_length个像素

最终我们调用draw_branch(60)来绘制出长度为60的树干。将海龟转向90度,让树干向上生长。我们设定海龟速度为0,即最快速度。最后通过点击鼠标退出程序。

运行上面的代码,我们可以看到如下图形:

绘制树干

绘制树叶

接下来,我们需要绘制树叶。树叶由若干个圆形组成,每个圆形位于不同的位置,大小随机。

import random
import turtle

def draw_branch(branch_length):
    if branch_length > 0:
        turtle.forward(branch_length)
        turtle.right(20)
        draw_branch(branch_length - 10)
        turtle.left(40)
        draw_branch(branch_length - 10)
        turtle.right(20)
        turtle.backward(branch_length)

def draw_leaves(leaf_size):
    for i in range(100):
        turtle.penup()
        x = random.randint(-200,200)
        y = random.randint(50,250)
        turtle.goto(x,y)
        turtle.pendown()
        turtle.pencolor("green")
        turtle.fillcolor("lightgreen")
        turtle.begin_fill()
        turtle.circle(leaf_size)
        turtle.end_fill()

turtle.speed(0)
turtle.left(90)
draw_branch(60)
draw_leaves(7)
turtle.exitonclick()

在上面的代码中,我们新增了一个名为draw_leaves的函数来绘制树叶。函数参数leaf_size表示树叶的大小。

函数的实现过程如下:

  1. 循环100次,每次执行以下操作:
    • 将海龟提起来
    • 生成一个x坐标,范围在-200到200之间
    • 生成一个y坐标,范围在50到250之间
    • 将海龟移动到(x,y)位置
    • 将笔颜色设置为绿色,填充颜色设置为浅绿色
    • 开始填充
    • 绘制一个大小为leaf_size的圆形
    • 结束填充

最终我们调用draw_leaves(7)来绘制出大小为7的树叶。

运行上面的代码,我们可以看到如下图形:

绘制树叶

完整代码

将上面的代码合并起来,得到完整的绘制神奇树的代码如下:

import random
import turtle

def draw_branch(branch_length):
    if branch_length > 0:
        turtle.forward(branch_length)
        turtle.right(20)
        draw_branch(branch_length - 10)
        turtle.left(40)
        draw_branch(branch_length - 10)
        turtle.right(20)
        turtle.backward(branch_length)

def draw_leaves(leaf_size):
    for i in range(100):
        turtle.penup()
        x = random.randint(-200,200)
        y = random.randint(50,250)
        turtle.goto(x,y)
        turtle.pendown()
        turtle.pencolor("green")
        turtle.fillcolor("lightgreen")
        turtle.begin_fill()
        turtle.circle(leaf_size)
        turtle.end_fill()

turtle.speed(0)
turtle.left(90)
draw_branch(60)
draw_leaves(7)
turtle.exitonclick()

通过运行上面的代码,我们可以看到如下图形:

绘制神奇树

现在,我们已经成功绘制了一棵神奇的树。你可以尝试修改树干长度、树叶大小等参数,让树变得更加神奇。