QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

可爱的小乌龟如何等分正多边形?揭示Python中Turtle库的一些技巧

日期:2025/04/03 10:48来源:未知 人气:60

导读:我们知道,使用Python中Turtle库可以绘制许多很有意思的图形。并且,Turtle库中的海龟形状也可以定义。可爱的小海龟不可思议!Python中海龟形状可以换,终于实现了Turtle库动画效果python做简单的笑脸的编程,基础扎实,海龟绘图也可以游刃有余!让可爱的海龟动起来!Turtle库做出的简单动画,使Python无所不能上面内容实现了海龟形状的自定义。绘图技巧关于......

我们知道,使用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高手养成

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告