- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-4000
10.4.2 模拟时钟
钟表是一种计时的装置,也是计量和指示时间的精密仪器。钟表的样式千变万化,但是用来显示时间的表盘相差无几,大多数钟表表盘的样式由刻度(共60个,围成圆形)、指针(时针、分针和秒针)、周日期显示和日期显示组成,如下图所示。
钟表表盘结构图
图中的表盘中有三根指针:时针、分针、秒针,它们的一端被固定在表盘中心,另一端按照顺时针的方向围着表盘中心位置旋转。表盘中位于中心顶部的点对应的刻度是12,此刻度所处的位置是所有指针的起始点,秒针每旋转一周分针移动一个刻度,分针每旋转一周时针移动5个刻度。
本案例要求绘制钟表表盘结构图中的钟表,并使钟表的日期、周日期、时间跟随本地时间实时变化。
实例目标
通过完成本实例,读者应掌握以下知识或技能:
了解turtle模块的基本使用。
实例分析
钟表的模拟程序可以分为外观绘制和时间与日期处理两个任务,其中,外观绘制的任务可以细分为绘制表盘刻度、绘制指针和绘制日期显示文本三个子任务,处理日期的任务可以细分为处理日期和处理周日期两个子任务。所有的子任务封装成独立的函数,每个函数的功能说明如下。
setup_clock()函数:绘制钟表的刻度。
init()函数:程序初始化设置,包括绘制三个表针、日期显示和周日期显示文本。
week()函数:以指定的格式返回周日期。
day()函数:以指定的格式返回日期。
tick()函数:实现钟表的动态绘制。
main()函数:程序执行的起点。
此外还包括以下两个函数,它们是为了复用代码而设计的,功能如下。
skip()函数:使指定画笔移动指定的距离。
make_hand()函数:注册Turtle形状,建立名字为name的形状。
绘制动态的钟表需要创建五个Turtle对象,包括1个表示钟表表盘刻度的对象、3个表示钟表的时针、分针和秒针的对象和1个用于显示日期与周日期的表盘对象。
代码实现
下面分别设计程序中的各个函数。
(1)skip()函数
skip()函数的功能是将画笔移动指定的距离,它包含了抬起画笔、移动画笔和落下画笔三个固定的步骤。绘制刻度时,无论是绘制线段还是圆点,都会涉及到画笔的移动,为了避免多个位置出现重复的代码,所以设计了skip()函数。skip()函数的定义如下所示:
def skip(step):
将画笔移动到指定的距离
penup()
forward(step)
pendown()
(2)setup_clock()函数
setup_clock()函数的功能是绘制钟表的刻度。该函数在绘制钟表刻度时,以钟表的中心为起始点,从中心位置开始移动画笔到指定的位置落笔,绘制完线段或圆点之后再次回到中心点,改变画笔的角度,移动画笔到指定的位置落笔绘制下一个刻度。setup_clock()函数的定义如下所示:
def setup_clock(radius):
建立钟表的外框
reset()
pensize(7) # 设置画笔线条的粗细
for i in range(60):
skip(radius) # 在距离圆心为r的位置落笔
if i%5==0: # 若能整除5,则画一条短直线
forward(20)
skip(-radius-20)
else: # 否则画点
dot(5)
skip(-radius)
right(6)
以上函数中使用for-in语句控制循环执行60次,绘制60个刻度,通过if-else语句区分了画短线与圆点两种情况:若能整除5则画短线,否则就画圆点。
(3)make_hand()函数
make_hand()函数的功能是注册Turtle形状。钟表中的三个指针长度不同,但形状相似。为了防止冗余,使用make_hand()函数实现直线的绘制功能。make_hand()函数的定义如下所示:
def make_hand(name,length):
注册turtle形状,建立名字为name的形状
reset()
skip(-0.1*length)
# 开始记录多边形的顶点
begin_poly()
forward(1.1*length)
# 停止记录多边形的顶点,并与第一个顶点相连
end_poly()
# 返回最后记录的多边形
handFor
您可能关注的文档
- 大学生就业指导 1-2 熟悉就业制度与政策(54).pptx
- 大学生就业指导 2-1 建立生涯意识(45).pptx
- 大学生就业指导 2-2 全面探索自我--2 兴趣(50).pptx
- 《汽车保险与理赔》第3版课件5-2 车损险理赔实例.pptx
- 《汽车保险与理赔》第3版课件5-3 汽车三责险理赔实例 .pptx
- 《汽车保险与理赔》第3版课件5-4 我国汽车其他保险理赔实例.pptx
- 《汽车保险与理赔》第3版课件5-5 汽车保险欺诈实例.pptx
- 《汽车保险与理赔》课程PPT---4.1 汽车保险事故索赔新 - 副本.pptx
- 《汽车保险与理赔》课程PPT---4.2 汽车保险事故定损与核损新.pptx
- 《汽车保险与理赔》课程PPT---4.3 汽车保险事故理赔新.pptx
- 人工智能助力下的初中物理教学共同体构建研究教学研究课题报告.docx
- 数字化时代下教师教学画像构建中的教育心理学理论应用与教学效果分析教学研究课题报告.docx
- DIS实验在高中物理教学中的创新与实践研究教学研究课题报告.docx
- 初中物理课堂中社会网络传播模型的构建与物理教育创新教学研究课题报告.docx
- 《基于大数据分析的中小学教师信息化教学能力提升培训效果评估研究》教学研究课题报告.docx
- 商业街物业安全培训课件.ppt
- 中学生物理实验:钙钛矿太阳能电池的制备工艺创新与性能测试教学研究课题报告.docx
- 高中数字化教学管理模式下学校组织文化建设与学校特色发展研究教学研究课题报告.docx
- 高中生学习辅助工具使用现状与校园周边商店服务优化综合评价教学研究课题报告.docx
- 八、建筑行业:建筑垃圾资源化利用技术研究与政策探讨教学研究课题报告.docx
文档评论(0)