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

前言

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

完成目标

视频展现:

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

工具准备

开发工具: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()

    画树枝部分

    确定树枝数量,颜色的色号选择,先默认设定最小的树枝分支长度个树枝两边设定颜色能看起来更加的好看,左边为白色,右边为珊瑚色,分支的概率设定在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)

    我是白又白i,一名喜欢分享知识的程序媛❤️感兴趣的可以关注我的公众号:白又白学Python【非常感谢你的点赞、收藏、关注、评论,一键三连支持】

    ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 199,440评论 5 467
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 83,814评论 2 376
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 146,427评论 0 330
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 53,710评论 1 270
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 62,625评论 5 359
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 48,014评论 1 275
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 37,511评论 3 390
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 36,162评论 0 254
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 40,311评论 1 294
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 35,262评论 2 317
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 37,278评论 1 328
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 32,989评论 3 316
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 38,583评论 3 303
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 29,664评论 0 19
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 30,904评论 1 255
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 42,274评论 2 345
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 41,856评论 2 339

    推荐阅读更多精彩内容