最近发生了很多事情,工作不开心,爱情无果而终,身边的小伙伴陆陆续续离职。虽然都不是会一下子击垮自己的事情,但是积攒起来,还是会有突然感到疲惫和倦怠的时候,有一种不知道下一步要走向哪里的无力感。
在这个城市留下了很多的回忆,但是身边的人一个个离开,走到现在,似乎没有太多留恋的了,也没想好未来要去哪里。自己是一个始终需要新鲜感的人,在这里停留了太久,大概到了该说再见的时候了吧。
那么,用一个不熟悉的语言,画棵樱花树送给自己吧,代码也可以很浪漫不是吗。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.25pencolor(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.5ran=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()*40setheading(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.5pencolor(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()#隐藏turtlespeed(0)#速度 1-10渐进,0 最快tracer(0,0)pu()#抬笔backward(50)left(90)#左转90度pu()#抬笔backward(300)#后退300tree(12,100)#递归7层done()
之后的效果温暖一点,喜欢这种更有温度的色调:
二. 技术学习
1. turtle 简介
樱花树的绘制效果是通过 Python 中的 turtle 来实现的,Python 的强大之处在于有许多很强大的库,turtle就是其中之一,是 Python 自带的一个库。
2. turtle 绘图的基础知识
turtle库绘制原理:有一只海龟在窗体正中心,在画布上游走,走过的轨迹形成了绘制的图形,海龟由程序控制,可以自由改变颜色、方向宽度等。
(1) . turtle 绘图窗体
setup用来设置窗体大小,后两个参数为非必选参数;
turtle.setup(width,height,startx,starty)
(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 。
这篇博客磨磨唧唧写了好久,在调整和写的时候也在调整自己的心情。在这中间还趁着周末自己跑去青岛溜达了一圈,比烟台热好多啊,哈哈哈哈。
其实想想,想要新鲜感也很容易,可以自己来创造嘛,所以就准备买个吉他开始练习,虽然还是不知道以后要干什么,但是先走好脚下的路,活在当下,以后的事以后再说。
Everything will be ok~ 默默给自己加个油!