你好,我是雨霖八珞,同名B站UP主。关注合集不迷路。以下内容为个人教学,真诚分享,欢迎交流。





在上一篇我们已经介绍过太极图的一种画法。
今天我们继续写代码,让太极图动起来。
要让太极图动起来,首先得会画太极图。
如何画太极图?
详细内容可以参看Python教程(23)turtle库综合案例:绘制太极图
建议伙伴们先看👆,再来看这篇文章
太极图动起来的本质
先来分析,如何让太极图动起来
我截取了太极图动图的三个瞬间

善于动脑筋的小伙伴发现了没有?
太极图还是那个太极图,画法还是一样,那不一样的是什么?
对了,就是开始绘制的起始位置和初始方向不一样
太极图能“动”起来,本质上就是不断地清空和重画,每次重画时角度改变一点点。
循环:
绘制下一个瞬间
停一会儿
清空
因为人的眼睛有视觉暂留特性,画面消失后,影像会在视网膜上不会马上消失,所以当我们快速切换画面时,大脑会自动把它们“连接”起来,形成连续运动的错觉。
简单回顾一下太极图的画法
太极图可以分为黑色部分(左)、白色部分(右)、小白点(上)、小黑点(下)

先看左侧的黑色部分轮廓的画法:

让小海龟先走到底部,方向向左
顺时针画红色半圆:turtle.circle(-200,180)
顺时针画绿色半圆:turtle.circle(-100,180)
逆时针画蓝色半圆:turtle.circle(100,180)
三个半圆首尾相连,画出一个封闭区域,填充成黑色

再看右侧的白色部分的画法:
从底部逆时针画半圆(红线所示),补全整个外框。

剩下的小黑点和小白点需要定位,画圆,相对来说比较简单。
让程序规范起来
在上一篇介绍太极图画法的文章中,我有一些小疏漏,依靠眼力去判断圆的半径,数字比较随意。
比如

截图中的-200,100,25都是什么?
可读性不好,修改起来也比较麻烦。
我们让程序规范一点。
如下图所示:
让最大圆(红色圆)的半径为r1,中间圆(绿色圆)的半径为r2,最小圆(蓝色圆)的半径为r3

规范后的程序如下图所示:

可以看到,不管是定位,还是画圆,都是用r1,r2,r3来表示,而不是直接用数字来表示。
这一点很重要,因为让太极图动起来的时候,就可以根据 r1 的值自动调整所有相关尺寸,不需要一个个去改。
旋转起来吧
前面分析过,太极图的画法不变,就是每次重画时改变起始位置和初始方向。
所以加了for循环,循环500次,不停地重画。

关键语句说明:
1、turtle.right(90+10*n)
在for语句里画太极图的部分只修改了画笔初始定位的这个语句
也就是每次重画时,让小海龟向右多偏移10°,然后往下走
于是就改变了画大圆的起始位置和初始方向。
n的初值为0(n=0在循环外设置)
每次进入循环就自动加1(在准备下一帧里有)
2、turtle.tracer(False)和turtle.update()
这两行语句需要搭配使用,不需要每次显示绘制过程,需要注意的是turtle.update()必须放在for循环里面,表示每次循环前都显示最终结果。
3、time.sleep(0.05)和 turtle.clear()
显示太极图画面后,需要停顿0.05秒,然后清除画面
你还可以怎么改呢?
修改r1的值,可以更改太极图的比例
修改time.sleep()的值,可以看看转动是否更流畅
修改turtle.right(90+10*n)的值,可以控制太极图旋转的速度
……
本篇文章的完整代码比较长,提供下载。
可以关注公众号,在后台回复关键词:太极图,即可获取下载链接。

本公众号内容均为原创。如需转载或引用,请先联系我。谢谢你的尊重。
觉得不错的话,伙伴们记得关注、转发和点赞哈!