天天看点

同一个python代码绘制多种不同樱花树,你like哪一种?绘制掉落的花瓣有正有负就可以让画笔往二个方向走花瓣整体宽度(-10, 10)提笔,向前y,左转90,走x,落笔珊瑚色画圆回到起点提笔,后退x,右转90,后退y,落笔

前言

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

完成目标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yd3W5sfp-1665731480103)(//upload-images.jianshu.io/upload_images/26798310-b870f1df9d696ad7.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

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

工具准备

开发工具: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,树枝可以设定成随机生长,通过随机数设定。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,联系我魏X: 762459510 【教程/工具/方法/解疑】

# 画树枝部分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,一名喜欢讲解知识的程序媛