2er0's Studio.

Turtle Road

Word count: 867Reading time: 4 min
2020/12/10 Share

Turtle Road

一.五角星

1
2
3
4
5
6
7
8
9
10
11
import turtle
turtle.hideturtle() #隐藏海龟图案
turtle.color('red','red') #color1=pencolor,color2=fillcolor
turtle.setup(width=700,height=700) #设置画布
turtle.begin_fill() #填充颜色
for _ in range(5): #循环画线
turtle.forward(150) #在给定方向上前进150像素长度,默认初始方向向右
turtle.rt(144) #在现方向上右转144度
turtle.end_fill() #结束填充
turtle.mainloop()

二.科赫雪花

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import turtle as t
def koch(size,n): #递归函数
if n==0:
t.fd(size) #阶数为0时,为一直线
else:
for i in [0,60,-120,60]:
t.left(i)
koch(size/3,n-1)
def main():
t.screensize(600,600) #调整画布大小


t.penup()
t.goto(-120,120)
t.pensize(1)
t.pencolor("blue") #蓝色画笔描边
t.pendown()
t.speed(5)

level=3 #三阶科赫雪花,阶数:3
t.fillcolor("blue") #填充蓝色
t.begin_fill() #填充开始

koch(210,level)
t.right(120)
koch(210,level)
t.right(120)
koch(210,level)
t.right(120)

t.end_fill()#填充结束

t.fillcolor('white') #中心画圆,这块折腾有点麻烦,数学太差
t.begin_fill()
t.penup() #抬笔,如果缺少而直接转,相当于从这点向目标位置划线。
t.goto(-25,35) #直接转到坐标值为(x,y)处,默认初始点为(0,0)
t.down() #落笔
t.circle(30) #画圆,参数为正则从底部向上,反之向下。
t.end_fill()

t.hideturtle() #隐藏画笔
t.done() #完成
main()


这个要用到递归还是挺SAO的。

三.柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import turtle 
heights=[17751,32127,32567,46726,54643] #各柱高度
turtle.setup(1.0,1.0)
def main():
t = turtle.Turtle()
t.pencolor('black')
t.forward(420)
t.penup()
t.goto(0,0)
t.down()
t.left(90)
t.forward(326.6)
drawjiantou(t)
for i in range(5):
drawFilledRecentage(t,80*i,0,50,heights[i]/200)
displayText(t)
t.hideturtle()
def drawjiantou(t#箭头不好画吖,绕的头晕。
t.penup()
t.goto(-20,290)
t.right(30)
t.down()
t.forward(40)
t.right(120) #右转120度
t.forward(40)
t.penup()
t.goto(386,20)
t.left(30) #左转30度
t.down()
t.forward(40)
t.right(120)
t.forward(40)

def drawFilledRecentage(t,x,y,w,h): #画柱状图
t.pencolor('black')
t.fillcolor('blue')
t.penup()
t.goto(x,y)
t.down()
t.begin_fill()
t.goto(x+w,y)
t.goto(x+w,y+h)
t.goto(x,y+h)
t.goto(x,y)
t.end_fill()

def displayText(t): #类名及其数量显示
groups=['education','Philosophy','history','Manage','Law']

t.pencolor('black')
t.penup()
for i in range(5):
t.goto((20+80*i),20+heights[i]/200)
t.write(str(heights[i]),align="center",font=("Arial",15,"normal"))
t.goto((20+80*i),-20)
t.write(groups[i],align="center",font=("Arial",10,"normal"))
t.penup()
t.goto(0,-80)
t.write("Book Statistics of CUMT library",font=("Arial",30,"normal"))
t.penup()
t.goto(450,-10)
t.write("Group",font=("Arial",20,"normal"))
t.penup()
t.goto(-40,326)
t.write("Number",font=("Arial",20,"normal"))


main()


四.分形树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from turtle import Turtle

def drawtree(p,l,a,f,n): #深度优先,其中参数:l=length,该方向上前进长度值;a=angle,偏转角度,n为树的深度,f使深度增加时length递减。
if n>0:
p.fd(l)
q=p.clone() #将画笔当前的属性返回给q
p.left(a)
q.right(a)
drawtree(p, l*f, a, f,n-1)
drawtree(q, l*f, a, f,n-1)

def maketree(x,y,n):
p = Turtle()
p.color("green","white")
p.pensize(2)
p.speed(15)
p.ht() #隐藏画笔
p.left(90) #使画笔方向向上
p.penup()
p.goto(x,y)
p.pendown()
p.down()
drawtree(p,180, 80, 0.675,n)
def main():
maketree(-150,-150,9)


main()

可能有点小BUG,用python2执行的时候,老是卡掉,3的话倒是可以,智商无解。

CATALOG
  1. 1. Turtle Road
  2. 2. 一.五角星
  3. 3. 二.科赫雪花
  4. 4. 三.柱状图
  5. 5. 四.分形树