python海龟知识点归纳
目录
1、画笔移动命令
2、画笔控制命令
编辑
3、画笔其他命令
4、画笔命令代码
5、海龟基本画图思路
(1)带旋转图案的基本思路
(2)基本画图思路2
(3)n角星画法(只适用于n为奇数的情况)
6、海龟正n边形画法总结
7、海龟画图例题
(1)例题:完成3-9边型所形成的图案
(2)例题:完成3-7边型的依次旋转形成的图案
(3)例题:填充颜色案例
(4)例题:田字格图案
(5)例题:画立体十字图行
(6)例题:画四个小旗子
(7)例题:四个正方形形成的十字图案
a:画由四个正方形形成的十字图案
b:四个正方形形成的十字图案进行填充颜色(注意其中填充造成的问题)
(8)例题:由正八边形和八个长方形组成的米字图案
(9)例题:正方型绕中心旋转45°得到两个正方型
(10)例题:画出随机五个五角星
(11)例题:12个三角形组成的太阳花图案
1、画笔移动命令
2、画笔控制命令
注意1:
turtle.backward(distance) #turtle.bk(distance) #画笔向后移动,但是画笔的方向并没有改变注意2:
turtle.home() 为从上一个点到原点的轨迹画线 即回到原点
使用 home 命令回到原点,绘制计算不了长度的边OA
例如下面的例题2.1:
例题2.1:
import turtle
turtle.fd(80)
turtle.right(91)
turtle.fd(60) #设fd之后的点为A点
turtle.home() #从A点到原点O,形成AO连线
turtle.done()
3、画笔其他命令
turtle.done()
①暂停程序,但窗口但绘图窗体不关闭,直到用户手动关闭窗口或按下键盘上的任意键。
②目的是给用户时间来查看绘制的图形,否则图形窗口会在程序完成后立即关闭。
turtle.tracer(False) #禁用绘图动画,即瞬间完成绘制过程
turtle.update() 与turtle.tracer(False)连用
turtle.pu() 抬起画笔,是没有轨迹的
turtle.pd() 落下画笔,是有轨迹的
turtle.pos() 获得画笔的坐标
4、画笔命令代码
import turtle # 导入海龟库
turtle.setup(width=900,height=900) #画布设置宽高
turtle.bgcolor("red") #设置背景颜色
## 画笔运动命令:
turtle.forward(distance) #turtle.fd(distance) #画笔向前移动
turtle.backward(distance)
#turtle.bk(distance)#注意:画笔向后移动,但是画笔的方向并没有改变
turtle.right(angle) #向右旋转 注意:角度为直接写数字即可 eg:angle=60
turtle.left(angle) #向左旋转
turtle.goto(x,y) #画笔移动位置到x,y
turtle.seth(angle) #画笔朝向: angle=角度 注意:角度为直接写数字即可 eg:angle=100
turtle.home() #将画笔移回原点,朝向东
turtle.dot(size) #画(圆)点: 直径=size
turtle.circle(r) #画圆: r=半径为正(负),表示逆(顺)时针画圆
turtle.circle(r, angle) #画弧: r=半径 angle=角度
turtle.circle(100,180) #逆时针画半圆
turtle.circle(-100,180) #顺时针画半圆
注意:画圆或弧时,都是从圆的边上点开始进行的,不是从圆中心开始画起的
注意:画圆或弧时,轨迹都是从圆的边上点(eg:O点)开始进行的,而不是从圆中心开始画起轨迹的
如下面的例题4.1:
例题4.1
import turtle
for i in range(3):
#每次画半圆时,方向都要朝上
turtle.seth(90)
#顺时针
turtle.circle(-30,180)
turtle.done()
5、海龟基本画图思路
(1)带旋转图案的基本思路
1.找到基本图形
2.控制好画笔的初始角度
3.找出基本图形的数量
4.确定每个基本图形之间,需要旋转的角度
旋转的角度=初始方向到下一个图形的初始方向
或者旋转的角度=基本图形的最后一个方向到下一个图形的初始方向
(2)基本画图思路2
1.找到基本图形
2.控制好画笔的初始角度
3.找出基本图形的数量
4.确定基本图形的起始点(可能会改变画笔角度和位置)
伪代码:
import turtle
控制画笔初始角度
循环n次:
画基本图形
调整画笔位置和角度
turtle.done()
(3)n角星画法(只适用于n为奇数的情况)
import turtle
for i in range(n): #n:表示n角星
turtle.fd(r) #r: n角星的边长
turtle.right(180-180/n) #其中180/n为每个角的角度 #180-180/n为旋转的度数
turtle.done()
6、海龟正n边形画法总结
import turtle
for i in range(n): #n:表示正n边形
turtle.fd(a) #a:正n边形的边长
turtle.right(360/n) #等同于turtle.left(360/n)
turtle.done()
7、海龟画图例题
(1)例题:完成3-9边型所形成的图案
import turtle
turtle.hideturtle()
turtle.tracer(False)
for i in range(3,10):
for j in range(i):
turtle.forward(100)
turtle.right(360/i)
turtle.update()
turtle.done()
(2)例题:完成3-7边型的依次旋转形成的图案
import turtle
turtle.tracer(False)
turtle.seth(180)
for i in range(3,8):
for j in range(i):
turtle.forward(100)
turtle.left(360/i)
turtle.left(360/5)
turtle.update()
turtle.done()
(3)例题:填充颜色案例
如下面的代码:
步骤1:初始化颜色要在画的轨迹之前(也就是一开始的步骤)
turtle.color('red','blue'); 默认是黑色的颜色
步骤2:begin_fill() + 轨迹代码(图形轨迹) + end_fill() 才会成功填充图形的颜色
import turtle
turtle.color('red','blue')
turtle.begin_fill()
turtle.circle(30,180)
turtle.end_fill()
turtle.home()
turtle.done()
代码运行结果:
(4)例题:田字格图案
import turtle
turtle.hideturtle()
turtle.tracer(False)
for i in range(4):
for j in range(4):
turtle.forward(100)
turtle.right(360/4)
turtle.right(360/4)
turtle.update()
turtle.done()
(5)例题:画立体十字图行
import turtle
for i in range(4):
for j in range(3):
turtle.forward(100)
turtle.right(360/4)
turtle.right(180)
turtle.done()
(6)例题:画四个小旗子
import turtle
for i in range(4):
turtle.seth(90)
turtle.forward(60)
for i in range(4):
turtle.forward(40)
turtle.right(90)
turtle.pu()
turtle.backward(60)
turtle.right(90)
turtle.forward(60)
turtle.pd()
turtle.done()
例题补充:填充四个小旗子,并赋予画笔颜色
import turtle
turtle.hideturtle()
turtle.tracer(False)
turtle.pensize(3)
turtle.color("red","green")
for i in range(4):
turtle.begin_fill()
turtle.seth(90)
turtle.forward(60)
for i in range(4):
turtle.forward(40)
turtle.right(90)
turtle.end_fill()
turtle.pu()
turtle.backward(60)
turtle.right(90)
turtle.forward(60)
turtle.pd()
turtle.update()
turtle.done()
(7)例题:四个正方形形成的十字图案
a:画由四个正方形形成的十字图案
运行效果:
提示:黑色圆圈为初始位置
初始位置:从一个起点到另一个起点的行走步骤(移动50像素、右转90度、移动50像素、左转90度、移动50像素、右转90度)是相同的,我们就能使用循环画出这个图形了。
提示:设定初始位置的时候别的方法若不是同一个步骤,就不可以再循环中用。
import turtle
turtle.hideturtle()
turtle.tracer(False)
turtle.pensize(3)
colors=["red","yellow","blue","green"]
for i in range(4):
turtle.color(colors[i]) #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.update()
turtle.done()
b:四个正方形形成的十字图案进行填充颜色(注意其中填充造成的问题)
注意:因为初始位置进行移动,所以填充颜色会有多余
import turtle
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()
(8)例题:由正八边形和八个长方形组成的米字图案
提示:设紫色的为初始位置
初始位置:让初始位置到下一个长方形的初始位置的步骤是相同的
先画正八边形,再画八个长方形
import turtle
turtle.speed(7)
turtle.hideturtle()
turtle.fillcolor("red")
turtle.begin_fill()
for i in range(8):
turtle.fd(20)
turtle.right(360/8)
turtle.end_fill()
turtle.fillcolor("green")
turtle.seth(90)
for j in range(8):
turtle.begin_fill()
for i in range(2):
turtle.fd(50)
turtle.right(90)
turtle.fd(20)
turtle.right(90)
turtle.end_fill()
turtle.pu()
turtle.right(90)
turtle.fd(20)
turtle.left(90)
turtle.right(360/8)
turtle.pd()
turtle.done()
(9)例题:正方型绕中心旋转45°得到两个正方型
提示:
箭头为中心位,因为从中心到正方形的1/2处步骤相同,也就是到初始位置1、初始位置2的步骤相同。
import turtle
import random
a = random.randint(30,100)
colors=["red","green"]
for i in range(2):
#从中心店到正方形右边上1/2处
turtle.pu()
turtle.forward(a/2)
turtle.right(90)
turtle.pencolor(colors[i])
turtle.pendown()
turtle.forward(a/2)
turtle.right(90)
for i in range(3):
turtle.forward(a)
turtle.right(90)
turtle.forward(a/2)
#回到中心点,并旋转45度
turtle.pu()
turtle.right(90)
turtle.forward(a/2)
turtle.left(180)
turtle.left(45)
turtle.pendown()
turtle.done()
(10)例题:画出随机五个五角星
import turtle
import random
turtle.setup(800, 600)
size = random.randint(30,100)
turtle.pensize(5)
turtle.pencolor('red')
count = 0
while count < 5:
lst = []
flag = True
turtle.pu()
x1=random.randint(-400, 400)
y1=random.randint(-300, 300)
turtle.goto(x1,y1)
size = random.randint(30, 100)
#用来判断x,y是否超越画布的前提,把想x,y获取到列表中
for i in range(5):
turtle.fd(size)
turtle.right(180-180/5)
lst.append(turtle.pos())
#判断x,y是否超越画布
for i in lst: # 注意:i为x,y的坐标,即i[0]为x,i[1]为y
if i[0]<-400 or i[0]>400 or i[1]<-300 or i[1]>300:
flag = False
break
#没有超过即画五角星
if flag:
turtle.pd()
#画五角星
for i in range(5):
turtle.fd(size)
turtle.right(180-180/5)
count += 1
print(lst)
turtle.done()
(11)例题:12个三角形组成的太阳花图案
import turtle
turtle.hideturtle()
#绘制外围三角形
for j in range(6):
#基本图形+填色
turtle.fillcolor("red")
turtle.begin_fill()
for i in range(3):
turtle.fd(100)
turtle.left(120)
turtle.end_fill()
#确定起点
turtle.pu()
turtle.fd(100)
turtle.right(360/6)
turtle.pd()
#将画笔移动到六个三角形组成的正六边形的中心
turtle.pu()
turtle.right(60)
turtle.fd(100)
turtle.pd()
#绘制内部六个三角形
colors = ["yellow","blue","green"]
for i in range(6):
turtle.fillcolor(colors[i%3]) #i%3==(0,1,2)
turtle.begin_fill()
for i in range(3):
turtle.fd(100)
turtle.right(360/3)
turtle.end_fill()
turtle.left(360/6)
turtle.done()
作者:xzal12