阶段难度:❤❤❤
效果如下:
编一编:
import turtle
import math
turtle.delay(1)
t=turtle.Pen()
#setPen()画笔定位子程序模块是画圆和画五角星模块都要调用到的
def setPen(x,y):
t.penup()
t.goto(x,y)
t.pendown()
t.setheading(0)
#drawCircle()画圆子程序模块
def drawCircle(x,y,r,color):
t.pencolor(color)
t.fillcolor(color)
setPen(x,y-r)
t.begin_fill()
t.circle(r)
t.end_fill()
#画五角星子程序模块
def drawFiveStars(r):
setPen(0,r) #A点坐标为画五角星的起点坐标
t.right(72) #向右转过72度
t.pencolor('whitesmoke')
t.fillcolor("whitesmoke")
t.begin_fill()
for i in range(5):
#线长a =r*2*cos(18°) =120*2*cos(18°) =240*0.951 =228
#18*math.pi/180 为了将角度转换为弧度
t.forward(r*2*math.cos(18*math.pi/180))
t.right(144)
t.end_fill()
#drawShield()画盾牌子程序模块
def drawShield():
drawCircle(0,0,240,'red')#四个以O(0,0)圆心的同心圆
drawCircle(0,0,200,'white')
drawCircle(0,0,160,'red')
drawCircle(0,0,120,'blue')#最里面的小圆半径为120
drawFiveStars(120) #五角星的内接圆半径为120
#采用“模块化”设计方案。if __name__=='__main__' 为主程序入口
if __name__=='__main__':
drawShield()
turtle.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部分,案例源自于网络,经本人多次整理修改优化,尽量通俗易懂。
后期将继续更新代码,请持续关注!