使用turtle库绘制分形树、太阳花、五角星

1.太阳花的绘制

import turtle

turtle.pencolor('red')  # 画笔颜色
turtle.fillcolor('yellow')  # 填充颜色

turtle.begin_fill()  # 准备开始填充图形
for _ in range(50):  # 画笔画了50次
    turtle.forward(200)
    turtle.left(170)
turtle.end_fill()  # 填充完毕

turtle.mainloop()  # 启动事件循环

效果:
使用turtle库绘制分形树、太阳花、五角星_第1张图片

2.五角星的绘制
(1)简单的五角星绘制,一个库,一个主函数,一个while循环

import turtle

def main():
    count = 1
    while count <= 5:
       turtle.forward(100)
       turtle.right(144)
       count = count + 1
    turtle.exitonclick()
    
if __name__ == '__main__':
    main()

效果:
使用turtle库绘制分形树、太阳花、五角星_第2张图片
(2)重叠五角星
比(1)多了循环,加入循环操作可以绘制重复不同大小的图形

import turtle
def draw_recursive_pentagram(size):    #函数的定义
    '''
     迭代绘制五角星
    '''
    # 计数器
    count = 1
    #开始循环
    while count <= 5:   
        turtle.forward(size)
        turtle.right(144)
        count += 1
    # 五角星绘制完成,更新参数
    size += 10  # size = size + 10
    if size <= 100:
        draw_recursive_pentagram(size)   # 函数中调用函数自身的方式称为**递归**


def main():
    '''
        主函数
    '''
    turtle.penup()
    turtle.backward(200)
    turtle.pendown()
    turtle.pensize(2)
    turtle.pencolor('red')
    size = 50
    draw_recursive_pentagram(size)
    turtle.exitonclick()

if __name__ == '__main__':    # 调用主函数
    main()

效果:
使用turtle库绘制分形树、太阳花、五角星_第3张图片

(2)填充五角星

import turtle
import time

turtle.pensize(5)
turtle.pencolor('yellow')
turtle.fillcolor('red')

turtle.begin_fill()
for _ in range(5):
    turtle.forward(200)
    turtle.right(144)
turtle.end_fill()
time.sleep(2)

 #绘制Done
turtle.penup()  # 起笔,离开五角星位置,开始画Done
turtle.goto(-150, -120)  # Done距离五角星中心的位置
turtle.color('violet')  # 蓝紫色
turtle.write('Done', font=('Arial', 40, 'normal'))  # 写文本,依次为文本内容、字体、字体大小、类型。
turtle.exitonclick()

效果:
使用turtle库绘制分形树、太阳花、五角星_第4张图片
3.绘制分形树
(1)简单的,利用递归函数绘制分形树

import turtle
def draw_branch(branch_length):
    '''
       绘制分形树
    '''

    if branch_length > 3:
        # 绘制右侧树枝
        turtle.forward(branch_length)
        print('向前', branch_length)
        turtle.right(20)
        print('右转 20')
        draw_branch(branch_length - 15)

        # 绘制左侧树枝
        turtle.left(40)
        print('左转 40')
        draw_branch(branch_length - 15)

        # 返回之前的树枝
        turtle.right(20)
        print('右转 20')
        turtle.backward(branch_length)
        print('向后', branch_length)

def main():             #主函数#

    turtle.penup()
    turtle.left(90)
    turtle.backward(180)
    turtle.pendown()
    branch_length = 120
    draw_branch(branch_length)
    turtle.exitonclick()


if __name__ == '__main__':    # 调用主函数
    main()

效果:
使用turtle库绘制分形树、太阳花、五角星_第5张图片
(2)带颜色的分形树

import turtle as tl  # 以下需要调用turtle库函数都采用简写tl

def draw_smalltree(tree_length, tree_angle):
    '''
      绘制分形树函数
    '''
    if tree_length >= 3:
        tl.forward(tree_length)  # 往前画
        tl.right(tree_angle)
        draw_smalltree(tree_length - 10, tree_angle)  # 画下一枝,直到画到树长小于3
        tl.left(2 * tree_angle)  # 转向画左
        draw_smalltree(tree_length - 10, tree_angle)  # 直到画到树长小于3
        tl.rt(tree_angle)  # 转到正向上的方向,然后回溯到上一层
        if tree_length <= 30:  # 树枝长小于30,可以当做树叶了,树叶部分为绿色
            tl.pencolor('green')
        if tree_length > 30:
            tl.pencolor('brown')  # 树干部分为棕色
        tl.backward(tree_length)  # 往回画,回溯到上一层


def main():
    tl.penup
    tl.left(90)  # 因为树是往上的,所以先把方向转左
    tl.backward(250)  # 把起点放到底部
    tl.pendown
    tree_length = 100  # 设置树长
    tree_angle = 20    # 树枝分叉角度
    draw_smalltree(tree_length, tree_angle)  # 调用draw_smalltree函数
    tl.exitonclick()
if __name__ == '__main__':
     main()

效果:
使用turtle库绘制分形树、太阳花、五角星_第6张图片

你可能感兴趣的:(使用turtle库绘制分形树、太阳花、五角星)