用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!


虎年到了,祝大家新年虎虎生威!大吉大利!
去年我用Python画了一头金牛,参考:https://blog.csdn.net/weixin_43790276/article/details/113749464?spm=1001.2014.3001.5501
今年朋友问我什么时候能画一只老虎。不能辜负朋友的期待,还是一样的流程,在百度图片里下载了一张虎年的图片(原图局部见上图),然后开始肝代码。
运行效果如下:

视频我也录制好了,上传到了CSDN,可以免费下载。下载链接:https://download.csdn.net/download/weixin_43790276/77464044?spm=1001.2014.3001.5503
结果与原图对比

与原图对比,我自己认为还原度是高于95%的。
部分细节无法完全还原,或是代码调试的时间不够。感兴趣的朋友可以联系我获取代码,更进一步优化细节。
用到的方法
使用的都是turtle库中的函数,直接导入turtle库即可调用。
去年的文章已经详细介绍使用的方法了,为了方便,本文将这些方法再列一遍,已经知道的可以直接下滑跳过此部分。
1.画布设置
setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。
title(): 设置窗口的标题。
screensize(width, height, color): 设置画布大小,背景颜色。
done(): 绘图结束后,不自动关闭窗口。
2.画笔设置
pencolor(color): 设置画笔颜色。
width(): 设置画笔宽度。
speed(int): 设置画笔的速度,传入1~10的数字,1最慢,10最快。传入其他值会更快,但是没有鼠标移动的动画效果。
penup(): 提起画笔,提起后移动画笔不会留下痕迹。
pendown(): 落下画笔,开始绘图前先将画笔落下。
setx(value): 设置画笔的x轴坐标。
sety(value): 设置画笔的y轴坐标。
towards(x, y): 设置画笔指向的点。
setheading(): 设置画笔的方向。与towards()配合可以设置画笔指向某个点,如setheading(towards(0, 0))可以设置画笔指向原点。
pos(): 返回画笔当前的坐标。鼠标移动一段时间后可以print()打印此函数获取鼠标位置。
heading(): 返回画笔当前的方向。
3. 画笔操作
circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。
left(angle): 画笔左转,传入任意一个目标角度。
right(angle): 画笔右转。
forward(distance): 画笔前进一段距离。
backward(distance): 画笔后退一段距离。
goto(x, y): 移动画笔到指定坐标。
4. 颜色填充
begin_fill(): 开始填充。
fillcolor(color): 设置图形中填充的颜色。
end_fill(): 结束填充。
自定义的函数
为了精简代码,我自己定义了几个函数,在后面的代码中重复利用。
1.设置画笔到某一个点,每画一部分图形的开头都可以直接调用,COLOR是定义的一个全局变量。

def set_start(x, y, w, c=COLOR):penup()setx(x)sety(y)setheading(towards(0, 0))width(w)pencolor(c)pendown()speed(0)

2.将转向和移动的代码封装,转不同角度和移动不同的距离可以画出不同的弧线,封装后会节省非常多的代码。

def left_rotate(time, angle, length):for i in range(time):left(angle)forward(length)

3.填充颜色定义成装饰器,当某部分图形完成时,加上装饰器即可完成颜色填充。

def fill_color(color):def decorator_all(func):def wrapper(*args, **kwargs):begin_fill()func(*args, **kwargs)fillcolor(color)end_fill()return wrapperreturn decorator_all

4.填充颜色的补丁函数。
turtle库填充颜色时会去关联上一个图形的终点,大部分情况填充颜色都没有问题,但少数情况下填充结果不符合预期。
我没有花时间去翻官方有没有这样的issue,自己写了个补丁函数,重置上一个图形的终点(重点:重置的是上一个),当填充颜色不符合预期时,打上补丁。补丁函数中调用了前面定义的set_start(),在要填充图形的起点画个点。

def fill_color_patch(x, y, c='#fffffb'):set_start(x, y, 1, c=c)forward(1)

经验总结
1.画图前先分析一下图形。
先定一个坐标原点,图形的每个部分都根据原点去找位置,这样可以避免图形出现大的偏差。
2.顺序很重要。
有些部分之间的先后顺序不能反,主要影响的是颜色填充,这点也是图形分析时要注意的,分析好图层顺序。
3.灵活运用。
目标是最大可能完成图像,如果能画得更好,代码增加很多,也是值得的。自定义的函数,适用就用,不适用的地方就算了。
4.耐心很重要。
用的是基本库,基本的函数,就那么几个,其实技术没那么重要,重要的是耐心。画得不像不怕,多试几次就行了。
代码拿去吧
我已经尽力精简代码了,但还是超过了1000行,本文就不全贴了。
如果需要完整代码,可以关注公众号“Python碎片”,然后在后台回复“虎虎生威”关键字获取。

用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利相关推荐

  1. 用Python标准库turtle画一头金牛,祝您新年牛气冲天!

    用Python标准库turtle画一头金牛,祝您新年牛气冲天! 今年是牛年,祝大家新年牛气冲天!嗨皮牛Year! 前几天在百度图片里下载了一张金牛的图片,就是上面的这张.想着用Python标准库tur ...

  2. 用Python标准库turtle画一头金牛,祝您新年牛气冲天!(附源码)

    今年是牛年,祝大家新年牛气冲天!嗨皮牛Year! 前几天在百度图片里下载了一张金牛的图片,就是封面的这张.想着用Python标准库turtle肯定可以画出这张图,所以说干就干,花两天时间实现了. 画图 ...

  3. 用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!

    大家好,我是辰哥~ 点击下方名片关注和星标『Python研究者』!

  4. 虎年,用Python画一个小老虎,祝大家新年虎虎生威,大吉大利

    虎年到了,祝大家新年快乐!虎虎生威!大吉大利! 前几天有朋友问我,听说学习了Python,万物皆可爬,还可以画画,今年是虎年,可不可以画一只可爱的小脑虎呀- 当然可以的呀 我们先在百度图片里下载一张虎 ...

  5. Python第三方库turtle画小人发射爱心

    废话不多说直接上代码 import turtle as trdef Mini_people():tr.pensize(3)tr.up()tr.goto(-200, 165) # 脖子坐标tr.down ...

  6. python第三方库排行-140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  7. 140种Python标准库、第三方库和外部工具都有了

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  8. cassandra可视化工具_耗时1个月整理!160种Python标准库、第三方库和外部工具都有了...

    耗时1个月整理!160种Python标准库.第三方库和外部工具都有了 北京尚学堂 2019-12-09 14:59:15 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数 ...

  9. [转载] 140种Python标准库、第三方库和外部工具

    参考链接: Python | 使用openpyxl在Excel文件中进行算术运算 这些库可用于文件读写.网络抓取和解析.数据连接.数清洗转换.数据计算和统计分析.图像和视频处理.音频处理.数据挖掘/机 ...

最新文章

  1. 行意天下正文 Android Day02-Android中单元测试(junit测试)monkey测试
  2. R语言-向量自回归模型VAR的实现
  3. 江苏广电总台面试java_江苏广电面试 江苏广电25位面试官坐镇终面 - 86资讯网
  4. 树形结构:从二分查找,二叉搜索树寻找最近祖先,从递归到迭代,实现技巧总结
  5. python对文件操作的相关函数_python文件操作的相关函数深入理解Django中内置的用户认证...
  6. 样条 开源_成年人在开源社区中是什么样的?
  7. iOS - OC RunLoop 运行循环/消息循环
  8. Golang并发模式--channel高级使用
  9. Mac安装apktool/dex2jar/jd-gui逆向工具
  10. 书籍推荐:《Java数据结构与算法》
  11. Khronos关于WebGL最新进展
  12. error: possibly undefined macro: AC_PROG_LIBTOOL
  13. 电脑数据格式化如何快速简单恢复数据?
  14. 制作二维码过程的详解(基于python)_基于opencv+python的二维码识别
  15. 合肥工业大学计算机与信息学院复试,合肥工业大学计算机与信息学院2018考研大纲(复试)...
  16. Terms-level Query之Fuzzy Query
  17. 静态成员和静态成员函数的总结
  18. python发post请求json_python request 以json形式发送post请求的正确的姿势
  19. drf使用mongodb开发vsp平台设计
  20. 2021-07-04 m3u8格式直播地址

热门文章

  1. CentOS6.9安装Kafka
  2. [BZOJ1565]植物大战僵尸
  3. ESXi安全引导如何提升vSphere安全性?
  4. 常用的一些页面操作 js jsp check
  5. mysql增量备份及恢复解决方案
  6. Mysql开启远程连接方法
  7. 如何在Debian 9上配置sources.list
  8. Hystrix面试 - 用 Hystrix 构建高可用服务架构
  9. ZooKeeper 的Web管理工具Shepher介绍
  10. 内网穿透工具 Ngrok