QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2469|回复: 0
打印 上一主题 下一主题

心情不好的时候,用 Python 画棵樱花树送给自己吧

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2021-7-23 17:26 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    心情不好的时候,用 Python 画棵樱花树送给自己吧

    最近发生了很多事情,工作不开心,爱情无果而终,身边的小伙伴陆陆续续离职。虽然都不是会一下子击垮自己的事情,但是积攒起来,还是会有突然感到疲惫和倦怠的时候,有一种不知道下一步要走向哪里的无力感。


    在这个城市留下了很多的回忆,但是身边的人一个个离开,走到现在,似乎没有太多留恋的了,也没想好未来要去哪里。自己是一个始终需要新鲜感的人,在这里停留了太久,大概到了该说再见的时候了吧。


    那么,用一个不熟悉的语言,画棵樱花树送给自己吧,代码也可以很浪漫不是吗。520刚刚过了,没有爱情,自己也要好好爱自己才对。


    一. 绘制步骤
    1. 环境安装
    可以参考之前的博客:


    Python 爬虫实现:抓取电影网站信息并入库


    2. 图片美化
    之前没怎么用过 Python,就对别人的代码进行分析和效果优化好啦,顺便学习一下。


    这个是原来的效果图,有点灰蒙蒙的,微微改动,让它明媚一点。


    修改之后的代码:


    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
            ran=random()
            #这里相比于原来随机添加了填充的圆圈,让樱花叶子看起来更多一点
            if(ran>0.7):
                begin_fill()
                circle(3)
                fillcolor('pink')
            #把原来随机生成的叶子换成了统一的粉色
            pencolor("pink")
            circle(3)
            if(ran>0.7):
                end_fill()
            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.956,0.9255,0.9882)#设置背景色(把灰色换成淡紫色)
    ht()#隐藏turtle
    speed(0)#速度 1-10渐进,0 最快
    tracer(0,0)
    pu()#抬笔
    backward(50)
    left(90)#左转90度
    pu()#抬笔
    backward(300)#后退300
    tree(12,100)#递归7层
    done()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    之后的效果温暖一点,喜欢这种更有温度的色调:




    二. 技术学习
    1. turtle 简介
    樱花树的绘制效果是通过 Python 中的 turtle 来实现的,Python 的强大之处在于有许多很强大的库,turtle就是其中之一,是 Python 自带的一个库。


    2. turtle 绘图的基础知识
    turtle库绘制原理:有一只海龟在窗体正中心,在画布上游走,走过的轨迹形成了绘制的图形,海龟由程序控制,可以自由改变颜色、方向宽度等。


    (1) . turtle 绘图窗体


    setup用来设置窗体大小,后两个参数为非必选参数;


    turtle.setup(width,height,startx,starty)
    1
    (2) . turtle 的坐标体系


    画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向的小乌龟。


    这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle 绘图中,就是使用位置方向描述小乌龟(画笔)的状态的。


    (3) . turtle 画笔属性


    命令        说明
    turtle.pensize()        设置画笔的宽度
    turtle.pencolor()        没有参数传入,返回当前画笔颜色;传入参数设置画笔颜色,可以是字符串如 “green”, “red”,也可以是RGB 3元组
    turtle.speed(speed)        设置画笔移动速度,画笔绘制的速度范围 [0,10] 整数,数字越大越快
    (4) . turtle 绘图命令


    运动命令


    命令        说明
    turtle.forward(distance)        向当前画笔方向移动distance像素长度
    turtle.backward(distance)        向当前画笔相反方向移动distance像素长度
    turtle.right(degree)        顺时针移动degree°
    turtle.left(degree)        逆时针移动degree°
    turtle.pendown()        移动时绘制图形,缺省时也为绘制
    turtle.goto(x,y)        将画笔移动到坐标为x,y的位置
    turtle.penup()        提起笔移动,不绘制图形,用于另起一个地方绘制
    turtle.pendown()        移动时绘制图形,缺省时也为绘制
    turtle.circle()        画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
    setx( )        将当前x轴移动到指定位置
    sety( )        将当前y轴移动到指定位置
    setheading(angle)        设置当前朝向为angle角度
    home()        设置当前画笔位置为原点,朝向东
    dot®        绘制一个指定直径和颜色的圆点
    控制命令


    命令        说明
    turtle.fillcolor(colorstring)        绘制图形的填充颜色
    turtle.color(color1, color2)        同时设置 pencolor=color1, fillcolor=color2
    turtle.filling()        返回当前是否在填充状态
    turtle.begin_fill()        准备开始填充图形
    turtle.end_fill()        填充完成
    turtle.hideturtle()        隐藏画笔的turtle形状
    turtle.showturtle()        显示画笔的turtle形状
    全局控制命令


    命令        说明
    turtle.clear()        清空turtle窗口,但是turtle的位置和状态不会改变
    turtle.reset()        清空窗口,重置turtle状态为起始状态
    turtle.undo()        撤销上一个turtle动作
    turtle.isvisible()        返回当前turtle是否可见
    stamp()        复制当前图形
    turtle.hideturtle()        隐藏画笔的turtle形状
    turtle.write(s [,font=(“font-name”,font_size,“font_type”)])        写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项
    虽然没有在原来的基础上改动太多的代码,只是简单的给樱花树换了个风格,但是其实也做了很多的尝试和调整,也学到了怎么使用 turtle 。


    这篇博客磨磨唧唧写了好久,在调整和写的时候也在调整自己的心情。在这中间还趁着周末自己跑去青岛溜达了一圈,比烟台热好多啊,去了一趟一下子想开了,哈哈哈哈,果然还是要多出去溜达溜达啊。


    有的时候其实想想,想要新鲜感也很容易,既然外面环境给不了,那就自己来创造吧~


    作为CSDN的活动钉子户,参加了浏览器插件测评,做第一批吃螃蟹的人,还挺有意思的:


    插件测评:体验最新版 CSDN 浏览器助手,希望能够一起变得更好


    最近还想买个吉他,准备给自己加点文艺色彩~


    虽然还是不知道以后要干什么,但是先走好脚下的路,活在当下,以后的事以后再说。


    Everything will be ok~


    加油!
    ————————————————
    版权声明:本文为CSDN博主「盛夏温暖流年」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/j1231230/article/details/116980258


    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-19 07:12 , Processed in 0.285637 second(s), 50 queries .

    回顶部