目录

  • 前言
  • 简介
  • 函数使用
    • 设置窗口函数
    • 设置RGB参数格式
    • 改变线条的颜色和粗细
      • 设置颜色
      • 设置粗细
    • 控制海龟的抬起和放下
      • 抬起海龟
      • 放下海龟
    • 控制海龟的行动
      • 设置海龟速度
      • 让海龟移动到指定位置
      • 设置海龟的朝向
        • 绝对角度体系
        • 海龟角度体系
      • 让海龟走直线
      • 让海龟走圆弧
    • 色彩填充
    • 保留画布
  • 绘制Doge完整代码

前言

终于等到放假了,先把之前用turtle库整的小活写了,之后进入快乐复习竞赛+学习Python阶段[doge]。

简介

Turtle库是Python提供的入门级别的绘图库,通过此库可以进行一些简单的图形绘制(真的要很简单才行……),以下为博主的拙作:

Turtle的语法逻辑很简单:在对话框内,有一只海龟,在海龟的爬行过程中,会留下痕迹,通过改变海龟留下痕迹的粗细、颜色,同时操控海龟的爬行轨迹,就可以绘制出任意图形(理论上)。

函数使用

一般情况下,当我们引用库函数时,首先要在程序开始引入库,再在之后的程序中通过”库名.函数名“的方式使用函数。但是当库的名字较长时,会造成些许程序编写上的麻烦。为了解决这个问题,我们可以使用import as语句,在引用的同时为该库取一个更简短的“小名”,从而方便后续程序的编写。

所以,以下的所有代码都默认程序开头添加了如下语句:

import turtle as t

这样,所有turtle库函数的调用都可以以更加简洁的方式完成,由turtle.函数名(参数)变为了t.函数名(参数)

对于Python中库函数的引用,还可以使用from 库名 import 函数名语句单独引用一个函数或者from 库名 import*语句引用一整个库。通过这种方式引用的函数不需要再在语句前加上库名.,比博主使用的方式更加简短。不过,因为没有了库名的区别,同名函数容易混淆,对程序编写造成困难。所以博主使用的为介绍的第一种引用方式,读者可以根据自己的需求自行选择。

另外,如无特殊说明,函数中传入的表示长度的整数参数均以像素为单位。

设置窗口函数

使用t.setup(width,height,startx,starty)函数可以控制绘图使用的窗口的大小和位置,其中width控制窗口宽度,height控制窗口高度,(startx,starty)(startx,starty)(startx,starty)控制窗口左上角在整个屏幕的坐标,若不传入这两个参数,则默认将整个窗口置于屏幕中央。

设置RGB参数格式

众所周知,计算机常常使用RGB系统来储存、表示颜色,当我们用tutle库绘制图形的时候,也需要通过RGB参数来控制线条颜色。RGB参数有两种表示方法,一是用0∼2550\sim 2550∼255之间的整数;二是用0∼10\sim 10∼1之间的小数。在turtle库中,默认使用第二种表示方法,如果我们想要使用第一种表示方法,就需要使用以下语句:

t.colormode(255)

当然,如果你想再次改回默认方式,可以使用以下语句:

t.colormode(1)

改变线条的颜色和粗细

设置颜色

使用t.pencolor()即可设置颜色,参数可以传入字符串,如'black''red',也可以传入RGB三元组(参数样式参考上一条)。

设置粗细

使用t.pensize(width)即可将线条粗细设置为width个像素。

控制海龟的抬起和放下

与现实中的绘画类似,画笔通常不会一直放在画布上(一笔画另算),在使用tutle绘制图形的时候,同样不能让海龟一直留下痕迹,所以就有了“抬起”和“放下”两个函数。

抬起海龟

t.penup()t.pu()这两个函数功能完全相同,是编写者为了方便程序编写提供的冗余函数。

放下海龟

t.pendown()t.pd(),功能也完全相同。

控制海龟的行动

完成了之间所述的各种设置,接下来就可以让海龟动起来绘制图案了。

设置海龟速度

t.speed(v)讲海龟的移动速度设定为vvv,vvv越大则移动速度越快。如果不设置移动速度,则默认为666。

让海龟移动到指定位置

画布以画布正中为原点(0,0)(0,0)(0,0)建立了直角坐标体系,正右方为xxx轴正方向,正上方为yyy轴正方向,海龟的初始位置为(0,0)(0,0)(0,0)。如果我们想让海龟直接移动到指定位置,可以使用t.goto(x,y)函数让海龟移动到坐标为(x,y)(x,y)(x,y)的点,且海龟的朝向不会改变。

设置海龟的朝向

窗口初始化之后,海龟的默认朝向是正右方(即xxx轴正方向),我们可以通过两个函数来改变海龟的朝向。

绝对角度体系

绝对角度指海龟的朝向与正右方(即xxx轴正方向)的夹角,这个参数可正可负,并遵循角度制:t.setheading(theta)t.seth(theta),这两个函数功能也是完全相同的。

海龟角度体系

顾名思义,海归角度体系就是与海龟当前的朝向的相对角度,通过t.left(theta)t.right(theta)就可以让海龟左转或者右转θ°。

让海龟走直线

通过t.forward(lenth)t.fd(lenth)可以让海龟沿着当前朝向直走lenthlenthlenth个像素,如果参数lenthlenthlenth是负数,海龟就会倒退相应距离。

让海龟走圆弧

通过t.circle(r,theta)可以让海龟以自己正左方距离为rrr的点为圆心绘制一个圆心角为θ\thetaθ的圆弧。如果不传入参数θ\thetaθ,就会默认绘制一个完整的圆。如果参数rrr为负数,则圆心在海龟正右方。

色彩填充

除了使用线条之外,要绘制图形还可能会使用色块,这就需要图形填充操作。

我们使用t.begin_fill()t.end_fill()来开始/结束图形填充,使用t.fillcolor()来设置填充颜色(参数格式与前文介绍设置画笔颜色函数类似)。进行图形填充时,海龟的运动轨迹形成的封闭图形会被填充上设定的颜色。如果海龟的行进轨迹没有构成封闭图形,会默认讲填充过程的起点和终点连在一起构成封闭图形。

具体使用如下:

t.begin_fill()
t.fillcolor(颜色参数)
...
海龟运动
...
t.end_fill()

保留画布

正常情况下,当绘图脚本执行完了所有语句,就会自动关闭画布窗口。如果我们想要使窗口长久停留,就需要在代码末尾加上t.done()语句。

绘制Doge完整代码

所有参数都是博主在GeogebraGeogebraGeogebra上手动测量的,其中前面的代码还因为不知名因素诱发的脑瘫把坐标一个一个手动算出来了……虽然后面通过设置画面转换比例basebasebase和坐标轴转换参数oxoxox省了oyoyoy不少麻烦,但绘制过程也称不上轻松。不得不感慨,用turtle画图,最难的不在于语法,而是怎样将想要绘制的图案解构成直线与圆弧的组合……

import turtle as t
t.setup(600,600)
t.colormode(255)
t.speed(100)
base=62.98536
ox=2.1782*base
oy=2.1566*base
def moveto(x,y):t.pu()t.goto(x,y)t.pd()return
t.pencolor(231,165,58)#doge外框颜色
t.pensize(5)
moveto(-125,0)
t.seth(-90)
#勾画轮廓并填色
t.begin_fill()
t.fillcolor(255,231,135)#doge主体黄
t.circle(125,205)
t.seth(70.95)
t.circle(88.28,65.815)
t.circle(11.42,90)
t.fd(43.30)
t.seth(158.553)
t.circle(125,48.982)
t.seth(130.2076)
t.circle(78.133,47.345)
t.circle(12.956,56.814)
t.seth(-80.074)
t.fd(77.976)
moveto(33.1895-125,84.778)
t.seth(-132.633)
t.circle(125,42.736)
moveto(113.374,52.278)
t.end_fill()
#右耳
t.begin_fill()
t.seth(-245.159)
t.circle(125,29.226)
t.fillcolor(231,165,58)
t.seth(48)
t.circle(0.666*base,42.6)
t.seth(305.312)
t.circle(-1.32*base,38.375)
t.goto(113.374,52.278)
t.end_fill()
#狗嘴白
moveto(1.985*base,-0.37*base)
t.begin_fill()
t.fillcolor('white')
t.seth(135.435)
t.pu()
t.circle(1.233*base,95.64)
t.circle(-0.95*base,97.578)
t.circle(0.363*base,114.183)
t.seth(105.092-180)
t.circle(125,165.011)
t.end_fill()
#重新勾线
moveto(-125,0)
t.seth(-90)
t.circle(125,180)
#双下巴
moveto(-0.557*base,-1.685*base)
t.seth(331.213)
t.circle(0.845*base,79.264)t.pencolor(127,50,4)#深棕色
#鼻子+嘴
moveto(-1.18*base,-1.154*base)
t.begin_fill()
t.fillcolor(127,50,4)
t.seth(-224.734+180)
t.circle(0.337*base,224.734-180)
t.fd(0.820*base)
t.circle(0.419*base,84.75)
t.seth(58.22-180)
t.circle(-0.7*base,80.022)
t.seth(142.125)
t.circle(-0.269*base,53.398)
t.seth(22.884)
t.circle(0.583*base,45.723)
t.circle(0.137*base,90)
t.circle(0.662*base,52.107)
t.circle(0.157*base,90)
t.circle(0.497*base,55.629)
t.seth(-90)
t.circle(-0.223*base,76.343)
t.circle(-0.46*base,55)
t.end_fill()
t.goto(-1.18*base,-1.154*base)
t.pencolor('white')
t.width(5)
moveto(1.228*base-ox,1.665*base-oy)
t.circle(1)#右眼
t.pencolor(127,50,4)
moveto(0,0)
t.pu()
t.begin_fill()
t.fillcolor('white')
t.seth(-31.518)
t.circle(0.9*base,63.243)
t.circle(0.3*base,116.85)
t.fd(0.702*base)
t.circle(0.42*base,180)
t.goto(0,0)
t.end_fill()
t.pd()
t.seth(-31.518)
t.circle(0.9*base,63.243)
t.circle(0.3*base,148.555)
t.seth(180)
t.fd(0.651*base)
t.seth(-169.45)
t.circle(0.312*base,131.756)
t.goto(0,0)
t.seth(-31.518)
t.circle(0.9*base,63.243)
t.begin_fill()
t.fillcolor(127,50,4)
t.circle(0.3*base,148.555)
t.seth(180)
t.circle(0.345*base,159.038)
t.end_fill()
moveto(2.807*base-ox,2.58*base-oy)
t.pencolor('white')
t.circle(1)#左眼
t.pencolor(127,50,4)
moveto(0.676*base-ox,2.022*base-oy)
t.pu()
t.seth(0)
t.begin_fill()
t.fillcolor('white')
t.fd(0.451*base)
t.circle(0.296*base,73.2)
t.fd(0.5*base)
t.circle(0.252*base,136.159)
t.fd(0.728*base)
t.circle(0.309*base,140.48)
t.goto(0.676*base-ox,2.022*base-oy)
t.end_fill()
t.pd()
t.seth(0)
t.fd(0.451*base)
t.begin_fill()
t.fillcolor(127,50,4)
t.circle(0.296*base)
t.end_fill()
t.circle(0.296*base,180)
t.fd(0.451*base)
t.circle(0.296*base,180)
moveto(1*base-ox,2.5*base-oy)
t.pencolor('white')
t.circle(1)
#签名
moveto(190,-200)
t.pencolor('black')
t.seth(0)
t.fd(74)
moveto(216,-200)
t.seth(-90)
t.fd(40)
t.circle(-10,90)
t.fd(5)
t.circle(-10,90)
moveto(230,-200)
t.seth(-90)
t.fd(25)
t.circle(25,90)
t.fd(15)
t.circle(10,90)moveto(600,600)
t.done()

Python基本图形绘制:turtle库相关推荐

  1. Python_note2 基本图形绘制+turtle库使用

    Python学习:注重编程逻辑 第三方库 语法简洁 生态高产.->全栈能力 C代码量的10%:强制可读性:较少的底层语法元素:多种编程方式:支持中文字符 :>13万第三方库----庞大计算 ...

  2. python turtle库画图案-Python基础图形绘制库——turtle

    (1).介绍 turtle库也叫海龟库,是turtle绘图体系的Python实现.turtle库是Python语言的标准库之一,是入门级的图形绘制函数库. turtle绘图体系:也叫海龟绘图系统,它是 ...

  3. python turtle画有趣的图形_Python turtle库绘制简单图形

    一.简介 Python中的turtle库是一个直观有趣的图形绘制函数库.turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形. 二.简单的图形列举 1.绘制4个不同 ...

  4. python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...

    使用python图形模块turtle库绘制樱花.玫瑰.圣诞树代码实例 发布时间:2020-08-22 15:57:19 来源:脚本之家 阅读:76 作者:Soul fragments 今天为大家介绍几 ...

  5. python——基本图形绘制(实例2:Python蟒蛇绘制)(模块1:turtle库的使用)

    前言 本篇主要介绍Python基本图形绘制,以Python蟒蛇绘制为例,介绍turtle库的使用. 并在最后对蟒蛇绘制的代码进行分析. 读完本篇,你将了解: 1.方法论 Python语言及海龟绘图体系 ...

  6. python使用turtle库绘制一个100长度的十字架_测验2: Python基本图形绘制 (第2周)

    # 测验2: Python基本图形绘制 (第2周) ## 单项选择题 ### 1.哪个选项不能正确引用turtle库进而使用setup()函数? A.import turtle as t B.impo ...

  7. python基本图形绘制_【Python】Python基本图形绘制-Go语言中文社区

    1.Python蟒蛇图形绘制: 代码: #PythonDraw.py import turtle turtle.setup(650, 350, 200, 200) turtle.penup() tur ...

  8. 练习2: Python基本图形绘制 (第2周)

    练习2: Python基本图形绘制 (第2周) 文章目录 练习2: Python基本图形绘制 (第2周) turtle库语法总结 Python蟒蛇绘制 turtle正方形绘制 turtle六边形绘制 ...

  9. python基本图形绘制第二周答案_荐测验2: Python基本图形绘制 (第2周)

    测验2: Python基本图形绘制 (第2周) 单项选择题 1.哪个选项不能正确引用turtle库进而使用setup()函数? A.import turtle as t B.import turtle ...

  10. Python(3)——Python基本图形绘制

    Python基本图形绘制 第一个绘图 绘图演示2 蟒蛇绘制 关于turtle库 绝对0度方向 完善绘图程序 八边形 八角形 叠边形绘制 正确引用turtle中的函数 使用循环绘图 风轮绘制 自由绘制 ...

最新文章

  1. 比特币周一盘中数秒内闪跌 80%
  2. C++打印STAIRS 图案算法(附完整源码)
  3. 我们分析了全美Top Business Analyst 和 Data Science专业,最后给你总结了这几点
  4. 小程序开发及环境搭建及发布
  5. 1. 搭建scapy
  6. 《探索需求》——阅读笔记三
  7. 欧拉工程第60题:Prime pair sets
  8. pl sql入门比较好的书_【赵强老师】什么是PL/SQL?
  9. logistic回归分析优点_一文详尽系列之逻辑回归
  10. android放大镜无广告,放大镜微件  |  Android 开发者  |  Android Developers
  11. 实验验证二项分布(Binomial)公式正确性
  12. 在校园网的环境下用树莓派搭建私人云
  13. C嵌入式编程设计模式
  14. 重置IDEA,将原来的设置清除
  15. 田野调查手记·浮山篇(五)
  16. 开关稳压电源软件设计
  17. cmd-ping命令
  18. 【转载】文化的基本单位:模因
  19. linux的passive用法,get的被动用法(get-passive)
  20. eas java配置_EAS客户端调试环境搭建

热门文章

  1. pandas DataFrame 根据多列的值做判断,生成新的列值
  2. 大学数学实验习题--统计推断 03(附答案)
  3. ConcurrentHashMap源码分析(保姆式讲解):Put、扩容原理详解 博主可答疑
  4. **inline**与**volatile**关键字
  5. linux reader使用方法,Linux Reader
  6. linux代码运行流程,Linux中程序执行的流程分析工具——strace
  7. 微信小程序 this.data与this.setData
  8. psycopg2 (python与postgresql)
  9. Centos7 使用 supervisor 管理进程
  10. 【Cocos2d-html5】运动中速度效果