Week 9 Turtle Graphics
本节很有意思,这里主要要掌握一些操作方法。
我们先定义一个画笔,t = turtle.Turtle(),则有一下函数:
辨:t.setheading()与t.right()和t.left()的区别
import turtle # 调用海龟画图的库
# 定义setheading画笔
t1 = turtle.Turtle()
t1.shape("turtle")
t1.color("red")
# 定义right画笔
t2 = turtle.Turtle()
t2.shape("square")
t2.color("blue")
# 定义left画笔
t3 = turtle.Turtle()
t3.shape("circle")
t3.color("green")
# setheading 示例
t1 .goto(0,0)
t1 .forward(100)
t1 .setheading(60)
t1 .forward(100)
# right 示例
t2 .goto(0,0)
t2 .forward(100)
t2 .right(60)
t2 .forward(100)
# left 示例
t3 .goto(0,0)
t3 .forward(100)
t3 .left(30)
t3 .forward(100)
t3.left(30)
t3 .forward(100)
# 显示最后结果
turtle .done()
运行结果:
解析:
- 由此可见,setheading()可以理解为不受画笔当前方向的绝对方向。以水平向右的方向为0度逆时针偏转。
- right()是在当前角度下再向右偏转多少度
- left()是在当前角度下再向左偏转多少度
注:上述代码定义了三个画笔,turtle是一个大的类,每个画笔(t1,t2,t3)是一个对象,是类是实例。class与object我们在之后会再详细讲解。
例 1:
import turtle
#定义画图速度
turtle.speed(1)
turtle.pencolor("red")
#定义线条粗细
turtle.width(5)
turtle.goto(0,0)
#定义填充颜色
turtle.color("red")
#开始填充
turtle.begin_fill()
for i in range(4):
turtle.forward(100)
turtle.left(90)
#结束填充
turtle.end_fill()
turtle.done()
运行结果:
对于运行速度:
综合练习 1:
import turtle,random
"""
定义画五角星的函数
"""
def drawstar(x,y,length):
turtle.penup()
turtle.goto(x,y)
turtle.pendown()
# 下两行代码连在一起自定义随机颜色
turtle.colormode(255)
turtle.pencolor(random.randint(0,255),random.randint(0,255),random.randint(0,255)) # 随机画笔颜色
#画五角星的核心代码
for count in range(5):
turtle.forward(length)
turtle.right(144)
"""
定义画正方形的函数
"""
def drawsquare(x,y,length):
turtle.penup()
turtle.goto(x,y)
turtle.pendown()
turtle.colormode(255)
turtle.pencolor(random.randint(0,255),random.randint(0,255),random.randint(0,255)) # 随机画笔颜色
turtle.fillcolor('red')
turtle.begin_fill()
# 画正方形的核心代码
for count in range(4):
turtle.forward(length)
turtle.right(90)
turtle.end_fill()
"""
定义画三角形的函数
"""
def drawtriangel(x,y,length):
turtle.penup()
turtle.goto(x,y)
turtle.pendown()
turtle.colormode(255)
turtle.pencolor(random.randint(0,255),random.randint(0,255),random.randint(0,255)) # 随机画笔颜色
# 画三角形的核心代码
for count in range(3):
turtle.forward(length)
turtle.right(120)
def main():
#输入变量
x = int(input("X value :"))
y = int(input("Y value :"))
length = int(input('Length of a side:'))
kind = input("Input shape (s - square, t - triangle, st - star):")
#判断图形形状
if kind == "s":
drawsquare(x,y,length)
elif kind == "t":
drawtriangel(x,y,length)
elif kind == "st":
drawstar(x,y,length)
print(turtle.position()) #定位并输出终点坐标
turtle.done() #显示完成图画
main()
测试输入:
X value :50
Y value :50
Length of a side:100
Input shape (s - square, t - triangle, st - star):st
(50.00,50.00)
综合练习 2:
import turtle
wn =turtle.Screen()
wn.title("Hello world") #设置窗口标题
wn.bgcolor("pink") #设置画布颜色
t = turtle.Turtle()
t.goto(0,0)
t.speed(1)
t.width(4)
t.circle(100,360) #半径为正的话是逆时针画圆
t.circle(-100,360)#半径为负的话是顺时针画圆
t.setheading(90)
t.circle(100,360)
t.circle(-100,360)
t.penup() #抬起画笔
t.goto(-200,-200)
t.pendown() #落下画笔
for i in range(4):
t.forward(400)
t.right(90)
turtle.done()
运行结果:
趣味题:
1.爱心(1)
import turtle
def curvemove():
for i in range(200):
turtle.right(1)
turtle.forward(1)
turtle.color('red','pink')
turtle.begin_fill()
turtle.left(140)
turtle.forward(111.65)
curvemove()
turtle.left(120)
curvemove()
turtle.forward(111.65)
turtle.end_fill()
turtle.done()
运行结果:
2.爱心(2)
import turtle
def curvemove(): # 定义函数画圆,200度
for i in range(100):
turtle.right(2)
turtle.forward(2)
turtle.speed(10)
turtle.color('red', ('#F05B72')) # 设置画笔及填充颜色
turtle.pensize(3)
turtle.hideturtle() # 隐藏画笔形状
turtle.speed(5)
turtle.begin_fill() # 开始填充
turtle.left(140)
turtle.forward(111.65)
curvemove()
turtle.left(120)
curvemove()
turtle.forward(111.65)
turtle.end_fill()
turtle.color(('#F05B72'), 'red')
turtle.begin_fill()
turtle.penup()
turtle.goto(60, 0)
turtle.pendown()
turtle.right(80)
turtle.forward(111.65)
curvemove()
turtle.left(120)
curvemove()
turtle.forward(111.65)
turtle.end_fill()
turtle.color('red', 'red')
turtle.begin_fill()
turtle.hideturtle()
turtle.penup()
turtle.goto(-150, 20)
turtle.pendown()
turtle.pensize(5)
turtle.right(20)
turtle.right(60)
turtle.forward(15)
turtle.right(120)
turtle.forward(40)
turtle.right(60)
turtle.forward(14)
turtle.left(60)
turtle.forward(375)
turtle.left(90)
turtle.forward(10)
turtle.right(110)
turtle.forward(30)
turtle.right(140)
turtle.forward(30)
turtle.right(110)
turtle.forward(10)
turtle.left(90)
turtle.forward(375)
turtle.left(60)
turtle.forward(14)
turtle.right(60)
turtle.forward(40)
turtle.right(120)
turtle.forward(15)
turtle.end_fill()
turtle.penup()
turtle.goto(10.5, 85)
turtle.color("violet")
turtle.write("L O V E", font=('Dutch801 XBd BT', 20, 'normal'))
turtle.done()
运行结果: