前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】

考点:角度旋转、海龟坐标轴以及简单时间绘图算法以及海龟的定时器ontimer【Python习题10】

作者头像
刘金玉编程
发布2021-12-27 08:47:41
1.1K0
发布2021-12-27 08:47:41
举报
文章被收录于专栏:编程创造城市编程创造城市

考点:角度旋转、海龟坐标轴以及简单时间绘图算法【Python习题10】

解析:

  1. 坐标轴的设置使用turtle的mode方法,主要一般使用"logo"以及默认的标准坐标。如下我的画图示意

以上图片画得不够好,请见谅,主要为了说明两个坐标轴的角度和默认方向。 2.角度旋转主要涉及到两个函数,一个是right函数,一个是setheading函数。这里必须要注意的是setheading函数的角度旋转默认是按照坐标系的方向来的,而right函数是按照实际前进方向的左右来的,right函数跟坐标系没有关系了,因为right已经决定了方向是向右的,类似的向左旋转就使用left函数了。

3.这里要注意的是写文字使用了write函数,这个函数在写的位置是当前点的位置的上方开始的,所以会导致数字位置错位,需要人工主动调整时钟的数字位置。

4.时钟要走起来,就要使用时钟来触发,这里我们直接使用turtle的ontimer事件去触发我们每次要刷新的三个指针,注意,这个函数的第一个参数在调用函数的时候,不要写括号;而第二个参数的单位是毫秒。

5.时钟的算法比较简单的,时分秒都使用系统的时间数值,从datetime库中去获取。计算时,因为一圈是360°,所以每一格就是360/60的度数,每次秒中指针的变化就直接按照这个度数乘以秒数即可。分钟指针也是类似于秒钟。不同的是小时指针,因为1小时的度数是360°/12,所以我们只要求出当前已经从0开始经历了多少小时即可知道应该转过的度数。而当前经历的小时数=实际的小时数+分钟所占的小时数,这里的分钟所占的小时数=实际分钟数/60即可。

运行效果如下图:

以上效果源代码:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
"""
@File文件    :   ljytest83
@Time创建时间    :    2021/12/15
@Author作者  :   刘金玉
@Contact联系方式 :   selidev@qq.com   编程创造城市 http://bcczcs.com
注:作者信息请保留!否则必究法律责任!
刘金玉编程,编程创造城市!
作者微信号:selidev
作者抖音号:selidev
作者B站:刘金玉编程
微信公众号:编程创造城市
"""
import turtle  #导入海龟库
import  datetime  #导入时间库

#画表盘函数
def drawPlanet():
    #画圆
    tp = turtle.Pen()
    tp.speed(0.1)
    # tp.dot(5)
    tp.penup()
    tp.forward(100)
    tp.setheading(-90)
    tp.pendown()
    # tp.dot(5)
    tp.circle(100)
    k=0
    #画边线
    for i in range(60):
        tp.penup()
        tp.home()
        tp.right(i*6)
        if i*6%5==0:
            tp.forward(80)
        else:
            tp.forward(90)
        tp.pendown()
        if i * 6 % 5 == 0:
            tp.forward(20)
        else:
            tp.forward(10)
    #数字
    tp.penup()
    tp.home()
    tp.forward(65)
    # tp.pendown()
    tp.setheading(180)
    tp.setpos(tp.pos()[0] - 5, tp.pos()[1]-5)
    tp.write(12)
    for i in range(0,12):
        tp.penup()
        tp.home()
        # tp.pendown()
        tp.right(30 * i)
        tp.forward(65)
        if i!=0:
            tp.setpos(tp.pos()[0]-3,tp.pos()[1]-5)
            tp.write(i)



#画指针函数
def drawPointer():
    global hpt,mpt,spt,tnpt
    cthour=datetime.datetime.now().hour
    ctminite=datetime.datetime.now().minute
    ctsecond=datetime.datetime.now().second
    print(cthour,ctminite,ctsecond)
    spt.clear()

    spt.home()
    spt.dot(5)
    spt.setheading(360/60*ctsecond)
    spt.pendown()
    spt.forward(70)
    spt.penup()

    mpt.clear()
    mpt.home()
    mpt.setheading(360/60*ctminite)
    mpt.pendown()
    mpt.forward(55)
    mpt.penup()

    hpt.clear()
    hpt.home()
    cthour=cthour if cthour<12 else cthour-12
    hpt.setheading(360/12*(cthour+ctminite/60))
    hpt.pendown()
    hpt.forward(40)
    hpt.penup()

    tnpt.clear()
    tnpt.penup()
    tnpt.home()
    tnpt.setheading(0)
    tnpt.forward(110)
    tnpt.setheading(90)
    tnpt.write("北京时间:")
    tnpt.forward(60)
    tnpt.pendown()
    tnpt.write(datetime.datetime.now().strftime("%Y{}%m{}%d{} %H:%M:%S").format("年","月","日"))
    turtle.ontimer(drawPointer,100)

turtle.title("刘金玉编程,模拟时钟")  #要记得老刘哦!
turtle.mode("logo")  #坐标轴模式的设置
turtle.tracer(False)  #取消逐步绘制,让其一步到位
drawPlanet()
hpt = turtle.Pen()  # 时钟
mpt = turtle.Pen()  # 分钟
spt = turtle.Pen()  # 秒钟
tnpt=turtle.Pen()#现在时间
drawPointer()
turtle.penup()
turtle.home()
turtle.color("blue")
turtle.write("刘金玉编程")

turtle.hideturtle()
turtle.done()

总结:

本节时钟绘制应该是很重要的知识要点,通过此题的训练,可以达到灵活使用海龟画图的中基本用法,灵活使用坐标轴、定时器,可以为未来绘制动态图形提供逻辑基础。

相关文章:

  1. 考点:列表、输入、元素比较、位置交换【Python习题01】
  2. 考点:自定义函数、引用传值、二位列表的输入输出【Python习题02】
  3. 考点:程序逻辑和调试,类似环形链表结构【Python习题03】
  4. 考点:函数参数传参、求和、奇数、偶数、输入输出、range步长灵活使用【Python习题04】
  5. 考点:最值应用,基本排序法,复杂排序法,sorted函数的灵活运用【Python习题05】
  6. 考点:深度拷贝、zip函数的压缩与解压包【Python习题06】
  7. 考点:猴子分桃问题,程序员可以将数学逻辑思维转换为编程思维【Python习题07】
  8. 考点:星号的巧妙使用方式,包含计算、传参【Python习题08】
  9. 考点:海龟画图turtle库的使用,绘制五角星、矩形等【Python习题09】
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程创造城市 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档