日期:2025/04/03 10:48来源:未知 人气:60
我们知道,使用Python中Turtle库可以绘制许多很有意思的图形。并且,Turtle库中的海龟形状也可以定义。
可爱的小海龟
不可思议!Python中海龟形状可以换,终于实现了Turtle库动画效果
python做简单的笑脸的编程,基础扎实,海龟绘图也可以游刃有余!
让可爱的海龟动起来!Turtle库做出的简单动画,使Python无所不能
上面内容实现了海龟形状的自定义。
绘图技巧
关于Turtle库的学习,网上有很多练习题,小伙伴们可以找来练练手,但网上的这些实例大多没有讲清楚,很多只是粘贴了代码。
思路很重要
大家在绘制的时候一定要搞清楚具体绘制步骤,比如先画什么、后画什么,这个顺序搞清楚之后,然后将每一个需要绘制的图形元素用代码来实现,实现过程一定要利用“巧劲”,这里的“巧劲”指的是Turle库中一些技巧画法。比如使用turtle.circle()就可以绘制正多边形(这个我们下文讲解)……等等,这些经验要多画才能总结出来哦!
好了,我们开始今天的内容吧!
一个简单的Turtle库绘图试题
前段时间,在回答网友问题时,网友出了这么一道Turtle库绘图题,题目是这样的,依次绘制下面的图形,找到规律后定义一个函数实现类似图形的绘制。
需要绘制的图形
需要实现这样的效果,我们知道,用海龟绘制正多边形很容易。但是如果要找到正多边形的中心点,将我们绘制的正多边形进行等分,该如何实现呢?
实现之前,我们先来看下效果。
完成图
庖丁解牛,我们先从简单的正多边形绘制开始!
绘制简单的正多边形
【分析】
我们知道,正n边形有如下特性:
有n条边,且每一条边长相等任意两条边夹角相等,夹角度数为(360 / n)如下图所示
原理
【代码实现】
下面,我们以正五边形为例进行绘制。
导入海龟
import turtle
准备一只海龟画笔,设置样式属性
t = turtle.Turtle()
t.pensize(2.5)
t.shape('turtle')
t.pencolor('#4F86F7')
先让乌龟向前一段距离(这段距离就是正多边形的边长,假设是200)
t.forward(200)
然后看下效果,如图箭头所示,我们将海龟朝向向左旋转(360/5)
分步2
t.left(360 / 5)
下图是效果
分步3
依次重复上面的步骤完成绘制,后续代码如下。
t.forward()t.left(/ 5)t.forward()t.left(/ 5)t.forward()t.left(/ 5)t.forward()t.left(/ )这样的代码很冗余,我们利用一个循环来实现。
i (5): t.forward() t.left(/ 5)再来看下效果。
绘制成功
成功绘制,对于其他正多边形绘制同原理。
如何划线等分正多边形
划线等分的问题,这里分为两种情况,对于正n边形n为偶数的情况,我们很容易找到这个中心点(图中红色点),但对于n为奇数的情况,想要找到这个中心点,需要利用数学函数进行计算。
如果能找到这个中心点,那么,等分正n边形直接将中心点跟每一个顶点连接起来即可。那么,问题来了,如何获取我们绘制的正n边形的顶点坐标呢?
【顶点坐标获取】
在绘制正多边形开始,我们对其进行记录,绘制完成时,终止记录,然后获取顶点坐标。代码如下:
获取正多边形顶点坐标
这样即可获取每个顶点的坐标值,但是,细心的小伙伴肯定发现了,这里的起点坐标(0,0)出现了两次,在后续编码时要考虑这个情况。
【中心点坐标获取】
这里需要注意两种情况,正n边形边数n为偶数的情况(这个容易获取),n为奇数的情况留给数学基础较为扎实的小伙伴去解决。
n为偶数时,中心点坐标计算公式如下图:
中心点计算公式
我们将这个计算公式封装成函数center_pos(),后续直接调用
过程不再赘述,直接看下代码
实现代码
我们来看下效果
等分正多边形效果
成功实现,那么,奇数边的等分效果如何实现呢?这里给小伙伴们留个悬念,大家自己解决。
下面,介绍一种前面提到的“巧劲”。利用这个技巧,可以不用考虑正多边形的边数问题。
利用circle()绘制正多边形
我们知道,在Turtle库中,circle()方法是用来绘制圆或者弧形的。但是,它还可以绘制正多边形,这里的原理不再讲解了,我们直接提供方法。
【circle绘制方法】
turtle.circle(radius, extent=None, steps=None)
第一个参数radius是半径,圆心坐标是(0,radius),半径就是radius。(radius可以是负数)第二个参数是 extent。是圆心角的大小。(可以是负数)第三个参数steps,是起点到终点由steps条线组成这里我们就用到了第三个参数,当steps赋值一个整数时,circle函数就会绘制一个正多边形,我们画一个试试看(此处略去turtle设置相关的一些操作)
t.circle(200, 5)
绘制正5边形
怎么样?一行代码搞定,不需要循环遍历了!更简单的是,这个正多边形的外切圆正是以正多边形中心点为圆心,半径为200绘制的圆,所以,我们不需要求中心点的坐标了,只需要将小乌龟摆正位置,依次连线就可以了。
【绘制正多边形及等分效果】
具体代码如下
绘制代码
完美运行。
实例的进一步改进
到这里就基本完成了,但是,如果我们需要每次绘制图形的时候加上图形标注,然后绘制一个从等边三角形到正9边形的等分过程,该如何解决呢?
【使用到的方法】
我们可以将上面函数t.done()换成t.reset(),这样每次绘制完成后重置画布即可。
在此基础上,我们利用turtle.write()方法在画布上绘制文字。
最后,我们显示绘制完成的文字,具体代码见下图。
源代码
来看下运行效果
程序运行效果
好了,今天的内容就到这里了,喜欢的小伙伴点个赞呗!今天的源代码获取方式很简单,关注我并私信"turtlepoly"即可获取。别忘了,还有一个pass没有完成哦,感兴趣的小伙伴可以练练手!
本文为作者原创,转载请注明出处,百家号:Python高手养成