python画七边形的角度_python之turtle模块-生化危机

1cea70545ee6446c831ff4ad80c32d09.png

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

8cf739d6777766789d5eae4d59d85f28.png

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

思路如下:

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

b6068b65f758817261e31ee451f3f53e.png

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()
​

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

ae038f9baa838880c3c92b0e18a0a8c2.png

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

python之turtle模块-生化危机​mp.weixin.qq.com
b0b8e0e480733f6f3f41e9cbd6912254.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值