Python实操笔记(2)——海龟绘图法绘制有层次感的奥运五环

绘制有层次感的奥运五环

在这里插入图片描述

五环的尺寸

以圆环内圈半径为单位1,外圈半径为1.2;相邻圆环圆心水平距离2.6;
两排圆环圆心垂直距离为1.1。颜色从左到右依次时蓝、黄、黑、绿、红。
在实际绘图中,将内圈设为50,外圈为60,相邻圆环水平距离为130,两排圆环圆心垂直距离为55.
首先推断出圆环的坐标,我们设最左边的点为(0,0),则从左到右最左边的点依次为(0,0),(65,-55),(130,0),(195,-55),(260,0)

说明

绘制有层次感的奥运五环其实不难,就是有点麻烦。我的初步想法是将每个环分成不同的部分,然后分别绘制,而不是一个画一整个圆。
所以我把五环分成了三个层次

第一层(最底层)

第一层是上面三个环被遮住的部分
也就是在这里插入图片描述
我们为了绘图的方便性将它分成不同的部分

在这里插入图片描述

第二层(中间层)

第二层压在第一层上
中间层就是下面两个环
中间层的绘制特别方便,当然这也是精心设计的。
在这里插入图片描述

第三层(顶层)

顶层压在第二层上
在这里插入图片描述

开始行动

绘制第一层

第一层有4个部分
蓝色(小)
在这里插入图片描述
大致思路是
从起点(0,0)开始,先找到位置,再围成一个封闭的图形

#蓝色45°
turtle.setheading(90) 	#设置箭头方向
turtle.penup()			#抬起?(这样笔迹就不会显示出来)
turtle.circle(-60,225)		#顺时针转,半径为60,旋转的圆心角为225°
turtle.color("blue","blue")#设置pencolor和fillcolor
turtle.pendown()		#放下?(这样笔迹就会显示出来)
turtle.begin_fill()		#开始填充颜色
turtle.circle(-60,45)		#顺时针转,半径60,旋转的圆心角为45°
turtle.right(90)			#顺时针旋转90°
turtle.forward(10)			#向前走10个像素点
turtle.right(90)
turtle.circle(50,45)			#逆时针转,半径为50,旋转的圆心角为45°
turtle.right(90)
turtle.forward(10)
turtle.end_fill()			#填充颜色结束,在其中的封闭图形都会被填充上fillcolor

黑色(长)
在这里插入图片描述
大致思路是
直接将光标放到黑色环形的顶点,然后围成一个封闭的图形

#黑色135°
turtle.penup()
turtle.setposition(190,60)		#直接将海龟放到黑色环形的最顶点
turtle.setheading(-90)			#设置向下的方向
turtle.pendown()
turtle.color("black","black")
turtle.begin_fill()
turtle.forward(10)
turtle.right(90)
turtle.circle(50,135)
turtle.left(90)
turtle.forward(-10)
turtle.left(90)
turtle.circle(-60,135)
turtle.end_fill()

剩下的两个图形其实和之前两个差不多。
关键点就是要找到开始画图的点
还有一点不同就是颜色要换。
大家可以自己敲一下代码

绘制第二层

第二层是最简单的一层
只要找到初始点,然后画两个圆,再在两个圆之间填充上颜色就行。
但是
上面说了

begin_fill()
之间的封闭图形都会被填上颜色
end_fill()

如果我们这样写代码

turtle.penup()
turtle.setposition(65,-55)
turtle.setheading(90)
turtle.pendown()
turtle.pencolor("yellow")
turtle.fillcolor("yellow")
turtle.begin_fill()
turtle.circle(60)
turtle.right(90)
turtle.forward(10)
turtle.right(90)
turtle.circle(50)
turtle.end_fill()

竟然可以得到一个圆环(○´・д・)ノ
在这里插入图片描述
但是这样写

turtle.penup()
turtle.setposition(65,-55)
turtle.setheading(90)
turtle.pendown()
turtle.pencolor("yellow")
turtle.fillcolor("yellow")
turtle.begin_fill()
turtle.circle(-60)
turtle.right(90)
turtle.forward(10)
turtle.left(90)	#这里改动
turtle.circle(-50)	#这里改动
turtle.end_fill()

就不能得到一个圆环
在这里插入图片描述
???
我当初写这个的时候是这么做的
画两个半圆环,然后填充上颜色。代码如下

turtle.penup()
turtle.setposition(65,-55)
turtle.setheading(90)
turtle.pendown()
turtle.pencolor("yellow")
turtle.fillcolor("yellow")
turtle.begin_fill()
turtle.circle(-60,180)
turtle.right(90)
turtle.forward(10)
turtle.right(90)
turtle.circle(50,180)
turtle.right(90)
turtle.forward(10)
turtle.end_fill()
turtle.setheading(-90)
turtle.begin_fill()
turtle.circle(60,180)
turtle.right(90)
turtle.forward(-10)
turtle.right(90)
turtle.circle(-50,180)
turtle.right(90)
turtle.backward(10)
turtle.end_fill()
绘制第三层

说到这里感觉也没什么好说的了,相信大致方法大家都已经掌握了。
找到开始的位置,然后画出一个封闭图形,最后填充颜色。
大家可以自己亲手试试。

完成的动图

在这里插入图片描述

后记

画一个有层次感的五环其实并不困难,最主要的其实还是麻烦。
如果大家有什么更简单的方法,可以和我交流。
完整的代码在附录里。
如果这篇文章,或者代码有问题,可以在评论区指出,谢谢大家!

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值