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

Python Turtle 绘图[难度2星]:浪漫蒲公英(3种画法3种难度层层递进)北京冬奥会开幕式上除了 中国结 雪花外 还有一个浪漫元素就是蒲公英 受此启发 我在网上搜索到蒲公英的简笔画 选了几个 python 绘图容易实现的简笔画作为参考 绘制出了以下三种蒲公英 图 1 的蒲公英绒毛顶端是圆点 图 2 绒毛顶端是圆形光束 图 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 -----

 

小讯
上一篇 2025-02-25 10:07
下一篇 2025-04-03 22:18

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15375.html