学习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()  #为了让窗口一直处在可见的状态

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


绘制科赫雪花

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() #为了让窗口一直处在可见的状态

运行结果为:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱前端的杨同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值