养只乌龟来画画
前面学的都是一些比较枯燥的理论知识,今天和大家一起来学习比较有趣的东西——turtle库。
turtle库是python的一个标准库,不需要自行安装即可使用,可用于简单绘图,你可以想象一只沾满墨汁的乌龟在画布上爬来爬去,它经过的地方都留下了脚印就形成了一幅画。话不多说,我们先来尝尝鲜。
正方螺旋
代码演示
运行结果
turtle的方法
接下来我们正式进入学习,首先我想把一些turtle库中一些基础的方法列举出来,然后我们一个一个来实操一下,这样应该会比较容易掌握一些。
现在我们来写一段代码,把上面的方法(大部分)给用起来
运行结果
虽然运行结果正如我们设想的那样,但是显然代码的冗余度太高,我们必须将相同的代码封装成一个函数再进行调用。
可以看到,封装之后的代码简洁了很多,当然,由于参数太多,看起来也是头晕目眩的,而且这里还没有对参数进行容错性修正,但是相对于上面的代码来说确实是好很多了。
这里需要特别注意的是朝向问题,朝向与上一次终点的方向是一致的,并不一定是指向右边,如果不知道方向在哪,可以使用setheading()来对方向进行绝对定位。
circle()
上面还没有涉及到circle()方法,我们现在来看一下,它可以接收三个参数,分别是radius(number)--半径、extent(number,默认为None)--角度、steps(integer,默认为None)--边数
半径为正值时,逆时针作圆,半径为负值时,顺时针作圆。
还是撸代码给大家演示一下,应该比较容易明白
首先看一个简单的例子
代码我就不优化了,运行结果如下
也就是说,circle(100,360,3)的意思是外接圆的半径为100的三角形,类似地,我们还可以画正四边形,正五边形等等。
结果如下
接下来我们利用上面所学的知识,另外画一个比较复杂的图形——手机。
手机
画出来的效果如下
以上除了电池和星星之外,其它的都是很简单的东西,大家只要把坐标定好就行了。下面我给大家简单介绍一下我个人对于电池和星星的画法。
电池
我把电池分成了两部分,一部分是上部分的白色部分,另一部分是下部分的黑色部分。
其实要把电池画出来并不是难事,难的是要把代码简洁化。我是按下面的顺序画的
为了简单,我把所有长边的长度设置为一样,所有短边的长度也设置为一样。从上图可以看出,对于上半部分的线路转向问题,除了② 和⑤ 为左转之外,其余均为右转,而在1-7之间,又刚好只有2和5除以3的余数为2,所以我们可以利用这一点来简化代码;而对于边长问题,只有最后两条是长边,那么我们的代码就可以这样写:
而下半部分很简单,只要从第7步开始连续左转90度四次然后填充黑色即可。
电池就讲到这里,下面我们来学习星星的画法。
星星
为了简单化,我把星星的所有边长设置为一样。这样,我们就可以很好地利用一点:n个角的星星的底边组成正n多边形,而只要我们算出这个n多边形的内角,使星星的相邻的两个角的底边组成的角等于n多边形的内角即可。比如上面我画的星星是八个角,那么根据多边形内角的公式:内角=(n-2)*180/n,可以算出正八边形的内角为135。
为了说明转向的角度,下面我给大家画一个图比较容易说清楚。
图中的α为自己设定的值,值越大,星星的角就越尖,已知α,那么可以根据途中的公式求出β,比如我设置的α为130度,那么β就为85度, 然后循环就可以画出星星了。
有了这个思路,我们可以算出任意角的星星的式:β=α-360/n,然后根据这个公式画出任意角的星星
代码
最后附上手机的完整代码