目录

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

物联沃分享整理
物联沃-IOTWORD物联网 » python海龟知识点归纳

发表回复