基于Python+Turtle实现绘制简易的大风车

目录
  • 前言
  • Turtle绘制大风车
  • 保存为jpg图片
  • 绘制不同角度的图片
  • 图片合成 gif 动图

前言

大风车,吱呀吱呦呦地转,

这里的风景呀真好看!天好看,地好看……

一首熟悉的歌曲,是否已经把你拉回了童年?

这首歌,估计是每个80后、90后的童年记忆!

小时候守着家里的电视,只要听到这个主题曲,就代表马上会有各种好看的动画片播出。

又是一年6·1儿童节,作为一个Python号,当然又要想想能用python做点什么啦——

Turtle绘制大风车

第一步,先观察风车的重要组成部分,四个扇叶和一个支撑杆。

其中扇叶可以通过构建一个函数,重复绘制4次获得。

以下是绘制风车扇叶的代码部分。

def draw_sector(col1,col2):
   turtle.color(col1,col1)
   turtle.circle(30,90)
   turtle.right(90)
   turtle.begin_fill()
   turtle.fd(120)
   turtle.right(90)
   turtle.fd(150)
   turtle.right(135)
   turtle.fd(150*(1.414)-30)
   turtle.end_fill()
   turtle.color(col2,col2)
   turtle.begin_fill()
   turtle.right(90)
   turtle.circle(30,90)
   turtle.right(90)
   turtle.fd(75*1.414-30)
    turtle.right(90)
   turtle.fd(150/1.414)
   turtle.right(135)
   turtle.fd(120)
   turtle.end_fill()
   turtle.right(90)

而我们只需要循环四次,即可获得风车的最核心部分。

# 绘制四个扇形
turtle.pensize(3)
draw_sector('green','darkgreen')
draw_sector((26,188,156),(22,160,133))
draw_sector((241,196,15),(243,156,18))
draw_sector((231,76,60),(192,57,43))

具体绘制过程如下图所示

注:为了能在turtle库使用RGB色彩表示法,小五额外在代码中添加一行:

turtle.Screen().colormode(255)

这样最核心的部分已经画完,那支撑杆就更简单了。

只需要设置合适的宽度和颜色,画一条线段即可。

turtle.pensize(50)
turtle.goto(0,32)
turtle.right(90)
turtle.color('lightgray')
turtle.fd(350)

最终呈现效果:point_down:

这样我们就画好了一个可以手持的风车,但故事才刚刚开始。

如何让大风车,吱呀吱呦地转起来,才是今天文章的重中之重。

这里我采用的方法是:

  • 用Turtle绘制旋转不同角度的大风车
  • 将Turtle绘制的界面保存成本地图片
  • 将所有角度的图片合成一个 gif 动图

上述这几步,都可以用python实现自动处理,那就简单多了。

保存为jpg图片

首先,海龟绘图(Turtle Graphics)库是一个非常好用的矢量绘图工具。

但想将其绘图结果保存为本地图片还需要好几步。

# 保存eps
ts = turtle.getscreen()
ts.getcanvas().postscript(file=r"结果.eps")

上面两行代码只能将Turtle绘图保存为eps矢量格式。

eps格式图片可以用PS打开,再手动另存为png、jpg等。但太麻烦了,学会了python肯定优先考虑python批量转换。

通过查找,发现可以用PIL来进行图片格式转换。

from PIL import Image
im = Image.open("结果.eps")
im.save("结果.jpg", "JPEG")

但是大家如果直接运行我代码的话,会有报错:OSError: Unable to locate Ghostscript on paths

意思是没有在环境变量中找到 Ghostscript,这就需要下载安装软件

官网下载地址

安装跟自己电脑匹配的版本,然后再配置环境变量。

比如我自己是直接安装到C盘上了,就要将C:\Program Files\gs\gs9.54.0\bin加到path上,来配置好环境变量。

最后,再重启下IDE或命令行,就可以正常用了(因为修改path后,当前运行环境下需重启才能生效)。

经过以上步骤的设置,我们以后就可以直接下载turtle的绘图结果了,而不再需要去截图。

绘制不同角度的图片

绘制不同角度的图片,其实有很多办法,这里我只讲一种方案。

圆周长 = 圆周率 × 半径 × 2,用字母公式就是C = 2πr。

我的方案就是:海龟箭头先绕着半径30的圆,每次前进不同的周长,然后再正常绘图。这样,就相当于绕着这个中心不停旋转地作图。

再搭配上前面学到的保存Turtle为保存jpg,这样就能生成360°不同角度的风车图片了。

for i in range(116):
   draw_windmill(i)

批量绘制+另存为

这样我们生成了大概100多张图片。

图片合成 gif 动图

如何将图片合成 gif 动图?

我直接参考了黄同学之前的文章[2]代码来用,关键的步骤都有注释。

这样就可以用python合成图片为gif动图了:point_down:

def func(DURATION):
   # 获取当前的工作路径
   path = os.getcwd()
   # 获取当前工作路径下的文件列表
   file_list = os.listdir(path)
   # 复制文件列表到另外一个列表
   jpg_list = file_list.copy()
   # 移除结尾不是png的图片,只保留结尾都是png的图片
   for file in file_list:
       if file[-3:]!= "jpg":
           jpg_list.remove(file)
   # 将图片中的数字,升序排列
   jpg_list.sort(key=lambda x: float(x[:-4]))
   # 获取每张图片的绝对路径,并获取每张照片的RGB通道值,将7张照片的RGB通道值,保存在一个列表中
   print(jpg_list)
   frames = []
   for png in jpg_list:
       image_path = os.path.join(path, png)
       frames.append(imageio.imread(image_path))
   # 将图片保存为gif图,并设置间隔时间
   gif_path = os.path.join(path, "my_gif.gif")
   imageio.mimsave(gif_path, frames, 'GIF', duration=DURATION)

设置好间隔时间,执行一下

func(0.008)

看看效果

旋转的手持大风车 :point_down:

池塘边的榕树上,知了在声声叫着夏天......

希望我画的这个大风车,能带给大家关于童年的回忆。

以上就是基于Python+Turtle实现绘制简易的大风车的详细内容,更多关于Python Turtle大风车的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python+Turtle绘制可爱的可达鸭

    目录 一.效果展示 二.代码详解 1.导入库 2.播放音乐 3.画可达鸭的头和身体外轮廓 4.画眼睛 5.画手 6.画嘴和脚 7.画头发 8.写文字 一年一度的六一儿童节又来了,祝大朋友小朋友节日快乐. 你有没有一瞬间,特别想要回到童年? 童年是一盒水彩笔,五颜六色精彩纷呈.童年是一幅漫画,新奇幻想思绪缤纷.童年是用水彩笔绘出的一幅漫画,一个追风的少年. 童年的时光总是安静又美好,我们总是盼望着长大,憧憬着未来的生活. 长大后,我们又总是在怀念,怀念过去简单又纯粹的自己. 本文主要介绍运用tur

  • Python利用Turtle绘制哆啦A梦和小猪佩奇

    目录 1.哆啦A梦 2.小猪佩奇 3.Python代码实现(哆啦A梦) 4.Python代码实现(小猪佩奇 ) 1.哆啦A梦 “只要把愿望系在竹竿上请求月亮女神,心愿便能达成”.我超喜欢这句话. 哆啦A梦的创造要追溯到1969年的某个截稿日,作者藤子·F·不二雄的家里突然闯进了一只小猫,虽然很快就要截稿了,但作者还是和小猫玩了起来,还替小猫挠虱子,而这一挠就是几个小时.等作者发现时间不够用的时候,已经来不及完成稿子.这时作者像热锅上的蚂蚁走来走去,突然踢到了女儿的不倒翁玩具,于是作者灵光一现,把

  • python用turtle库绘画圣诞树

    目录 前言 一.Turtle是什么? 二.使用步骤 1.引入库 2.turtle绘图的基础知识 三.圣诞树代码 总结 前言 圣诞节快到了,是不是想用python画一个可爱的圣诞树,我在各大网站都查了一下,都不太美观,然后我就学习了一下别人的代码改写了一下,自己加了一些东西,弄的好看一些了,给大家开源出来,欢迎大家指正学习,也欢迎转载,请注明出处哦~ 画出来的图形如图: 一.Turtle是什么? Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为

  • Python+Turtle绘制航海王草帽路飞详解

    目录 一.程序运行 1.效果展示-轮廓描绘 2.效果展示-颜色填充 二.实现过程 1.绘图数据下载 2.海龟绘图配置项 3.轮廓绘制 4.颜色填充:衣服.裤子 5.颜色填充:草帽.腰带 6.完整源码 一.程序运行 1.效果展示 - 轮廓描绘 看轮廓描绘效果: 2.效果展示 - 颜色填充 衣服和裤子颜色填充效果: 二.实现过程 1.绘图数据下载 获取地址 内容预览: 2.海龟绘图配置项 降低刷新率可提升绘制速度,值越大刷新频率越低,速度越快 t.tracer(5000) def set_trutl

  • Python+Turtle绘制可爱的多啦A梦的示例代码

    目录 1 送她的多啦A梦 2 白驹过隙 3 Python代码实现 1 送她的多啦A梦 一个哆啦A梦让她开心开心好久好久.我也很开心,昨天送了一个实体模型,今天用Python代码再弄一个送给她. 哆啦A梦(日语:ドラえもん,英语:Doraemon),旧译为机器猫,日本漫画<多啦A梦>及其衍生作品中的猫型机器人,本作的主人公.名字的意思是铜锣(ドラ)卫门(えもん). 哆啦A梦肚子上拥有四次元口袋,这个口袋直接通往四次元空间,再多的东西也放得下.害怕老鼠.平时的职责是照顾野比大雄. 2 白驹过隙 虽

  • Python+Turtle绘制幸运草的示例代码

    目录 一.效果展示 二.代码详解 1.导入库 2.播放音乐 3.定义画四叶草的函数 4.调用函数绘制四叶草 5.设置写文字的函数 幸运草又名四叶草,一般指四叶的苜蓿.或车轴草. 在十万株苜蓿草中,你可能只会发现一株是四叶草,机会率大约是十万分之一. 因此四叶草是国际公认的幸运象征. 本文主要介绍运用turtle库控制函数绘制四叶草,希望见者皆好运,祝福大家的生活都能幸福安康. 一.效果展示 在介绍代码之前,先来看下本文的实现效果. 可以把视频中的名字替换成你所想的名字,并参考下面步骤把Pytho

  • Python+Turtle绘制一个可爱的生日蛋糕

    每当有朋友过生日时,生日蛋糕自然是必不可少的,今天我们来看一下如何用 Python 画一个生日蛋糕. 本文我们用到的 Python 库包括:turtle.math 和 random. 实现的主要代码如下: import math as m import random as r import turtle as t t.speed(0) t.delay(0) # 设置背景颜色及窗口 t.bgcolor("#FFFFFF") t.setup(800, 600) t.penup() t.go

  • 基于Python+Turtle实现绘制简易的大风车

    目录 前言 Turtle绘制大风车 保存为jpg图片 绘制不同角度的图片 图片合成 gif 动图 前言 大风车,吱呀吱呦呦地转, 这里的风景呀真好看!天好看,地好看…… 一首熟悉的歌曲,是否已经把你拉回了童年? 这首歌,估计是每个80后.90后的童年记忆! 小时候守着家里的电视,只要听到这个主题曲,就代表马上会有各种好看的动画片播出. 又是一年6·1儿童节,作为一个Python号,当然又要想想能用python做点什么啦—— Turtle绘制大风车 第一步,先观察风车的重要组成部分,四个扇叶和一个

  • Python+Turtle动态绘制一棵树实例分享

    本文实例主要是对turtle的使用,实现Python+turtle动态绘制一棵树的实例,具体代码: # drawtree.py from turtle import Turtle, mainloop def tree(plist, l, a, f): """ plist is list of pens l is length of branch a is half of the angle between 2 branches f is factor by which bra

  • Python turtle库绘制菱形的3种方式小结

    绘制一个菱形四边形,边长为 200 像素.方法1和2绘制了内角为60和120度的菱形,方法3绘制了内角为90度的菱形. 方法1‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‮‬‫ import turtle as t ls = [30,-30,-150,150]#菱形各边的画笔绝对角度列表 for i in range(4): t.seth(ls[i]) #画笔转向相应绝对角度 t.forward(2

  • 基于Python+Tkinter实现一个简易计算器

    目录 设计原理 示例效果 主要代码 设计原理 从结构上来说,一个简单的图形界面,需要由界面组件.组件的事件监听器(响应各类事件的逻辑)和具体的事件处理逻辑组成.界面实现的主要工作是创建各个界面组件对象,对其进行初始化,以及控制各组件之间的层次关系和布局 示例效果 主要代码 import tkinter import math import tkinter.messagebox class Calculator(object): # 界面布局方法 def __init__(self): # 创建主

  • Python+Turtle实现绘制可爱的小仓鼠

    目录 一.效果展示 二.代码详解 1.导入库 2.播放音乐 3.定义画小仓鼠头的函数 4.定义画左眼和右眼的函数 5.定义画嘴的函数 一.效果展示 在介绍代码之前,先来看下本文的实现效果. 可以参考下面步骤把Python文件转化成exe,发给未安装Python的他/她. Pinstaller(Python打包为exe文件) 之前自己把 Python 文件打包成 exe 的时候,折腾了很久,本文将详细地讲述如何快速生成在不安装 Python 的电脑上也能执行的文件 1. 在 prompt 中运行

  • python turtle工具绘制四叶草的实例分享

    本篇文章介绍了python使用turtle库绘制四叶草的方法,代码很简单,希望对学习python的朋友有帮助. import turtle import time turtle.setup(650.,350,200,200) turtle.pendown() turtle.pensize(10) turtle.pencolor('green') #四叶草 def draw_clover(radius,rotate): #参数radius控制叶子的大小,rotate控制叶子的旋转 for i in

  • Python turtle库(绘制螺旋正方形)

    目录 turtle库绘制螺旋正方形 1.螺旋正方形 2.彩色螺旋正方形 第三方库turtle的应用 1.pip安装turtle库 2.绘图坐标系 3.turtle的画笔控制方法 4.turtle的图形绘制方法 5.简单应用示例 turtle库绘制螺旋正方形 1.螺旋正方形 import turtle #导入turtle库 turtle.pensize(2) #设置画笔的宽度(2) for i in range(100): #循环(画)100次 turtle.fd(i + (i * 2)) #每次

  • 基于python的Tkinter实现一个简易计算器

    本文实例介绍了基于python的Tkinter实现简易计算器的详细代码,分享给大家供大家参考,具体内容如下 第一种:使用python 的 Tkinter实现一个简易计算器 #coding:utf-8 from Tkinter import * import time root = Tk() def cacl(input_str): if "x" in input_str: ret = input_str.split("x") return int(ret[0]) *

  • Python利用turtle库绘制彩虹代码示例

    语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- from turtle import * def HSB2RGB(hues): hues = hues * 3.59 #100转成359范围 rgb=[0.0,0.0,0.0] i = int(hues/60)%6 f = hues/

  • Python使用Turtle模块绘制国旗的方法示例

    turtle模块 turtle模块:python内置的绘图工具 turtle(海龟)模块,我们是用它来进行画图的,基本上就是画简单的直线,点,和曲线. 你可以把它想成一个小海龟,在沙滩上行走,然后留下的各种痕迹,使用Turtle模块可以绘制很多精美的图形. 基本操作(Turtle方法) turtle.forward(step):前进step个像素 turtle.back(step):后退step个像素 turtle.right():右转一个角度 turtle.left():左转一个角度 turt

随机推荐