Pyhon海龟绘制木叶村徽章
turtle库是python标准库之一,入门级绘图库。import turtle之后即可使用。
以下是关于turtle的语句文档,可能有遗漏,但是够用了
画布
turtle.screensize() //设置画布像素背景颜色
turtle.screensize(800,600,'green')#设置画布像素为800*600 画布背景为绿色
turtle.setup(width,height)//设置画布在屏幕上的位置,一般不用
画笔
turtle.pensize()//设置画笔的宽度
turtle.pencolor()//设置画笔的颜色
turtle.speed() //设置画笔的移动速度(1-10),越高越快
绘图命令
画笔运动命令
命令 |
说明 |
---|---|
turtle.forward(距离) |
向当前画笔方向移动距离像素长度 |
turtle.backward(距离) |
向当前画笔反方向移动距离像素长度 |
turtle.right(度) |
顺时针移动多少度 |
turtle.left(度) |
逆时针移动多少 |
turtle.pendown() |
放下笔 |
turtle.goto(x,y) |
将画笔移动到坐标x,y的位置 |
turtle.penup() |
提起移笔移动,不绘制图形,用于另起一个地方绘制 |
turtle.circle() |
画圆,半径为正(负),表示圆心在画笔的左(右)边画圆 |
setx() |
将当前X轴移动到指定位置 |
sety() |
将当前y轴移动到指定位置 |
setheading(angle) |
设置当前朝向为angle角度 |
home() |
设置当前画笔位置为原点,朝向东 |
dot(r) |
绘制一个指定直径和颜色的圆点 |
画笔控制命令
命令 |
说明 |
---|---|
turtle.fillcolor(colorstring) |
绘制图形的填充颜色 |
turtle.color(color1, color2) |
同时设置pencolor=color1, fillcolor=color2 |
turtle.filling() |
返回当前是否在填充状态 |
turtle.begin_fill() |
准备开始填充图形 |
turtle.end_fill() |
填充完成 |
turtle.hideturtle() |
隐藏画笔的turtle形状 |
turtle.showturtle() |
显示画笔的turtle形状 |
全局控制命令
命令 |
说明 |
---|---|
turtle.clear() |
清空turtle窗口,但是turtle的位置和状态不会改变 |
turtle.reset() |
清空窗口,重置turtle状态为起始状态 |
turtle.undo() |
撤销上一个turtle动作 |
turtle.isvisible() |
返回当前turtle是否可见 |
stamp() |
复制当前图形 |
turtle.write(s [,font=("font-name",font_size,"font_type")]) |
写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项 |
绘制木叶徽章
我是一个资深的影迷,所以就试着用turtle库绘制一个木叶徽章。
起初,大致一看,这应该是不规则的画圆,于是在大脑中将图案拆分成了N多线段,因为发现有的线段有圆的一部分,可以用
turtle.circle()
解决 虽然麻烦了点,不过还是值得一试!于是开始了沙雕一样的自己写方法
#Coding utf-8
import turtle as t
t.screensize(400,300,'white')#设置画布大小和背景色
#定义一个方法循环绘制,参数分别为:角度,像素长度,循环次数
def angler(ang,pi,would):
for hour in range(would):
t.right(ang)
t.forward(pi)
#设置画笔宽度颜色速度
t.pensize(5)
t.pencolor('black')
t.speed(10)
#绘制中心点直线
t.right(50)
t.forward(25)
angler(12,5,13)
t.left(1)
t.forward(2)
angler(3,1,15)
angler(2,2,5)
angler(3,3,10)
t.circle(-30,120)
angler(1.5,2,24)
angler(5,4,18)
t.right(5)
t.forward(60)
t.right(100)
t.forward(65)
t.backward(65)
t.left(100)
t.backward(60)
#angler(25,15,4)
#t.hideturtle()
t.done()
起初想过从最后那条小尾巴开始倒着画过来的,试了一下画着不太舒服就打算从中心开始画 画出来的样子不忍直视
这个三角太小了吧!加大一点
这是个啥!!这不是我想要的木叶(╯‵□′)╯︵┴─┴
不行,照这样画下去先不说我自己想打死自己,单是影迷朋友就能打死我了 重新分析了一下图,感觉可以用螺旋线和直线来画 整个图就分为螺旋线和三条直线,先整螺旋线 But! 我数学很差劲 于是补了一下
Sin(0)=y/r Cos(0)=x/r 于是可知 x=cos(0)*r y=sin(0)*x
然后又去看了一眼斐波那契螺旋线,真的只是看了一眼就放弃了
通过
x =math.sin(i*math.pi/180)*r
y =math.cos(i*math.pi/180)*r
能得到一个圆的坐标,然后根据坐标画线能画出一个圆 but,我们是要画螺旋线,在画圆的过程中逐渐扩大半径就能得到一个螺旋线 先试试康
import turtle as t
import math
t.screensize(800,600)#设置画布大小
r=0
#计算XY并且累加r绘制
for i in range(360):
x =math.sin(i*math.pi/180)*r
y =math.cos(i*math.pi/180)*r
t.goto(x,y)
r+=1
t.done()
然后一个螺旋线就粗来了 想要图中效果就需要对数据进行调整 一番微调之后
大体形状就是介个亚子,将线条改细小尾巴画出来
还差两条线,通过判断循环变量的值来确定是否画线,于是出现了这样的东西
还有这样的:
离真相很近了!一番改改改之后
大体形状是有了,但是多出来的那条线需要处理掉 绘制完两调直线后提笔,回到坐标点在放笔,最后再调整一下小尾巴的角度,一切的一切就达到了预期
代码如下(太懒了,就不详细说明了):
import turtle as t
import math
t.screensize(800,600,'black')#设置画布大小和背景色
#设置画笔颜色宽度速度
t.pencolor('white')
t.pensize(4)
t.speed(10)
r=0
for i in range(770):
x =math.sin(i*math.pi/180)*r
y =math.cos(i*math.pi/180)*r
t.goto(x,y)
if i == 550:
t.backward(60)
t.right(115)
t.backward(60)
t.penup()
t.goto(x, y)
t.pendown()
r+=0.07
t.right(200)
t.forward(37)
t.hideturtle()
t.done()
- 漫谈版本控制系统
- 带你零基础入门express
- 动态控制C4C UI元素的显示和隐藏
- 深度学习(deep learning)发展史
- 遗传算法简述
- Spark详解03Job 物理执行图Job 物理执行图
- 干货|Kotlin入门第一课:从对比Java开始
- Spark详解04Shuffle 过程Shuffle 过程
- Spark详解02Job 逻辑执行图Job 逻辑执行图
- Spark详解01概览|Spark部署|执行原理概览Job 例子
- Spark详解05架构Architecture架构
- SQL Server常用命令(平时不用别忘了)
- Spark详解06容错机制Cache 和 Checkpoint Cache 和 Checkpoint
- SQL Server 学习笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习之决策树二-C4.5原理与代码实现
- Vue Router懒加载
- 手把手教你,嘴对嘴传达------Tomcat部署和优化以及虚拟主机配置
- 微信小程序使用scroll-view做导航栏
- java解析XML的方法
- 听说Mysql你很豪横?-------------各种数据库介绍(为什么Mysql数据库能这么火热)
- Vuex的简单入门
- 听说Mysql你很豪横?-------------管理MySQL数据库基本操作命令
- Axios安装封装api接口
- 排障集锦:九九八十一难之第七难!mysql数据库登录密码忘记了
- Css实现上下无限跳动
- 排障集锦:九九八十一难之第八难!ERROR 2002 (HY000): Can‘t connect to local MySQL server
- Vue Router配置参数、404页面
- 机器学习之决策树三-CART原理与代码实现
- Vue Router路径切换过渡动画