• 学习python第7天


    Python绘制图形库turtle

    1.介绍: turtle库根据一组函数指令的控制,在平面坐标系中移动,从而它爬行的路径上绘制图形。
    2.原理:turtle(海龟)由程序控制在画布上游走,走过的轨迹形成绘制的图形,可以变换海龟的颜色和宽度等,这里海龟即画笔。


    1、turtle的绘图窗体布局

    绘图窗体,在操作系统上表现为一个窗口,是turtle的一个画布空间。
    窗口中最小单位是像素。

    例如:绘制一个100单位长度的直线,指100像素长的直线。

    设置启动窗体的位置和大小;
    turtle.setup(width, height, startx, starty)

    参数说明:
    width和height:
      如果是整数,则为像素大小;
      如果是浮点数则为屏幕的百分比。
      width默认为屏幕的50%,
      height默认为屏幕的70%。

    startx和starty:
      如果为正,则为距屏幕左侧或顶部的像素长度;
      如果为负,则为举例屏幕右侧或底部的像素长度;
      如果为None,则水平或垂直居中。


    2、turtle空间坐标体系

      turtle窗体内部的空间坐标体系,包含绝对坐标海龟坐标

    2.1 绝对坐标

    画布的正中心作为绝对坐标的(0,0)。
    窗体的右方向为x轴,上方向为y轴,构成绝对标系。

    在这里插入图片描述
    相关函数:
    turtle. goto(x, y) 该函数是让任意位置的海龟,到达指定位置


    2.2 海龟坐标

      无论海龟朝向什么方向,海龟当前行进方向都叫前进方向,反方向是后退方向,左侧是左侧方向,右侧是右侧方向。

    在这里插入图片描述
    相关函数:
    turtle.fd(d),前进d像素距离;
    turtle.bk(d),后退d像素距离,海龟方向不变;
    turtle.circle(r, angle),以海龟左侧为原点,半径为r像素,行进angle度圆形弧度,并且海龟方向改变angle度,如果没有angle,行进一个完整的圆。

    注意: d、r、 angle允许负数,意为反方向。


    3、角度坐标系

    分为绝对角度海龟角度

    3.1 绝对角度

    x正轴表示0度或360度
    y正轴表示90度或-270度
    x负轴表示180度或-180度
    y负轴表示270度或-90度

    在这里插入图片描述
    相关函数:
    turtle.seth(angle)   用于改变海龟行进方向,只改变方向不行进


    3.2 海龟角度

    使用左右的方式来改变行进角度。

    相关函数:
    turtle.left(angle)  向左改变行进方向
    turtle.right(angle) 向右改变行进方向


    4、turtle的RGB色彩体系

      采用计算机最常见的RGB色彩体系,取值范围可以是0-255的整数,也可以是0-1的小数。

    常见的RGB色彩表
    在这里插入图片描述
      turtle库默认采用RGB的小数值来表示颜色,也可以使用函数
    turtle.colormode(mode)切换RGB数值模式。

      当mode为1.0时,表示采用·小数值·来表现RGB。
      当mode为255时,表示采用·整数值·来表现RGB。

    与颜色设置相关的函数:
    turtle.color()
    turtle. pencolor()
    turtle.fillcolor()


    科赫曲线的生成

    步骤:
    1.将线段分成三等份(AC,CD,DB)
    2.以CD为底,向外(内外随意)画一个等边三角形DMC3.将线段CD移去,如图4-1-9所示
    4.分别对AC,CM,MD,DB重复1~3
    科赫雪花是以等边三角形三边生成的科赫曲线组成的。

    在这里插入图片描述
    在这里插入图片描述

    import turtle
    turtle.color('Blue')  #设置turtle的颜色为蓝色  默认是黑色
    turtle.setup(800,500) #设置窗口的初始化大小
    turtle.penup() #把画笔开启
    turtle.goto(-300,100) #移动绘制曲线的位置,从(-300,100)这个坐标开始进行绘制
    turtle.pendown() #把画笔移动到指定位置后,再把画笔放下  目的是保证我们移动画笔的过程当中,在我们窗口上不要留下痕迹
    turtle.pensize(3) #设置画笔的尺寸 粗细
    a = [0,60,-120,60]#定义一个角度的列表,主要用来帮助我们绘图的时候海龟的一个移动方向
    # 0表示开始的绘制方向(黄色线段),60表示往左旋转60度(绿色线段),-120表示在绿色线段方向的基础上
    # 向左旋转-120度(紫色线段) 60表示向左转60度绘制红色线段
    def koch(len,n,anglelist):  #绘制曲线每条边的长度,绘制曲线的阶数,转换的角度列表
       '''
        绘制N阶科赫曲线
       :param len: 边长
       :param n:阶数
       :param anglelist:角度列表
       :return: NULL
       '''
       if n == 0:
           turtle.fd(len)  #当n等于0时直接绘制一条直线
       else:
           for angle in anglelist: #根据旋转的角度绘制
               turtle.left(angle) #向左转
               koch(len/3,n-1,anglelist)#每次绘制都会变为原来的1/3
    koch(300,3,a)
    turtle.penup() #绘制完曲线后要改变初始位置,不然曲线会重叠
    turtle.goto(-300,0)
    turtle.pendown()
    koch(300,4,a) #边长为300 绘制一个4阶的科赫曲线
    turtle.penup()
    turtle.goto(-300,-100)
    turtle.pendown() #5阶的科赫曲线
    koch(300,5,a)
    turtle.done()  #为了让窗口一直处在可见的状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    运行结果为:
    在这里插入图片描述


    绘制科赫雪花

    import turtle
    turtle.color('Blue') #画笔颜色设置为蓝色
    turtle.setup(800,500) #设置主窗体大小
    turtle.penup() #抬起画笔
    turtle.goto(-300,100) #移动坐标
    turtle.pendown() #落下画笔
    turtle.pensize(3) #设置画笔尺寸
    anglelist=[0,60,-120,60] #转换角度列表
    
    #定义一个科赫曲线
    def koch(len,n): #因为转换的角度,实际上每次都是一样的,没有发生变化,所以可以不用参数,直接进行传递,作为一个全局变量来使用
        '''
        绘制科赫曲线
        :param len:边长
        :param n: 阶数
        :return: NULL
        '''
        if n == 0:#当阶数为0时画一条直线
            turtle.fd(len)
        else: #否则从角度列表里面取出来,每次进行角度的转换
            for angle in anglelist:
                turtle.left(angle)
                koch(len/3,n-1)#每次进行分解时,要把他的边长缩小要除以3,阶数每次减1
    
    # 调用科赫曲线函数
    koch(300,3)  #这时候画出来的时科赫曲线的一条边
    # 三条边组成一个科赫雪花 每次绘制完一条曲线后,让它旋转120度,然后绘制吓一跳曲线,最后三条曲线连在一起成科赫雪花
    turtle.right(120) #向右旋转120度后
    koch(300,3) #再绘制一次曲线
    turtle.right(120) #向右旋转120度后
    koch(300,3) #再绘制一次曲线
    turtle.done() #为了让窗口一直处在可见的状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    运行结果为:

    在这里插入图片描述

  • 相关阅读:
    虚拟化性能优化系列-numatune
    远程重启电脑
    zotero卸载不了占用了71GB……
    Java核心技术卷Ⅰ-第一章Java程序设计概述
    边缘计算发生了什么?
    竖曲线全线计算
    SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.10 表现层标准开发
    http接口测试—自动化测试框架设计
    【Java】想进大厂?你应该知道的算法经典习题(一)
    [附源码]Python计算机毕业设计SSM考勤系统设计(程序+LW)
  • 原文地址:https://blog.csdn.net/m0_55879104/article/details/127796409