分享

python之turtle模块-生化危机

 生信交流平台 2021-12-29

    相信很多人都看过《生化危机》,对里面的太阳伞公司应该都不陌生。太阳伞公司的图标如下。

    今天我们就用python的turtle模块来画这样一把太阳伞。

思路如下:

1. 太阳伞可以近似的看成是正八边形的衍生品,所以我们只要能画出其中的1/8,基本上就成功一半了。那么我们就先来画这个类似于等腰三角形的东西。我们从三角形的顶点开始,先画左边这条边。初始状态下,小海龟的箭头是水平向右的,要将箭头调整到等边三角形的左边那条边的方向。需要向右转90+1/2*inner_angle, inner_angle是等腰三角形的内角,如果是正八边形,那么应该是360/8。

2. 画左边这条边,就是向前移动圆的半径t.fd(r)

3. 之后需要向右要调整箭头的方向到内凹的圆弧的切线方向,通过计算可以得到,

(180-2*bottom_angel+90) = 270-2*bottom_angel

其中bottom_angle是等腰三角形的底角的度数。

4. 调用前面写的arc函数,来画一段圆弧,半径是r,角度是等腰三角形的内角的度数,inner_angle。

5. 再次调整箭头的方向,向左调整到等腰三角形右边那条边的方向,通过计算可以得到

(360-2*bottom_angle-90)=270-2*bottom_angle

6. 画右边这条边,就是向前移动圆的半径t.fd(r)。

7. 接下来就是把箭头的方向向右调整180度,再重复前面的2-6步。因此把2-6步定义成一个函数,叫single,也就是画太阳伞的每一瓣。

8. 关于颜色的设置,由于是循环画出来的,并且只有两种颜色,红色和白色,因此可以根据循环的次数的奇偶来设置颜色。

具体的代码也共享给大家。

import mathimport turtle

def polyline(t, n, length, angle): for i in range(n): t.fd(length) t.rt(angle)

def arc(t, r, angle): arc_length = 2 * math.pi * r * angle / 360 n = int(arc_length / 1.5) + 1 step_length = arc_length / n step_angle = float(angle) / n polyline(t, n, step_length, step_angle)

def single(t, r=100, n=5): inner_angle = 360 / n # print(inner_angle) bottom_angle = (180 - inner_angle) / 2 # print(bottom_angle) edge = round(math.sin(inner_angle / 2 * 2 * math.pi / 360) * r * 2, 4) # print(edge) t.fd(r) t.lt(270 - 2 * bottom_angle) arc(t, r, inner_angle) t.lt(270 - 2 * bottom_angle) t.fd(r) t.rt(180)

def pies(t, r, n): inner_angle = 360 / n t.rt(90 + inner_angle / 2) for i in range(n): t.begin_fill() if i % 2 == 0: t.fillcolor('red') else: t.fillcolor('white') single(t, r, n) t.end_fill()

bob = turtle.Turtle()pies(bob, r=100, n=8)turtle.mainloop()

绘制过程和最终效果如下:

其实如果把前面的画正多变形和弧线的方法掌握了,只需要稍作修改就像能得到这把《生化危机》定制太阳伞。赶紧操练起来吧!

正多边形和弧线的绘制方法和代码,可以参考:

Python之turtle模块-正多边形

python之turtle模块-弧线

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约