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

今年是牛年,祝大家新年牛气冲天!嗨皮牛Year!

前几天在百度图片里下载了一张金牛的图片,就是封面的这张。想着用Python标准库turtle肯定可以画出这张图,所以说干就干,花两天时间实现了。

画图虽然不是Python的主要功能,但绘制这头金牛还是展示了Python无所不能的强大属性。接下来介绍实现的过程。

图片分析

初看图片,深红色的背景下,一头金光闪闪的金牛。简单分析,图形主要分为两大部分,外面的圆环和内部的金牛。

圆环由同心圆和折线形的圆盘构成,同心圆直接画圆就可以,折线形的圆盘是旋转对称的,每一个部分由圆弧和半径方向的线组成,一共有26个相同的部分,计算出每个部分的弧形比例即可依次绘制。

金牛图形是不规则的,里面有很多不同弧度和不同长度的不规则曲线,控制画笔边前进边旋转,每次前进不同的距离和旋转不同的角度,可以绘制出这些曲线。里面的图案,如五瓣花就是用这种方式完成。

对图形有了基本的了解,就看turtle中有哪些方法可以用于实现这些操作了。

用到的Turtle方法介绍

turtle是Python的标准库,直接导入即可使用。

from turtle import *

1. 画布设置

setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。

title(): 设置窗口的标题。

screensize(width, height, color): 设置画布大小,背景颜色

done(): 绘图结束后,不自动关闭窗口。

2. 画笔设置

pencolor(color): 设置画笔颜色

penup(): 提起画笔,提起后移动画笔不会留下痕迹。

pendown(): 落下画笔,开始绘图前先将画笔落下。

speed(int): 设置画笔的速度,传入1~10的数字,1最慢,10最快。传入其他值会更快,但是没有鼠标移动的动画效果。

setx(value): 设置画笔的x轴坐标。

sety(value): 设置画笔的y轴坐标。

towards(x, y): 设置画笔指向的点。

setheading(): 设置画笔的方向。与towards()配合可以设置画笔指向某个点,如setheading(towards(0, 0))可以设置画笔指向原点。

3. 画笔操作

circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。

left(angle): 画笔左转,传入任意一个目标角度。

right(angle): 画笔右转。

forward(distance): 画笔前进一段距离。

backward(distance): 画笔后退一段距离。

goto(x, y): 移动画笔到指定坐标。

4. 颜色填充

begin_fill(): 开始填充。

fillcolor(color): 设置图形中填充的颜色

end_fill(): 结束填充。

有了这些方法,就可以实现金牛图中的各种图案了。如画五瓣花轮廓的代码如下:

def draw_flower(a, color):    pencolor('red')    begin_fill()for j in range(5):for i in range(40):if 0 <= i < 20:                a = a - 0.08else:                a = a + 0.08            forward(a)            left(6)        right(168)    fillcolor(color)    end_fill()

实现举例

我的绘图顺序是从外到内,这样较小的图形会置于较大的图形之上,填充的颜色不会被遮挡。

最开始绘制的是外围的同心圆。先penup()提起画笔,sety()将画笔从圆心向下移动半径的距离,然后调整画笔方向,pendown()落下画笔,circle()画圆。

整个过程分了很多张截图,为了避免篇幅过长,就不全部放了。再放一张最后画眼睛的动图,可以参照上面同心圆的方式拆分步骤。

其他的图案,如果会相互覆盖,要先画大的图形,再画小的图形。如果不会相互覆盖,顺序可以随意调整。

总结

对比原图和turtle绘制的图形,整体上还是很像的,但部分细节并没有完全还原。因为没有原图的任何参数,绘制过程中全靠目测(像素尺子),很难避免误差,再花一些时间调试应该可以更像。

(0)

相关推荐

  • 牛年将至,你的祝福词准备好了吗?

    2021年的牛年,是不平凡的一年.疫情给我们带来了很多麻烦,但是生活还是要继续的,希望还是要有的.亲人.朋友之间的鼓励.祝福不能少. 1.牛年祝您转牛运:"牛"转新机,时时机运亨通 ...

  • 18张金牛图,张张牛气冲天!

    牛年来临之际 送你18张金牛图 愿你牛年大吉,好运不断 招财进宝,牛运亨通 ......................................... 牛转乾坤 ............... ...

  • Python|画出一个300像素的十字架

    前言后台收到了一个粉丝的提问:如何画出一个像素为300的十字架. 问题描述在python中如何画出一个像素为300的十字架.解决方案在python的众多第三方库中使用turtle库可以很好的解决大部分 ...

  • 牛年祝福语四字词语,简短的牛年祝福语贺词

    牛年祝福语四字词语,简短的牛年祝福语贺词

  • 用风水布局文昌塔让你金牛之年学事业牛气冲天

    2021年辛丑金牛之年就在眼前,此年你想在中考中超常发挥吗?你想在高考中金榜题名吗?你想在考研时心想事成吗?你想在事业上更上一层楼吗?那就用我们的传统文化通过对文昌塔合理摆放进行家居风水布局,让你在金 ...

  • Python爬取某网站文档数据完整教程(附源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本开发环境 Python 3.6 Pycharm 相关模块的使用 import osimp ...

  • 终于有人把Python算法-动态规划讲明白了,建议收藏!(附源码下载)

    多年工作经验,水平优秀的你,是否在面试中曾经陷入过算法的囚徒困境? 搞不清晦涩难懂的算法理论 自学效率低 付出了大量的学习时间,看到复杂多变的算法题,无从下手,一脸懵逼... 无论腾讯.阿里还是字节跳 ...

  • Python标准库模块之heapq

    该模块提供了堆排序算法的实现.堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点. 创建堆 heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.hea ...

  • Python汇总篇,200+Python标准库介绍

    今天给大家介绍一下200多个Python标准库,让大家对Python标准库有一个大致的认识. 关于Python标准库 01 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现 ...

  • 超全汇总!200 多个 Python 标准库介绍

    Python开发精选 分享 Python 技术文章.资源.课程.资讯. 10篇原创内容 公众号 今天给大家介绍一下200多个Python标准库,让大家对Python标准库有一个大致的认识. 关于Pyt ...

  • Python汇总篇,200 个Python标准库介绍(超全)

    ‍ 来源丨码里奥编程 大家好~今天给大家介绍一下200多个Python标准库,让大家对Python标准库有一个大致的认识. 关于Python标准库 01 众所周知,Python是一个依赖强大的组件库完 ...

  • Python 标准库之 xml.etree.ElementTree

    一.导入ET 在Python标准库中,ElementTree有两种实现方式:一种是纯Python的实现xml.etree.ElementTree,另一种是速度更快一点的xml.etree.cEleme ...

  • Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

  • Python标准库datetime中4种基本对象的用法

    ======================= 1)创建日期时间.日期.时间.时间差对象: 2)生成时间序列: 3)日期时间对象与字符串之间的转换: 4)其他常见运算 温馨提示: