阶段难度:❤❤❤
效果如下:
编一编:
import turtle as t
import math
rads=[200,160,120,80]
colors=['red','white','red','blue']
rad2s=[80,40,20]
color2s=['white','yellow','red']
def init():
t.shape("turtle")
t.width(3)
#画笔定位子程序模块是画圆和画五角星模块都要调用到的
def set_pos(y):
t.pu()
t.sety(y)
t.pd()
#drawCircle()画圆子程序模块
def draw_circle(c,r):
t.color(c)
t.begin_fill()
t.circle(r)
t.end_fill()
#画五角星子程序模块
def draw_fivestar(c,r):
t.color(c)
t.seth(-72) # 90-18=72 原理同前
t.begin_fill()
for i in range(5):
t.fd(2*r*math.cos(18*math.pi/180)) # 2*80*cos(18)=152.2 原理同前 cos(18)=0.951
t.right(144)
t.end_fill()
#drawShield()画盾牌子程序模块
def drawShield():
for i in range(4):
set_pos(-rads[i])
draw_circle(colors[i],rads[i])
for i in range(3):
set_pos(rad2s[i])
draw_fivestar(color2s[i],rad2s[i])
#采用“模块化”设计方案。if __name__=='__main__' 为主程序入口
if __name__=='__main__':
#调用
init()
drawShield()
#隐藏画笔
t.ht() #t.hideturtle()的简写
t.done()
效果图:
读一读:
这个案例采用自定义函数,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
if __name__=='__main__' 为主程序入口,调用drawShield()画盾牌子程序模块,drawShield()去调用drawCircle()画圆子程序模块4次(红白红蓝)和drawFiveStar()画五角星子程序模块1次,setPen()画笔定位子程序模块是画圆和画五角星模块都要调用到的。
五角星数学原理:
结论:a=2rcos(18°)
应用:t.forward(r*2*math.cos(18*math.pi/180))
turtle.circle(r,angle) ,表示以海龟当前位置,距离海龟r距离的左侧某一个点为圆心,进行angle角度(默认angle=360)大小的曲线运行,所以如果让圆心仍保持在(0,0)位置,则要让笔的纵坐标下移r,即setPen(x,y-r)。如下图所示:
应用:setPen(x,y-r)
应用:t.right(72) t.right(144)
上述内容属于Python基础知识--海龟绘图--第4部分,案例源自于网络,经本人多次整理修改优化,尽量通俗易懂。
后期将继续更新代码,请持续关注!