Python Turtle 绘图[难度2星]:浪漫蒲公英(3种画法3种难度层层递进)

 

北京冬奥会开幕式上除了“中国结”雪花外,还有一个浪漫元素就是蒲公英

受此启发,我在网上搜索到蒲公英的简笔画,选了几个python绘图容易实现的简笔画作为参考,绘制出了以下三种蒲公英。

图1的蒲公英绒毛顶端是圆点,图2绒毛顶端是圆形光束,图3绒毛顶端是扇形光束。从左到右,蒲公英的绘制难度逐级增大。 

案例1:蒲公英(顶端是圆点)

难度:★★☆☆☆☆

 【效果预览】 

蒲公英的绒毛顶端是圆点[简单]

 【重难点突破】 

1. 蒲公英绘制思路:先绘制出三束长短不一的绒毛,然后再进入循环让海龟重复绘制其他的绒毛。

2. 画蒲公英的歪茎:用超大半径,较小角度画圆弧,来实现歪茎效果。

如 turtle.circle(-600,40)    

circle(半径,角度)  半径为负时,画在海龟头部方向的右边。即向下绘制,向左弯曲。

 【代码参考】 

我分享的代码虽然不是最简化的代码,但一定是最方便初学者理解的代码。


# 案例1:蒲公英(绒毛顶端是圆点)【简单】
import turtle              # 导入turtle库(模块)
turtle.speed(0)            # 设置海龟的绘图速度,参数为0时最快
turtle.delay(0)            # 设置海龟的延迟速度,参数为0时表示没有延迟时间。
turtle.bgcolor("#1e67c5")  # 设置背景颜色为#1e67c5,一种蓝色
turtle.pencolor("#e0f4f5") # 设置画笔颜色为#e0f4f5,一种白色。纯白色为#ffffff,即white.会比较刺眼。

# 变量初始化设置
a=100                      # 定义变量a,表示长绒毛的长度
b=80                       # 定义变量b,表示中绒毛的长度                      
c=60                       # 定义变量c,表示短绒毛的长度
a1=8                       # 定义变量a1,表示长绒毛顶端圆点的直径
b1=7                       # 定义变量b1,表示中绒毛顶端圆点的直径
c1=6                       # 定义变量c1,表示短绒毛顶端圆点的直径

# 画球状绒毛
for i in range(15):        # 循环15次。因为(8+8+8)*15=360
    # 画长绒毛
    turtle.forward(a)      # 海龟前进a像素
    turtle.dot(a1)         # 画直径为a1的圆点
    turtle.backward(a)     # 海龟再后退a像素,回到起点位置
    turtle.left(8)         # 海龟向左旋转8度,准备画中绒毛
    # 画中绒毛
    turtle.forward(b)
    turtle.dot(b1)         # 画直径为b1的圆点
    turtle.backward(b)
    turtle.left(8)         # 海龟再向左旋转8度,准备画短绒毛
    # 画短绒毛
    turtle.forward(c)
    turtle.dot(c1)         # 画直径为c1的圆点
    turtle.backward(c)
    turtle.left(8)         # 画完短绒毛后,海龟再向左旋转8度,进入循环画其他绒毛
  
# 画茎(略歪)(用超大半径,较小角度画圆弧,来实现歪茎效果)
turtle.pensize(3)          # 设置画笔的粗细为3,即茎的粗线为3。默认画笔粗线为1
turtle.right(80)           # 画完球状绒毛后,海龟朝向右,所以要让海龟向右旋转80度后再画茎
turtle.circle(-600,40)     # 半径为负,画在海龟头部方向的右边

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

下面的代码将各个变量进行了关联,只要改动一个变量a,就会影响其他变量的值,即可以实现蒲公英的等比例缩放。

为了方便初学者理解,在后面的两个案例中,变量不再做关联,只用固定的数值。

# 案例1:蒲公英(绒毛顶端是圆点)【简单】 变量有关联
import turtle              # 导入turtle库(模块)
turtle.speed(0)            # 设置海龟的绘图速度,参数为0时最快
turtle.delay(0)            # 设置海龟的延迟速度,参数为0时表示没有延迟时间。
turtle.bgcolor("#1e67c5")  # 设置背景颜色为#1e67c5,一种蓝色
turtle.pencolor("#e0f4f5") # 设置画笔颜色为#e0f4f5,一种白色。纯白色为#ffffff,即white.会比较刺眼。

# 变量初始化设置(只要改动变量a的值,其他变量都会跟着变化)
# 变量之间的关系表达式,没有简化,是为了更方便理解
a=100                      # 定义变量a,表示长绒毛的长度
b=80/100*a                 # 定义变量b,表示中绒毛的长度                      
c=60/100*a                 # 定义变量c,表示短绒毛的长度
a1=8/100*a                 # 定义变量a1,表示长绒毛顶端圆点的直径
b1=7/100*a                 # 定义变量b1,表示中绒毛顶端圆点的直径
c1=6/100*a                 # 定义变量c1,表示短绒毛顶端圆点的直径

# 画球状绒毛
for i in range(15):        # 循环15次。因为(8+8+8)*15=360
    # 画长绒毛
    turtle.forward(a)      # 海龟前进a像素
    turtle.dot(a1)         # 画直径为a1的圆点
    turtle.backward(a)     # 海龟再后退a像素,回到起点位置
    turtle.left(8)         # 海龟向左旋转8度,准备画中绒毛
    # 画中绒毛
    turtle.forward(b)
    turtle.dot(b1)         # 画直径为b1的圆点
    turtle.backward(b)
    turtle.left(8)         # 海龟再向左旋转8度,准备画短绒毛
    # 画短绒毛
    turtle.forward(c)
    turtle.dot(c1)         # 画直径为c1的圆点
    turtle.backward(c)
    turtle.left(8)         # 画完短绒毛后,海龟再向左旋转8度,进入循环画其他绒毛
  
# 画茎(略歪)(用超大半径,较小角度画圆弧,来实现歪茎效果)
turtle.pensize(3)          # 设置画笔的粗细为3,即茎的粗线为3。默认画笔粗线为1
turtle.right(80)           # 画完球状绒毛后,海龟朝向右,所以要让海龟向右旋转80度后再画茎
turtle.circle(-600,40)     # 半径为负,画在海龟头部方向的右边

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

案例2:蒲公英(顶端是圆形光束)

难度:★★☆☆☆☆

 【效果预览】 

蒲公英的绒毛顶端是圆形光束[较难]

 【重难点突破】 

案例2使用了for循环嵌套。右图中框内的for循环代码块代替了左图中的一行代码turtle.dot(a1),因此可以将绒毛顶端的圆点变换为圆形光束。

 【代码参考】 

# 案例2:蒲公英(绒毛顶端是圆形光束)【较难】
import turtle                # 导入turtle库(模块)
turtle.speed(0)              # 设置海龟的绘图速度,参数为0时最快
turtle.delay(0)              # 设置海龟的延迟速度,参数为0时表示没有延迟时间。
turtle.bgcolor("#1e67c5")    # 设置背景颜色为#1e67c5,一种蓝色
turtle.pencolor("#e0f4f5")   # 设置画笔颜色为#e0f4f5,一种白色。纯白色为#ffffff,即white.会比较刺眼。

# 变量初始化设置
a=100                        # 定义变量a,表示长绒毛的长度
b=80                         # 定义变量b,表示中绒毛的长度                      
c=60                         # 定义变量c,表示短绒毛的长度
a1=8                         # 定义变量a1,表示长绒毛顶端圆形光束的长度
b1=5                         # 定义变量b1,表示中绒毛顶端圆形光束的长度
c1=3                         # 定义变量c1,表示短绒毛顶端圆形光束的长度

# 画球状绒毛
for i in range(15):          # 循环15次。因为(8+8+8)*15=360
    # 画长绒毛
    turtle.forward(a)        # 海龟前进a像素
    for i in range(12):            # 海龟循环12次,画绒毛顶端的圆形光束
        turtle.forward(a1)         # 海龟前进a1像素
        turtle.backward(a1)        # 海龟再后退a1像素,回到起点位置
        turtle.left(30)            # 海龟向左旋转30度,准备画下一条光束
    turtle.backward(a)       # 海龟再后退a像素,回到起点位置
    turtle.left(8)           # 海龟向左旋转8度,准备画中绒毛
    # 画中绒毛
    turtle.forward(b)        # 海龟前进b像素
    for i in range(12):
        turtle.forward(b1)
        turtle.backward(b1)
        turtle.left(30)
    turtle.backward(b)       # 海龟再后退b像素,回到起点位置
    turtle.left(8)           # 海龟再向左旋转8度,准备画短绒毛
    # 画短绒毛
    turtle.forward(c)        # 海龟前进c像素
    for i in range(12):
        turtle.forward(c1)
        turtle.backward(c1)
        turtle.left(30)
    turtle.backward(c)       # 海龟再后退c像素,回到起点位置 
    turtle.left(8)           # 画完短绒毛后,海龟再向左旋转8度,进入循环画其他绒毛
    
# 画茎(略歪)(用超大半径,较小角度画圆弧,来实现歪茎效果)
turtle.pensize(3)            # 设置画笔的粗细为3,即茎的粗线为3。默认画笔粗线为1
turtle.right(80)             # 画完球状绒毛后,海龟朝向右,所以要让海龟向右旋转80度后再画茎
turtle.circle(-600,40)       # 半径为负,画在海龟头部方向的右边

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

案例3:蒲公英(顶端是扇形光束)

难度:★★☆☆☆☆

 【效果预览】 

蒲公英的绒毛顶端是扇形光束[最难]

 【重难点突破】 

案例3也使用了for循环嵌套。图3框内的for循环代码块代替了图1中的一行代码turtle.dot(a1),因此可以将绒毛顶端的圆点变换为扇形光束。

敲重点画扇形光束比圆形光束要复杂一点,一定要注意左右旋转的角度。不管是圆形还是扇形都要确保海龟最终刚好旋转360度,刚好能够回到起始位置

如案例3中,因为6个30度和260度都是向左旋转left,80度是向右旋转right,所以海龟绘制完扇形光束后一定要再旋转260度,使得海龟刚好旋转了360度回到起始位置。

30度*6-80度+260度=360度

 【代码参考】 

# 案例3:蒲公英(绒毛顶端是扇形光束)【最难】
import turtle              # 导入turtle库(模块)
turtle.speed(0)              # 设置海龟的绘图速度,参数为0时最快
turtle.delay(0)              # 设置海龟的延迟速度,参数为0时表示没有延迟时间。
turtle.bgcolor("#1e67c5")    # 设置背景颜色为#1e67c5,一种蓝色
turtle.pencolor("#e0f4f5")   # 设置画笔颜色为#e0f4f5,一种白色。纯白色为#ffffff,即white.会比较刺眼。

# 变量初始化设置
a=100                        # 定义变量a,表示长绒毛的长度
b=80                         # 定义变量b,表示中绒毛的长度                      
c=60                         # 定义变量c,表示短绒毛的长度
a1=8                         # 定义变量a1,表示长绒毛顶端扇形光束的长度
b1=5                         # 定义变量b1,表示中绒毛顶端扇形光束的长度
c1=3                         # 定义变量c1,表示短绒毛顶端扇形光束的长度

# 画球状绒毛
for i in range(15):          # 循环15次。因为(8+8+8)*15=360
    # 画长绒毛
    turtle.forward(a)        # 海龟前进a像素
    turtle.right(80)         # 海龟向右旋转80度。(准备开始向左边光束)
    for i in range(6):            # 循环6次,即画6条光束
        turtle.forward(a1)
        turtle.backward(a1)
        turtle.left(30)           # 每条光束画完后,旋转30度。30*6-80=100
    turtle.left(260)         # 画完扇形光束后,海龟并未回到初始方向。需要再继续向左旋转360-100度  
    turtle.backward(a)       # 海龟后退a像素
    turtle.left(8)           # 海龟向左旋转8度,准备画中绒毛
    # 画中绒毛
    turtle.forward(b)        # 海龟前进b像素
    turtle.right(80)
    for i in range(6):
        turtle.forward(a1)
        turtle.backward(a1)
        turtle.left(30)
    turtle.left(260)    
    turtle.backward(b)       # 海龟再后退b像素,回到起点位置
    turtle.left(8)           # 海龟再向左旋转8度,准备画短绒毛
    # 画短绒毛
    turtle.forward(c)        # 海龟前进c像素
    turtle.right(80)        
    for i in range(6):
        turtle.forward(a1)
        turtle.backward(a1)
        turtle.left(30)
    turtle.left(260)          
    turtle.backward(c)       # 海龟再后退c像素,回到起点位置     
    turtle.left(8)           # 画完短绒毛后,海龟再向左旋转8度,进入循环画其他绒毛

# 画茎(略歪)(用超大半径,较小角度画圆弧,来实现歪茎效果)
turtle.pensize(3)            # 设置画笔的粗细为3,即茎的粗线为3。默认画笔粗线为1
turtle.right(80)             # 画完球状绒毛后,海龟朝向右,所以要让海龟向右旋转80度后再画茎
turtle.circle(-600,40)       # 半径为负,画在海龟头部方向的右边

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

-----end -----

 

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值