zoukankan      html  css  js  c++  java
  • 用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()
    
  • 相关阅读:
    python中参数传递之位置传递、关键字传递、包裹传递与解包裹
    Python解决乱码问题
    python beautiful soup库的超详细用法
    jmeter BeanShell断言(一)
    Python requests库如何下载一个图片资源
    关于事件监听机制的总结(Listener和Adapter)
    关于SWT中的Label类和Text类
    关于SWT常用组件(按钮,复选框,单选框(Button类))
    关于SWT/JFace的API文档
    关于在事件代码中如何访问类中的变量
  • 原文地址:https://www.cnblogs.com/Qi-Lin/p/12182148.html
Copyright © 2011-2022 走看看