0
点赞
收藏
分享

微信扫一扫

Python Turtle绘图[难度2星]:橡皮筋球体(颜色交叉/颜色分层)

WikongGuan 2022-03-24 阅读 52
python

 

我喜欢turtle绘图,因为代码一点点的改动,总会带来意想不到的惊喜。

一些让我心动过的案例,分享给大家,也珍藏给自己。

——Python教学路上的爬行者


   案例1   
   橡皮筋球体(颜色交叉)   

 【效果预览】 

上图中边数为6

 上图中边数为9

  上图中边数为11

  上图中边数为12

只改动了一个数字,却带给我们意想不到的惊喜

 【代码参考】 

# 案例1:橡皮筋球体(颜色交叉)
# 只是在【多边形螺旋线(案例1)】代码基础上增加了一行代码而已。
# 注意27行代码,turtle.left(90),仅仅这一行代码,就使得“多边形螺旋线”代码的效果发生了巨变。
import turtle           # 导入turtle 库
turtle.bgcolor('black') # 设置背景颜色为black

turtle.speed(0)         # 设置海龟的绘图速度为0,最快。
turtle.delay(0)         # 设置海龟绘图的延迟时间为0,绘图速度会更快。
                        # 如果将speed()的参数设置为0后,绘图速度还是觉得慢,就要使用delay()。

# 定义变量sides,表示多边形的边数。
# 将边数分别改为1,2,3,4,5试试效果。因为是按索引取色,所以sides不能超过6,否则会报错。
# 报错信息是“IndexError:list index out of range ”,翻译为“索引错误:列表索引超出范围”。
sides=6

# 创建颜色列表colors。列表中只有6种颜色,所以边长sides不能超过列表的长度6,
colors=['red','yellow','blue','orange','green','purple']

for x in range(360):    # 循环体要执行360次。
                        # 变量x不仅控制循环次数,还要控制取色、步长和画笔粗细。
    turtle.pencolor(colors[x%sides])  # 设置画笔颜色,将遍历colors列表中的前sides种颜色。
    turtle.forward(x*3/sides+x)       # 设置海龟移动的步长为x*3/sides+x。
    turtle.left(360/sides+1)          # sides=6时,向左旋转61度,还可尝试其他度数,如+2等。
    #turtle.pensize(9)                # 将画笔粗细设置为固定值9,效果也不错,只是代码功能较弱。
    turtle.width(x*sides/200)         # 等价于turtle.pensize(x*sides/200),
                                      # 画笔的粗细会随着x和sides的改变而改变。
    turtle.left(90)     # 在绘制循环的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
                        # 运行后的结果看上去像是一个几何玩具,或者是用彩色的橡皮筋制作的球体。

turtle.hideturtle( )    # 隐藏海龟

【重难点突破】 

turtle.left(90)

仅仅这一行代码,就使得“多边形螺旋线”的代码效果发生了巨变。具体可参考下面文章中的案例1。

文章链接:turtle绘图案例:多边形螺旋线

turtle.width(x*sides/200)

等价于turtle.pensize(x*sides/200)

就如fd是forward的别名,width也是pensize的别名。

这个提示功能,Python自带的编辑器中没有。我用的是Mu Editor编辑器,这个编辑器非常适合初学者使用。

加大边长,减慢速度!看细节,出真相!

在循环体的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。

多边形螺旋线细节:取消13行代码

橡皮筋球体细节:增加13行代码

# 【橡皮筋球体】 加大边长减慢速度看细节
# 注意13行代码,代码取消或增加,结果反差巨大。
import turtle
turtle.bgcolor('black')
turtle.speed(2)  # 减慢绘图速度 看细节
sides=6   
colors=['red','yellow','blue','orange','green','purple']
for x in range(9):
    turtle.pencolor(colors[x%sides])
    turtle.forward(30*x)  # 加大步长 看细节
    turtle.left(360/sides+1)
    turtle.pensize(9)
    #turtle.left(90) #该行代码取消或增加,结果反差巨大。
turtle.hideturtle( )

   案例2   

   橡皮筋球体(textinput交互)   

 【效果预览】 

 【代码参考】 

# 案例2:橡皮筋球体(textinput交互)
# 注意27行代码,turtle.left(90),仅仅一行代码,就使得“多边形螺旋线”代码的效果发生了巨变。
# 注意13行代码,实现了textinput交互。
import turtle            # 导入turtle 库
turtle.bgcolor('black')  # 设置背景颜色为black
turtle.speed(0)     # 设置海龟的绘图速度为0,最快
turtle.delay(0)     # 设置海龟绘图的延迟时间为0,绘图速度会更快
                    # 如果将speed()的参数设置为0后,绘图速度还是觉得慢,就要使用delay()。

# 定义变量sides,表示多边形的边数。
# 因为是根据索引取色,所以输入的sides不能超过colors列表的长度,否则会报错。
# 报错信息是“IndexError:list index out of range ”,翻译为“索引错误:列表索引超出范围”。
sides=turtle.textinput("随心所欲控海龟","请输入边数(1~12)")
sides=int(sides)  # textinput()返回的是字符串,无法参与后面的算术运算,所以要用int()将其转换成整数格式。

# 创建颜色列表colors。列表中只有12种颜色,所以边长sides不能超过12,超过12会报错。
colors=['red','yellow','blue','orange','green','purple','red','yellow','blue','orange','green','purple']

for x in range(360):    # 循环体要执行360次。
                        # 变量x不仅控制循环次数,还要控制取色、步长和画笔粗细。
    turtle.pencolor(colors[x%sides])  # 设置画笔颜色,将遍历colors列表中的前sides种颜色。
    turtle.forward(x*3/sides+x)       # 设置海龟移动的步长为x*3/sides+x。
    turtle.left(360/sides+1)          # 举例:sides=6时,向左旋转61度,还可尝试其他度数,如+2等。
    #turtle.pensize(9)                # 将画笔粗细设置为固定值9,效果也不错,只是代码功能较弱。
    turtle.pensize(x*sides/200)       # 等价于turtle.width(x*sides/200)
                                      # 画笔的粗细会随着x和sides的改变而改变
    turtle.left(90)     # 在绘制循环的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
                        # 运行后的结果看上去像是一个几何玩具,或者是用彩色的橡皮筋制作的球体。

turtle.hideturtle( )    # 隐藏海龟

 

 【重难点突破】 

sides=turtle.textinput("随心所欲控海龟","请输入边数(1~12)")

textinput( )的使用方法,请参考下面文章中的案例6。有详解。

文章链接:

turtle绘图案例:螺旋文字(彩色/渐大/交互)icon-default.png?t=M276http://mp.weixin.qq.com/s?__biz=MzIwMjE1MTI4MA==&mid=2247500163&idx=1&sn=45792b3dbd6f737b26060d5b3b77c6bd&chksm=96e1859ca1960c8aa566edb885e90128a37cc03d77de2f52bb88cabf9441c8ff7781f854d04d&scene=21#wechat_redirect

   案例3   

   橡皮筋球体(颜色分层)   

 【效果预览】 

 【代码参考】 

# 案例3:橡皮筋球体(颜色分层)
# 只是在【多边形螺旋线(案例2)】代码基础上增加了一行代码而已。
# 注意29行代码,turtle.left(90),仅仅这一行代码,就使得“多边形螺旋线”代码的效果发生了巨变。
import turtle             # 导入 turtle 库
turtle.bgcolor('black')   # 设置背景颜色为black
turtle.speed(0)           # 设置海龟的绘图速度为0,最快。
turtle.delay(2)           # 设置海龟绘图的延迟时间为0,绘图速度会更快。

# 定义变量sides,表示多边形的边数。
# 在这个代码中,sides可以设置任意正整数。
# 因为没有用到索引,所以输入的sides大于colors列表的长度7,不会报错。
sides=6

# 创建颜色列表colors。列表的长度,就是第一层for循环将要执行的次数。
colors = ['orangered2','tomato','tan3','green1','seagreen','blue','blueviolet']

x = 0      # 变量x控制步长。如果用i控制步长,那每次取色后,步长都会从0开始,海龟画出的将是另一种效果。

for color in colors:        # 变量color控制取色。colors列表中有几种颜色,循环体就要执行几次。
                            # 在这里colors列表中有7种颜色,所以第一层for循环要执行7次。
    turtle.pencolor(color)  # 设置画笔颜色,将遍历colors列表中的每一种颜色。

    for i in range(70):     # 循环体要执行70次。变量i控制循环次数。i将遍历0~69范围中的每一个数字
        x += 1                      # 将变量x增加1
        turtle.forward(x*3/sides+x) # 设置海龟移动的步长为x*3/sides+x。
        turtle.left(360/sides+1)    # 举例:sides=6时,向左旋转61度,还可尝试其他度数,如+2等。
        turtle.pensize(x*sides/350) # 等价于turtle.width(x*sides/200)。width是pensize的别名。
                                    # 画笔的粗细会随着x和sides的改变而改变
        turtle.left(90)     # 在绘制循环的末尾添加一个额外的90°转向,可以扭曲形状,使得角度更加尖锐。
                            # 运行后的结果看上去像是一个几何玩具,或者是用彩色的橡皮筋制作的球体。

turtle.hideturtle( )         # 隐藏海龟

给代码适当的加空行,更便于阅读,

就如写作文分段一样。

 【重难点突破】 

双层for循环(循环嵌套)是个难点,代码的具体分析可参考下面文章中的案例2。

文章链接:turtle绘图案例:多边形螺旋线

   turtle常用指令   

想设置更丰富的颜色,可参考以下两篇文章:

Python专题 | turtle绘图颜色速查表

Python专题 | turtle颜色设置颜色搭配

——end——

举报

相关推荐

0 条评论