前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pyhon海龟绘制木叶村徽章

Pyhon海龟绘制木叶村徽章

作者头像
用户1788308
发布2020-09-23 11:27:06
1.8K0
发布2020-09-23 11:27:06
举报
文章被收录于专栏:MyBlogs

turtle库是python标准库之一,入门级绘图库。import turtle之后即可使用。

以下是关于turtle的语句文档,可能有遗漏,但是够用了

画布

turtle.screensize() //设置画布像素背景颜色

代码语言:javascript
复制
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库绘制一个木叶徽章。

u=2432542517,173247638&fm=26&gp=0.jpg
u=2432542517,173247638&fm=26&gp=0.jpg

起初,大致一看,这应该是不规则的画圆,于是在大脑中将图案拆分成了N多线段,因为发现有的线段有圆的一部分,可以用

代码语言:javascript
复制
turtle.circle()

解决 虽然麻烦了点,不过还是值得一试!于是开始了沙雕一样的自己写方法

代码语言:javascript
复制
#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()

起初想过从最后那条小尾巴开始倒着画过来的,试了一下画着不太舒服就打算从中心开始画 画出来的样子不忍直视

微信图片_20191204211521.png
微信图片_20191204211521.png

这个三角太小了吧!加大一点

微信图片_20191204211603.png
微信图片_20191204211603.png

这是个啥!!这不是我想要的木叶(╯‵□′)╯︵┴─┴

不行,照这样画下去先不说我自己想打死自己,单是影迷朋友就能打死我了 重新分析了一下图,感觉可以用螺旋线和直线来画 整个图就分为螺旋线和三条直线,先整螺旋线 But! 我数学很差劲 于是补了一下

微信图片_20191204212655.png
微信图片_20191204212655.png

Sin(0)=y/r Cos(0)=x/r 于是可知 x=cos(0)*r y=sin(0)*x

然后又去看了一眼斐波那契螺旋线,真的只是看了一眼就放弃了

通过

代码语言:javascript
复制
x =math.sin(i*math.pi/180)*r
y =math.cos(i*math.pi/180)*r

能得到一个圆的坐标,然后根据坐标画线能画出一个圆 but,我们是要画螺旋线,在画圆的过程中逐渐扩大半径就能得到一个螺旋线 先试试康

代码语言:javascript
复制
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()
TIM截图20191204213812.png
TIM截图20191204213812.png

然后一个螺旋线就粗来了 想要图中效果就需要对数据进行调整 一番微调之后

微信图片_20191204214413.png
微信图片_20191204214413.png

大体形状就是介个亚子,将线条改细小尾巴画出来

微信图片_20191204214537.png
微信图片_20191204214537.png

还差两条线,通过判断循环变量的值来确定是否画线,于是出现了这样的东西

微信图片_20191204214723.png
微信图片_20191204214723.png

还有这样的:

微信图片_20191204214816.png
微信图片_20191204214816.png

离真相很近了!一番改改改之后

微信图片_20191204214931.png
微信图片_20191204214931.png

大体形状是有了,但是多出来的那条线需要处理掉 绘制完两调直线后提笔,回到坐标点在放笔,最后再调整一下小尾巴的角度,一切的一切就达到了预期

微信图片_20191204215112.png
微信图片_20191204215112.png

代码如下(太懒了,就不详细说明了):

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 画布
  • 画笔
  • 绘图命令
    • 画笔运动命令
      • 画笔控制命令
        • 全局控制命令
        • 绘制木叶徽章
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档