Turtle库是Python语言中一个很流行的绘制图像的函数库, 想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

python画出空间直角坐标系并指定坐标原点 用python画坐标系_ci

1、基础概念

画布

画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置。 常用的画布方法有两个:screensize()和setup()。 turtle.screensize(canvwidth=None, canvheight=None, bg=None) 参数分别为画布的宽(单位像素), 高, 背景颜色, 如: turtle.screensize(800, 600, "green") turtle.screensize() #返回默认大小(400, 300) turtle.setup(width=0.5, height=0.75, startx=None, starty=None), 参数: w idth, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例 (startx, starty): 这坐标表示矩形窗口左上角顶点的位置, 如果为空则窗口位于屏幕中心 画笔

在画布上,默认有一个坐标原点为画布中心的坐标轴, 坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:标原点(位置),面朝x轴正方向(方向),turtle绘图中, 就是使用位置方向描述小乌龟(画笔)的状态。 (1)画笔的属性 画笔有颜色、画线的宽度等属性。 1)  turtle.pensize() :设置画笔的宽度; 2)  turtle.pencolor() :没有参数传入返回当前画笔颜色;传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。     >>> pencolor('brown')     >>> tup = (0.2, 0.8, 0.55)     >>> pencolor(tup)     >>> pencolor()     '#33cc8c' 3)  turtle.speed(speed) :设置画笔移动速度,画笔绘制的速度范围[0,10]整数, 数字越大越快 绘图命令

操纵海龟绘图有着许多的命令,这些命令可以划分为3种:运动命令,画笔控制命令和全局控制命令

画笔运动命令:

turtle.forward(distance)

向当前画笔方向移动distance像素长

turtle.backward(distance)

向当前画笔相反方向移动distance像素长度

turtle.right(degree)

顺时针移动degree°

turtle.right(degree)

顺时针移动degree°

turtle.pendown()

移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)

将画笔移动到坐标为x,y的位置

turtle.penup()

移动时不绘制图形,提起笔用于另起一个地方绘制时用

turtle.speed(speed)

画笔绘制的速度范围[0,10]整数

turtle.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

画笔控制命令:

turtle.pensize(width)

绘制图形时的宽度

turtle.pencolor()

画笔颜色

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成;

turtle.hideturtle()

隐藏箭头显示;

turtle.showturtle()

与hideturtle()函数对应

全局控制命令

turtle.clear()

清空turtle窗口,但是turtle的位置和状态不会改变

turtle.reset()

清空窗口,重置turtle状态为起始状态

turtle.undo()

撤销上一个turtle动作

turtle.isvisible()

返回当前turtle是否可见

stamp()

复制当前图形

turtle.write(s[,font=("font-name",font_size,"font_type")])

写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项

2、安装步骤主要如下:


1、手动下载turtle 0.0.2包后,解压到本地,修改setup.py文件再安装。打开setup.py文件,第40行修改为except (ValueError, ve):  原来的是Python2的写法,没有括号,加了括号之后Python3就能用了。

2、用pip3安装修: pip install -e D:\turtle-0.0.2 -e后面接上我们修改过setup.py文件的目录。 3、过程中会报错 Failed building wheel for Twisted,需要我们自己下载Twisted,然后安装。一定要选择适合自己Python以及系统的Twisted版本,比如我的Python版本是3.7,系统是64位。那么在http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载好Twisted-19.10.0-cp37-cp37m-win_amd64.whl文件之后,cd到下载文件夹。pip install D:\Twisted-19.10.0-cp37-cp37m-win_amd64.whl。 4、重新执行步骤2 接下来试着画画玫瑰花: 示例1:玫瑰


import turtleimport time# 设置初始位置turtle.penup()turtle.left(90)turtle.fd(200)turtle.pendown()turtle.right(90)# 花蕊turtle.fillcolor("red")turtle.begin_fill()turtle.circle(10,180)turtle.circle(25,110)turtle.left(50)turtle.circle(60,45)turtle.circle(20,170)turtle.right(24)turtle.fd(30)turtle.left(10)turtle.circle(30,110)turtle.fd(20)turtle.left(40)turtle.circle(90,70)turtle.circle(30,150)turtle.right(30)turtle.fd(15)turtle.circle(80,90)turtle.left(15)turtle.fd(45)turtle.right(165)turtle.fd(20)turtle.left(155)turtle.circle(150,80)turtle.left(50)turtle.circle(150,90)turtle.end_fill()# 花瓣1turtle.left(150)turtle.circle(-90,70)turtle.left(20)turtle.circle(75,105)turtle.setheading(60)turtle.circle(80,98)turtle.circle(-90,40)# 花瓣2turtle.left(180)turtle.circle(90,40)turtle.circle(-80,98)turtle.setheading(-83)# 叶子1turtle.fd(30)turtle.left(90)turtle.fd(25)turtle.left(45)turtle.fillcolor("green")turtle.begin_fill()turtle.circle(-80,90)turtle.right(90)turtle.circle(-80,90)turtle.end_fill()turtle.right(135)turtle.fd(60)turtle.left(180)turtle.fd(85)turtle.left(90)turtle.fd(80)# 叶子2turtle.right(90)turtle.right(45)turtle.fillcolor("green")turtle.begin_fill()turtle.circle(80,90)turtle.left(90)turtle.circle(80,90)turtle.end_fill()turtle.left(135)turtle.fd(60)turtle.left(180)turtle.fd(60)turtle.right(90)turtle.circle(200,60)time.sleep(3)

python画出空间直角坐标系并指定坐标原点 用python画坐标系_ci_02

示例2:樱花树

from turtle import *from random import *from math import *def tree(n,l):    pd()#下笔    #阴影效果    t = cos(radians(heading()+45))/8+0.25    pencolor(t,t,t)    pensize(n/3)    forward(l)#画树枝    if n>0:        b = random()*15+10 #右分支偏转角度        c = random()*15+10 #左分支偏转角度        d = l*(random()*0.25+0.7) #下一个分支的长度        #右转一定角度,画右分支        right(b)        tree(n-1,d)        #左转一定角度,画左分支        left(b+c)        tree(n-1,d)        #转回来        right(c)    else:        #画叶子        right(90)        n=cos(radians(heading()-45))/4+0.5        pencolor(n,n*0.8,n*0.8)        circle(3)        left(90)        #添加0.3倍的飘落叶子        if(random()>0.7):            pu()            #飘落            t = heading()            an = -40 +random()*40            setheading(an)            dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)            forward(dis)            setheading(t)            #画叶子            pd()            right(90)            n = cos(radians(heading()-45))/4+0.5            pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)            circle(2)            left(90)            pu()            #返回            t=heading()            setheading(an)            backward(dis)            setheading(t)    pu()    backward(l)#退回bgcolor(0.5,0.5,0.5)#背景色ht()#隐藏turtlespeed(0)#速度 1-10渐进,0 最快tracer(0,0)pu()#抬笔backward(100)left(90)#左转90度pu()#抬笔backward(300)#后退300tree(12,100)#递归7层done()

python画出空间直角坐标系并指定坐标原点 用python画坐标系_ci_03

示例3:

import turtle# 画指定的任意圆弧def arc(sa, ea, x, y, r):  # start angle,end angle,circle center,radius    turtle.penup()    turtle.goto(x, y)    turtle.setheading(0)    turtle.left(sa)    turtle.fd(r)    turtle.pendown()    turtle.left(90)    turtle.circle(r, (ea - sa))    return turtle.position()turtle.hideturtle()# 画脸turtle.speed(5)turtle.setup(900, 600, 200, 200)turtle.pensize(5)turtle.right(90)turtle.penup()turtle.fd(100)turtle.left(90)turtle.pendown()turtle.begin_fill()turtle.pencolor("#B26A0F")  # head side colorturtle.circle(150)turtle.fillcolor("#F9E549")  # face colorturtle.end_fill()# 画嘴turtle.penup()turtle.goto(77, 20)turtle.pencolor("#744702")turtle.goto(0, 50)turtle.right(30)turtle.fd(110)turtle.right(90)turtle.pendown()turtle.begin_fill()turtle.fillcolor("#925902")  # mouth colorturtle.circle(-97, 160)turtle.goto(92, -3)turtle.end_fill()turtle.penup()turtle.goto(77, -25)# 画牙齿turtle.pencolor("white")turtle.begin_fill()turtle.fillcolor("white")turtle.goto(77, -24)turtle.goto(-81, 29)turtle.goto(-70, 43)turtle.goto(77, -8)turtle.end_fill()turtle.penup()turtle.goto(0, -100)turtle.setheading(0)turtle.pendown()# 画左边眼泪turtle.left(90)turtle.penup()turtle.fd(150)turtle.right(60)turtle.fd(-150)turtle.pendown()turtle.left(20)turtle.pencolor("#155F84")  # tear side colorturtle.fd(150)turtle.right(180)position1 = turtle.position()turtle.begin_fill()turtle.fillcolor("#7EB0C8")  # tear colorturtle.fd(150)turtle.right(20)turtle.left(270)turtle.circle(-150, 18)turtle.right(52)turtle.fd(110)position2 = turtle.position()turtle.goto(-33, 90)turtle.end_fill()# 画右边眼泪turtle.penup()turtle.goto(0, 0)turtle.setheading(0)turtle.left(90)turtle.fd(50)turtle.right(150)turtle.fd(150)turtle.left(150)turtle.fd(100)turtle.pendown()turtle.begin_fill()turtle.fd(-100)turtle.fillcolor("#7EB0C8")  # tear colorturtle.right(60)turtle.circle(150, 15)turtle.left(45)turtle.fd(66)turtle.goto(77, 20)turtle.end_fill()# 画眼睛turtle.penup()turtle.pencolor("#6C4E00")  # eye colorturtle.goto(-65, 75)turtle.setheading(0)turtle.left(27)turtle.fd(38)turtle.pendown()turtle.begin_fill()turtle.fillcolor("#6C4E00")  # eye colorturtle.left(90)turtle.circle(38, 86)turtle.goto(position2[0], position2[1])turtle.goto(position1[0], position1[1])turtle.end_fill()# 画手turtle.pencolor("#D57E18")  # hand side colorturtle.begin_fill()turtle.fillcolor("#EFBD3D")  # hand color# 第一个手指arc(-110, 10, 110, -40, 30)turtle.circle(300, 35)turtle.circle(13, 120)turtle.setheading(-50)turtle.fd(20)turtle.setheading(130)# 第二个手指turtle.circle(200, 15)turtle.circle(12, 180)turtle.fd(40)turtle.setheading(137)# 第三个手指turtle.circle(200, 16)turtle.circle(12, 160)turtle.setheading(-35)turtle.fd(45)turtle.setheading(140)# 第四个手指turtle.circle(200, 13)turtle.circle(11, 160)turtle.setheading(-35)turtle.fd(40)turtle.setheading(145)# 第五个手指turtle.circle(200, 9)turtle.circle(10, 180)turtle.setheading(-31)turtle.fd(50)# 画最后手腕的部分turtle.setheading(-45)turtle.pensize(7)turtle.right(5)turtle.circle(180, 35)turtle.end_fill()turtle.begin_fill()turtle.setheading(-77)turtle.pensize(5)turtle.fd(50)turtle.left(-270)turtle.fd(7)turtle.pencolor("#EFBD3D")turtle.circle(30, 180)turtle.end_fill()# 测试# res=arc(70,220,90,50,300)# print(res[0],res[1])turtle.done()

python画出空间直角坐标系并指定坐标原点 用python画坐标系_ci_04