栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python Turtle 绘图[难度2星]:一朵雪花(基础代码 、 加变量/加自定义函数优化)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Turtle 绘图[难度2星]:一朵雪花(基础代码 、 加变量/加自定义函数优化)

 2022年北京冬奥会开幕式上“一朵雪花”贯穿始终,给大家印象深刻。今天我们也让海龟来绘制一朵雪花。先绘制一朵普通雪花,在下一期分享中再让海龟来绘制一朵“中国结雪花”~

案例1:雪花(基础代码)

难度:★★☆☆☆☆

 【效果预览】 

【重难点突破】

雪花绘制思路:上图中的雪花共有6个主干构成,主干之间的夹角是60度。每个主干上又有内外两层分支,外层和内层都各有两个分支构成,每个分支与主干的夹角也是60度。所以我们可以先画出一个主干,然后再使用循环进行绘制。

【代码参考】

# 绘制雪花(都使用固定值)
import turtle            # 导入turtle库(模块)
turtle.speed(0)          # 设置海龟的绘图速度,参数为0时最快
turtle.pensize(16)       # 设置画笔粗细,即雪花线条的粗细为16像素
turtle.left(30)          # 海龟向左旋转30度后,再开始画雪花的第1个主干

for i in range(6):       # 循环6次,即雪花由6个主干构成
    turtle.forward(100)  # 海龟向前移动100像素,可以理解为雪花的最大半径为100
    # ① 画外面的两个分支
    turtle.backward(25)  # 后退25像素,准备画外面的分支
    turtle.left(60)      # 分支与主干的夹角为60度
    turtle.forward(30)   # 左分支的长度为30像素
    turtle.backward(30)
    turtle.right(120)
    turtle.forward(30)   # 右分支的长度为30像素
    turtle.backward(30)
    turtle.left(60)      # 画完右分支后,海龟向左旋转60度,回到主干方向
    # ② 画里面的两个分支
    turtle.backward(30)  # 再后退30像素,准备画里面的分支
    turtle.left(60)      # 分支与主干的夹角为60度
    turtle.forward(25)   # 左分支的长度为25像素
    turtle.backward(25)
    turtle.right(120)
    turtle.forward(25)   # 右分支的长度为25像素
    turtle.backward(25)
    turtle.left(60)      # 画完右分支后,海龟向左旋转60度,回到主干方向
    # ③ 海龟回到初始位置 100-25-30=45
    turtle.backward(45)  # 最后再退45像素
    
    # 海龟向左旋转60度,准备进入循环,画其他的主干
    turtle.left(60)      
    
turtle.hideturtle()      # 海龟绘图结束,隐藏海龟

案例2:雪花(加变量优化)

难度:★★☆☆☆☆

 【效果预览】 

加入多个有关联的变量后,只要更改一个变量的数值,就能实现雪花的等比例缩放。

 【重难点突破】 

多个变量之间的关系如下图。只要改动一个变量s,就会影响其他变量的值,所以只要任意输入变量s的值,雪花就会实现等比例缩放。

雪花实现等比例缩放的好处:可以使用自定义函数,分别设置雪花的大小,当在同一个画布绘制多个雪花时,雪花大小有变化,画面会更随意灵动。具体应用请参看下面的案例3。

 【代码参考】 

# 绘制雪花(加变量优化)
import turtle             # 导入turtle库(模块)
turtle.speed(0)           # 设置海龟的绘图速度,参数为0时最快
turtle.left(30)           # 海龟向左旋转30度后,再开始画雪花的第1个主干

### 变量初始化设置
# 只需要改变s的值,雪花就会等比例缩放
s=200                     # 定义变量s,s表示雪花的最大半径
s1=s/4                    # 定义变量s1,s1表示海龟画外面分支前需要后退的距离
s2=3/10*s                 # 定义变量s2,s2表示海龟画里面分支前需要后退的距离
s3=45/100*s               # 定义变量s3,s3表示海龟返回初始位置需要后退的距离
a=s2                      # 定义变量a, a表示外面分支的长度
b=s1                      # 定义变量b, b表示里面分支的长度
pensize=16/100*s          # 定义变量pensize,pensize表示画笔的粗细,即雪花分支的粗细

### 画雪花的6个主干
turtle.pensize(pensize)   # 设置画笔粗细 
for i in range(6):        # 循环6次,即雪花由6个主干构成
    turtle.forward(s)     # 海龟向前移动s像素,可以理解为雪花的最大半径为s
    # ① 画外面的两个分支
    turtle.backward(s1)   # 后退s1像素,准备画外面的分支
    turtle.left(60)       # 分支与主干的夹角为60度
    turtle.forward(a)     # 左分支的长度为a像素
    turtle.backward(a)
    turtle.right(120)
    turtle.forward(a)     # 右分支的长度为a像素
    turtle.backward(a)
    turtle.left(60)       # 画完右分支后,海龟向左旋转60度,回到主干方向
    # ② 画里面的两个分支
    turtle.backward(s2)   # 再后退s2像素,准备画里面的分支
    turtle.left(60)       # 分支与主干的夹角为60度
    turtle.forward(b)     # 左分支的长度为b像素
    turtle.backward(b)  
    turtle.right(120)
    turtle.forward(b)     # 右分支的长度为b像素
    turtle.backward(b)
    turtle.left(60)       # 画完右分支后,海龟向左旋转60度,回到主干方向
    # ③ 海龟回到初始位置
    turtle.backward(s3)   # 最后再退s3像素,回到初始位置

    # 海龟向左旋转60度,准备进入循环,画其他的主干
    turtle.left(60) 
### 海龟绘图结束,隐藏海龟    
turtle.hideturtle()

案例3:雪花(加自定义函数优化)

难度:★★★☆☆☆

 【效果预览】 

如果要同时绘制多个雪花,雪花的颜色尽量要有深浅变化,这样画面更有层次感,更真实。可依据“近大远小,近浅远深”的原则进行配色。

 【配色参考】 

“从喜欢的图片中找寻配色灵感”

[图片来源于花瓣网]

吸取左图得到的颜色值:

背景颜色为:#0d93b8

雪花颜色为:#e0f4f5最白  #fafafa较白   #b1dce5偏蓝   #82c5cd较蓝  

如何吸取图片中的颜色?

请参考以下文章:

Python Turtle绘图:横切的橙子(配色优化——邻近色/反差色)http://mp.weixin.qq.com/s?__biz=MzIwMjE1MTI4MA==&mid=2247501240&idx=1&sn=d4b76a741bc7cbd12abb3abba5af2730&chksm=96e181a7a19608b1d6d4b52106b1361ee8d95e0d2c7c930dca9976660935b4ad566d8d63e731&scene=21#wechat_redirect

 【代码参考】

# 绘制雪花(加自定义函数优化)
import turtle                      # 导入turtle库(模块)
turtle.speed(0)                    # 设置海龟的绘图速度,参数为0时最快
# turtle.delay(0)                    # 设置海龟绘图的延迟速度,参数为0时表示延迟时间为0
turtle.left(30)
turtle.bgcolor("#0d93b8")          # 设置背景颜色为#0d93b8,一种蓝色

### 自定义函数 xuehua(x,y,s,color)
def xuehua(x,y,s,color):           # 自定义绘制雪花的函数xuehua(),定义了4个变量参数
    turtle.pencolor(color)         # 设置画笔颜色为变量color
    turtle.penup()                 # 海龟抬笔,没有移动(绘画)痕迹
    turtle.goto(x,y)               # 海龟移动至坐标(x,y),x和y需要由用户输入             
    turtle.pendown()               # 海龟抬笔,移动(绘画)有痕迹
    s1=s/4                         # 定义变量s1,s1表示海龟画外面分支前需要后退的距离
    s2=3/10*s                      # 定义变量s2,s2表示海龟画里面分支前需要后退的距离
    s3=45/100*s                    # 定义变量s3,s3表示海龟返回初始位置需要后退的距离
    a=s2                           # 定义变量a, a表示外面分支的长度
    b=s1                           # 定义变量b, b表示里面分支的长度
    pensize=16/100*s               # 定义变量pensize,pensize表示画笔的粗细,即雪花分支的粗细
    turtle.pensize(pensize)        # 设置画笔粗细为pensize
    for i in range(6):             # 循环6次,即雪花由6个主干构成
        turtle.forward(s)          # 海龟向前移动s像素,可以理解为雪花的最大半径为s
        # ① 画外面的两个分支
        turtle.backward(s1)        # 后退s1像素,准备画外面的分支
        turtle.left(60)            # 分支与主干的夹角为60度
        turtle.forward(a)          # 左分支的长度为a像素
        turtle.backward(a)
        turtle.right(120)
        turtle.forward(a)          # 右分支的长度为a像素
        turtle.backward(a)
        turtle.left(60)            # 画完右分支后,海龟向左旋转60度,回到主干方向
        # ② 画里面的两个分支
        turtle.backward(s2)        # 再后退s2像素,准备画里面的分支
        turtle.left(60)            # 分支与主干的夹角为60度
        turtle.forward(b)          # 左分支的长度为b像素
        turtle.backward(b)
        turtle.right(120)
        turtle.forward(b)          # 右分支的长度为b像素
        turtle.backward(b)
        turtle.left(60)            # 画完右分支后,海龟向左旋转60度,回到主干方向
        # ③ 海龟回到初始位置
        turtle.backward(s3)        # 最后再退s3像素,回到初始位置

        # 海龟向左旋转60度,准备进入循环,画其他的主干
        turtle.left(60)            # 海龟向左旋转,准备画其他的主干
        
### 调用自定义函数 xuehua(x,y,s,color)
# 四种雪花颜色参考:最白#e0f4f5  较白#fafafa  偏蓝#b1dce5  较蓝#82c5cd   
xuehua(-130,100,60,"#fafafa")      # 调用自定义函数xuehua(x,y,s,color),分别给4个参数赋值
xuehua(20,200,40,"#82c5cd")
xuehua(20,-100,50,"#b1dce5")
xuehua(-200,-150,40,"#82c5cd")
xuehua(240,-250,80,"#e0f4f5")
xuehua(-180,250,20,"#82c5cd")
xuehua(230,60,25,"#b1dce5")

### 海龟绘图结束,隐藏海龟  
turtle.hideturtle()

如果觉得喜欢,希望你能花0.1秒点个赞呦~  你小小的点赞永远是我持续创作的动力,谢谢你~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744464.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号