奥运五环
问题
用 turtle 做一个五环图,并仿照下图标上你的学号、姓名和“I love programming!”字样。
问题解读
搜了一下,奥运五环的距离半径等比例似乎没有标准规定。
在纸上画了画感受感受之后,决定采用圆心之间呈等腰直角三角形,且横向相邻两个环边界的距离与斜向相邻两个环相交的距离相等的样式。
另外,出于个人强迫症决定用弧处理一下环相交相叠的问题。
结果
代码
1 import math
2 import turtle
3
4 r = 100#设置半径和横向圆心距离
5 d = r * 4 * (2 - math.sqrt(2))
6
7 turtle.hideturtle()#设置画笔属性
8 turtle.speed(0)
9 turtle.pensize(20)
10
11 def draw(color, x, y):#画圆
12 turtle.penup()
13 turtle.color(color)
14 turtle.goto(x, y)
15 turtle.seth(0)
16 turtle.pendown()
17 turtle.circle(r)
18 turtle.penup()
19
20 def cross(color, x, y, u, v):#处理圆的交界
21 turtle.penup()
22 turtle.color(color)
23 turtle.goto(x, y)
24 turtle.seth(0)
25 turtle.circle(r, u)
26 turtle.pendown()
27 turtle.circle(r, v)
28 turtle.penup()
29
30 def write(msg, color, x, y, tp, sz):#写信息
31 turtle.penup()
32 turtle.color(color)
33 turtle.goto(-d, - d)
34 turtle.pendown()
35 turtle.write(msg, font = (tp, sz))
36 turtle.penup()
37
38 draw("blue", -d, d / 2 - r)#主程序部分
39 draw("yellow", - d / 2, -r)
40 cross("blue", -d, d / 2 - r, 60, 60)
41 draw("black", 0, d / 2 - r)
42 cross("yellow", - d / 2, -r, 120, 60)
43 draw("green", d / 2, -r)
44 cross("black", 0, d / 2 - r, 60, 60)
45 draw("red", d, d / 2 - r)
46 cross("green", d / 2, -r, 120, 60)
47 write("16337322, 郑非凡, I love programming!", "black", -d, -d, "微软雅黑", 20)
48
49 turtle.done()#结束
代码解读
注意:以下内容完全根据笔者自己对 Python 3 的理解胡说八道。
hideturtle():隐藏指针。
speed():设置速度,0 为最快。
pensize():设置画笔大小。
penup():抬笔。
color():设置画笔颜色。
goto():移动指针。
seth():设置指针朝向,0 为向右,随参数增加逆时针旋转,单位是角度(下同)。
pendown():下笔。
circle():以给定半径,指针朝向左侧半径距离位置为圆心,画圆或画弧。
write():写字符串。
done():结束 turtle。