用turtle画一个雪人
用turtle画一个雪人
公选的第一个小作业
程序说明
总体设计
躯干
- 由两个半径不同的圆叠加组成,如下图。
- 画笔颜色为白色,填充颜色为白色。
- 由原点起笔,画半径50的小圆,接着移笔至小圆圆心,即(0,-50),起笔画半径60的圆,叠加在一起组成。
围巾
- 第一部分由一个曲边的矩形组成,上下两边为平行直线,左右两边为相同半径的半圆。如图
- 画笔颜色为灰色,填充颜色为红色。
- 位置在两个圆的交界处。由(0,-80)起笔,向右走48,画一个半径为8的半圆,再向左走96,画一个半径为8的半圆,再向右走48
- 第二部分为围巾的下半部,为了显得有飘动的感觉,由直线曲线组成。
- 先将画笔移至刚刚所画图像最下边直线的左端点,即(-48,-80),由此起笔。
- 将笔的朝向调至-90度,即朝向y轴负方向。
- 向向下走10,画一个半径30角度30的曲线,画一个半径10角度60的曲线,画一个半径50角度20的曲线,再将笔朝向调至面向x轴正方向,走20。之后的操作为以上操作的倒过来。
帽子
- 帽子底部
- 帽子底部与围巾第一部分形状相同。
- 画笔颜色为灰,填充颜色为白色。
- 画笔起点为(-25*1.732,-25),画第一条线终点为原点,,长度为50,这样组成一个小角为30度的三角形。如图
- 帽子中间
- 由一个边长为50的等边三角形组成
- 画笔颜色和填充颜色都为红色
- 画笔由帽子底部最上面的直线的左端点起笔。画笔先抬起90度,即朝x轴正方向。前进50.朝向再顺时针旋转120度,前进50。
- 帽子顶部
- 由一个半径为5圆组成,画笔颜色和填充颜色都为白。先将画笔退后50,逆时针转30,由此为起点画圆
面部
- 眼睛以y轴为对称,位置分别为(-20,-35)(20,-35),画两个半径为10的黑圆
- 鼻子形状和围巾第一部分相同,填充颜色为黄色。也以y轴为对称。起点为(-5,-45)
- 嘴巴以y轴对称,画笔颜色为红,尺寸为3,起点为(-10,-50),画笔朝向y轴负方向,画一个半径为10的半圆曲线
身体
- 纽扣:从y轴的三个点(0,-100)(0,-120)(0,-140)依次画半径为10的黑点
- 手臂:两个手臂以y轴为对称,分别起点为(-60,-100)(60,-100)。画笔颜色为棕色,尺寸为3,一只手臂抬起120度,一只抬起60度。走50长,之后再回退10,从这里画笔朝向转60度,再走10,画一个分叉。
程序
效果
代码部分
import turtle as t
# 躯干部分
# 第一个圆
t.screensize(bg='grey')
t.penup()
t.color('white', 'white')
t.pendown()
t.begin_fill()
t.circle(-50)
t.end_fill()
# 第二个圆
t.penup()
t.goto(0, -50)
t.color('white', 'white')
t.pendown()
t.begin_fill()
t.circle(-60)
t.end_fill()
# 围巾部分
# 第一部分
t.penup()
t.goto(0, -80)
t.pendown()
t.color('grey', 'red')
t.begin_fill()
t.forward(48)
t.circle(8, 180)
t.forward(96)
t.circle(8, 180)
t.forward(48)
t.end_fill()
# 第二部分
t.penup()
t.goto(-48, -80)
t.pendown()
t.begin_fill()
t.setheading(-90)
t.forward(10)
t.circle(-30, 30)
t.circle(10, 60)
t.circle(-50, 20)
t.setheading(0)
t.forward(20)
t.setheading(90)
t.circle(50, 20)
t.circle(-10, 60)
t.circle(30, 30)
t.setheading(90)
t.forward(10)
t.end_fill()
# 帽子部分
# 帽子底部
t.penup()
t.goto(-25 * 1.73, -25)
t.color('grey', 'white')
t.setheading(30)
t.pendown()
t.begin_fill()
t.forward(50)
t.circle(5, 180)
t.forward(50)
t.circle(5, 180)
t.end_fill()
# 帽子中间
t.penup()
t.circle(5, -180)
t.pendown()
t.color('red', 'red')
t.begin_fill()
t.setheading(90)
t.forward(50)
t.right(120)
t.forward(50)
t.end_fill()
# 帽子顶部
t.penup()
t.forward(-50)
t.left(30)
t.color('white', 'white')
t.pendown()
t.begin_fill()
t.circle(5)
t.end_fill()
# 面部
# 两个大眼睛
t.penup()
t.goto(-20, -35)
t.pencolor('black')
t.pendown()
t.dot(10)
t.penup()
t.goto(20, -35)
t.pencolor('black')
t.pendown()
t.dot(10)
# 鼻子
t.penup()
t.goto(-5, -45)
t.color('grey', 'yellow')
t.pendown()
t.begin_fill()
t.forward(10)
t.circle(3, 180)
t.forward(10)
t.circle(3, 180)
t.end_fill()
# 嘴巴
t.penup()
t.goto(-10, -50)
t.pencolor('red')
t.pensize(3)
t.setheading(-90)
t.pendown()
t.circle(10, 180)
# 身体部分
# 扣子
t.penup()
t.goto(0, -100)
t.pencolor('black')
t.dot(10)
t.penup()
t.goto(0, -120)
t.pencolor('black')
t.dot(10)
t.penup()
t.goto(0, -140)
t.pencolor('black')
t.dot(10)
# 两只手臂,左手
t.penup()
t.goto(-60, -100)
t.pencolor('brown')
t.pensize(5)
t.setheading(120)
t.pendown()
t.forward(50)
t.forward(-10)
t.right(60)
t.forward(10)
# 两只手臂,右手
t.penup()
t.goto(60, -100)
t.pencolor('brown')
t.pensize(5)
t.setheading(60)
t.pendown()
t.forward(50)
t.forward(-10)
t.right(-60)
t.forward(10)
# 藏画笔,完成
t.hideturtle()
t.done()