同一个python代码绘制多种不同樱花树,你喜欢哪一种?

前言

立冬啦!正式步入冬天,不过长沙的天气在这两天时好时坏,但是在今天出太阳啦晒晒太阳,突然想到之前画了个樱花的视频,然后趁着心情好就把它解析出来,嘿嘿是真的还蛮好看的,而且一个代码可以随机画出多种样式的,一起来看看叭

完成目标

通过Python绘制樱花树

B11D9ARN2MO6FAX4BLW.png

视频展现:

樱花动图.gif

因为一种樱花树要画比较久,我也就稍微展示一下啦,当然还有很多种就没有一一录屏了,可以自行去研究哦,嘻嘻嘻

工具准备

开发工具:pycharm
开发环境:python3.7, Windows11
使用工具包:turtle

项目解析思路

项目思路分为3部分:

  • 绘制樱花的落叶花瓣,掉落的花瓣
  • 给樱花树添加树枝
  • 给樱花树添加绘画背景
  • 颜色的绘制选取各种样式的颜色

绘制掉落花瓣功能

确定花瓣掉落的数量,掉落的花瓣数根据樱花树枝来判断,和树枝数乘15,树画的越大掉的就越多哈
设定花瓣的坐标花瓣的大小设置为(10,10)控制画笔移动到指定区域提笔,向前y,左转90,走x,落笔,画出花瓣形状,绘画完所以的花瓣数量就ok,在将画的形状指定颜色,在勾勒出圆形,回到起点提笔,后退x,右转90,后退y,落笔

def draw_petal(turtle_obj, flower):
    # 绘制掉落的花瓣
    for i in range(int(flower)):
        # 有正有负就可以让画笔往二个方向走
        x = flower - 4 * flower * random()

        # 花瓣整体宽度(-10, 10)
        y = 10 - 20 * random()

        # 提笔,向前y,左转90,走x,落笔
        turtle_obj.penup()
        turtle_obj.forward(y)
        turtle_obj.left(90)
        turtle_obj.forward(x)
        turtle_obj.pendown()

        # 珊瑚色
        turtle_obj.pencolor("lightcoral")
        # 画圆
        turtle_obj.circle(1)

        # 回到起点
        # 提笔,后退x,右转90,后退y,落笔
        turtle_obj.penup()
        turtle_obj.backward(x)
        turtle_obj.right(90)
        turtle_obj.backward(y)
        turtle_obj.pendown()



复制代码

画树枝部分

python超全资料库安装包学习路线项目源码免费分享

确定树枝数量,颜色的色号选择,先默认设定最小的树枝分支长度个树枝两边设定颜色能看起来更加的好看,左边为白色,右边为珊瑚色,分支的概率设定在0.5,树枝可以设定成随机生长,通过随机数设定

# 画树枝部分
def draw_tree(turtle_obj, branch, tree_color):
    # 设置一个最小分支长度
    min_branch = 4

    if branch > min_branch:
        if branch < 8:
            # 以0.5的概率,向左、右分支
            if randint(0, 1) == 0:
                # 左为白色
                turtle_obj.pencolor("snow")
            else:
                # 右为珊瑚色
                turtle_obj.pencolor("lightcoral")
            # 枝干
            turtle_obj.pensize(branch / 2)
        elif 8 <= branch <= 16:
            # 以0.33的概率,分为左、中、右分支
            if randint(0, 2) == 0:
                # 左为白色
                turtle_obj.pencolor("snow")
            else:
                # 中、右为珊瑚色
                turtle_obj.pencolor("lightcoral")
            # 树枝
            turtle_obj.pensize(branch / 4)
        else:
            # 褐色
            turtle_obj.pencolor(tree_color)
            # 细枝
            turtle_obj.pensize(branch / 10)

        # 最开始的树干长度
        turtle_obj.forward(branch)

        # 随机度数因子
        a = 1.5 * random()
        # 顺时针旋转随机角度(0~30度)
        turtle_obj.right(20 * a)

        # 随机长度因子
        b = 1.5 * random()
        # 往右画,直到画不动为止
        draw_tree(turtle_obj, branch - 10 * b, tree_color)

        # 左转随机角度
        turtle_obj.left(40 * a)
        # 往左画,直到画不动位置
        draw_tree(turtle_obj, branch - 10 * b, tree_color)

        # 右转一定角度
        turtle_obj.right(20 * a)
        # 提笔
        turtle_obj.penup()

        # 递归结束回到起点
        turtle_obj.backward(branch)
        turtle_obj.pendown()


复制代码

创建画布,将数据颜色进行添加,设置好运行的加速倍数

def get_screen(width, height, color, speed):
    # 创建画幕
    screen_obj = turtle.Screen()
    # 画布大小:(width, height),颜色:color
    screen_obj.screensize(width, height, bg=color)
    screen_obj.setup(1.0, 1.0)
    # speed倍加速
    screen_obj.tracer(speed)

    return screen_obj

复制代码

颜色画布画笔的选择:

  • 树干的颜色
  • 画笔的大小
  • 前进的相素格
  • 创建画笔
  • 画笔的粗细调整
  • 提笔落笔的选择
  • 画笔的颜色配置
  • 设置常量参数 枝干的粗细 落花数 第几颗数
def trees(tree_num):
    # 颜色
    color = ['brown', 'tan', 'black']

    for j in range(tree_num):
        # 树干颜色
        tree_color = color[randint(0, len(color) - 1)]

        # 画笔大小
        pensize = randint(2, 5)
        # 前进像素
        forward = ((-1) ** pensize) * pensize * randint(20, 50)
        # 后退像素
        if pensize <= 3:
            backward = ((-1) ** pensize) * (5 - pensize) * randint(10, 15)
        else:
            backward = pensize * randint(45, 50)

        # 创建画笔
        turtle_obj = turtle.Turtle()
        # 画笔粗细
        turtle_obj.pensize(pensize)
        # 提笔,向前forward,左转90,backward,落笔
        turtle_obj.penup()
        turtle_obj.forward(forward)
        turtle_obj.left(90)
        turtle_obj.backward(backward)
        turtle_obj.pendown()
        # 画笔颜色:褐色
        turtle_obj.pencolor(tree_color)

        # 枝干粗细
        branch = pensize * 15
        # 落花数
        flowers = branch
        # 第j棵树
        draw_tree(turtle_obj, branch, tree_color)
        # 花瓣
        draw_petal(turtle_obj, flowers)


本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>