python09 - 海龟画图
turtle是python的内置模块,不用进行额外的安装操作
一:画笔的移动指令
语法 | 说明 |
---|---|
turtIe.forward(distance) | 画笔向前运动 |
turtIe.backward(distance) | 向后运动,但是海龟的朝向不变,可以想象是稍着走 |
turtIe.right(angIe) | 向右旋转angIe度 |
turtIe.left(angIe) | 向左旋转angIe度 |
turtIe.goto(x,y) | 将画笔直接移动到(x, y)这个位置 |
turtIe.seth(angIe) | 设置画笔的朝向是angIe度 |
turtIe.home() | 将画笔移回原点(有轨迹),到原点才会朝向东 |
turtIe.dot(size) | 绘制一个直径为size的圆点 |
turtIe.circIe® | 画圆,半径为正(负),表示逆(顺)时针画圆 |
turtIe.circIe(r, angIe) | 画一个半径为r,角度为angIe的弧 |
⚠️ 注意turtIe.backward(distance)
和turtle.home()
的说明,比较特别
import turtle
def draw_pen():
turtle.fd(80) # 向前80像素
turtle.right(90) # 向右旋转90度
turtle.fd(60) # 然后朝着指针的方向,向前60像素
turtle.home() # 回到起始点,然后回到起始点之后,箭头指向东
turtle.done()
if __name__ == '__main__':
draw_pen()
二:画笔的控制指令
方法 | 说明 |
---|---|
turtle.pencolor() | 设置画笔的颜色 |
turtle.fillcolor() | 设置填充颜色 |
turtle.color(coIor1,coIor2) | 同时设置pencolor=color1,fillcolor=color2 |
turtle.pensize(width) | 设置画笔的粗细 |
turtle.begin_fill() | 开始填充 |
turtle.end_fill() | 结束填充 |
turtle.penup()/turtle.pu() | 抬笔 |
turtle.pendown()/turtle.pd() | 落笔 |
turtle.hideturtle() | 隐藏画笔(eg:箭头)只有线轨迹 |
turtle.showturtle() | 显示画笔(eg:箭头)包括线轨迹 |
- turtle.pu() 抬起画笔,是没有轨迹的
- turtle.pd() 落下画笔,是有轨迹的
三:画笔的其他指令
方法 | 说明 |
---|---|
turtle.speed(speed) | 设置画笔的移动的速度,0最快,1 ~ 10由慢到快 |
turtle.done() | 永远是海龟画图的最后一句,表示画图结束 |
turtle.tracer(False) + turtle.update() | 瞬间完成绘画过程,禁用动画 |
turtle.setup(width=?? height=??) | 设置画布的宽度和高度 |
turtle.bgcolor(color) | 设置背景颜色 |
turtle.pos() | 获取画笔的坐标 |
turtle.done()说明
暂停程序,但窗口但绘图窗体不关闭,直到用户手动关闭窗口或按下键盘上的任意键。
目的是给用户时间来查看绘制的图形,否则图形窗口会在程序完成后立即关闭
四:海龟画图的技巧
海龟画图的指令并不是很多,关键是画图时思路要清晰,知道箭头现在指向哪里,什么时候抬笔什么时候落笔
1:画圆和画弧的说明
画圆或弧时,轨迹都是从圆的边上点(eg:O点)开始进行的,而不是从圆中心开始画起轨迹的
半圆的弧是有轨迹的,但是半圆不是封闭的;若想要封闭需要另画一个轨迹)
-
找到基本图形
-
控制好画笔的初始角度
-
找出基本图形的数量
-
确定每个基本图形之间,需要旋转的角度
- 旋转的角度=初始方向到下一个图形的初始方向
- 或者旋转的角度=基本图形的最后一个方向到下一个图形的初始方向
import turtle
def draw_pen():
turtle.speed(1)
turtle.fd(80)
turtle.right(90)
turtle.fd(60)
turtle.home()
turtle.circle(100) # 绘制一个半径为100的圆
turtle.circle(-100) # 绘制一个半径为100的圆
turtle.seth(90) # 设置画笔方向为0度
turtle.fd(100)
turtle.done()
if __name__ == '__main__':
draw_pen()
def draw_arc_line():
turtle.tracer(False) # 绘制时,不显示,绘制完成之后,再显示
turtle.circle(50, 180) # 绘制一个半径为50的圆,旋转180度 - 半圆,弧形
turtle.seth(90) # 设置画笔方向为90度
turtle.circle(50, 180) # 绘制一个半径为50的圆,旋转180度 - 半圆,弧形
turtle.seth(180) # 画笔方向为180度
turtle.circle(50, 180) # 绘制一个半径为50的圆,旋转180度 - 半圆,弧形
turtle.update() # 显示,相当于直接完成,不显示动画轨迹
turtle.done() # 结束绘制
2:循环类画图
-
找到基本图形
-
控制好画笔的初始角度
-
找出基本图形的数量
-
确定基本图形的起始点(可能会改变画笔角度和位置)
import turtle
控制画笔初始角度
循环n次:
画基本图形
调整画笔位置和角度
turtle.done()
import turtle
# 绘制n角形,n只能为奇数
def draw_n_angle(n, r):
for i in range(n):
turtle.forward(r)
turtle.right(180 - 180 / n)
turtle.done()
if __name__ == '__main__':
draw_n_angle(5, 100)
import turtle
# 绘制n边形
def draw_n_square(n, r):
for i in range(n):
turtle.forward(r)
turtle.right(360 / n)
turtle.done()
if __name__ == '__main__':
draw_n_square(6, 100)
熟悉之后,就可以做出美丽的图形了
import turtle
def draw_color():
turtle.hideturtle()
turtle.tracer(False)
turtle.pensize(3)
colors = ["red", "yellow", "blue", "green"]
for i in range(4):
turtle.begin_fill()
turtle.color(colors[i], colors[(i + 1) % 4]) # turtle.color(colors[i])等同于turtle.pencolor(colors[i])
turtle.right(90)
for j in range(4):
turtle.forward(50)
turtle.right(90)
# 从一个起点到另一个起点的行走步骤要相同
turtle.penup()
turtle.forward(50)
turtle.right(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.pendown()
turtle.end_fill()
turtle.update()
turtle.done()
if __name__ == '__main__':
draw_color()