python之turtle模块-生化危机

时间:2022-07-22
本文章向大家介绍python之turtle模块-生化危机,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

今天我们就用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 math
import 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()

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

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