打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
来 左边 跟我一起画彩虹

    最近被《野狼disco》洗脑了,其中一句歌词已经印在了我深深的脑海里。

        “来 左边 跟我一起画彩虹

         在你右边 再画个龙”

    那么今天就用python的turtle这个包, 来跟我一起画彩虹。先来缕一缕思路。

据毛泽东《菩萨蛮·大柏地》记载,

        “赤橙黄绿青蓝紫,
         谁持彩练当空舞?”

    那么彩虹由七种不同的颜色构成,赤,橙,黄,绿,青,蓝,紫。

所以我们需要画七条彩带。具体可以用到前面构建的arc函数来画弧线,两条平行的弧线可以构成一条彩带。彩带的宽度就是两条弧线半径的差值。将这个过程重复七次就能得到七彩虹。

下面来看具体代码

import turtleimport math

# 画多个短线段,这个函数有5个参数# t是turtle对象,n是线段的条数,direction控制画线段的方向# length是线段的长度,angle控制旋转的角度def polyline(t, n, direction, length, angle): for i in range(n): t.fd(length) if direction == 'right': t.rt(angle) elif direction == 'left': t.lt(angle)

# 画弧线的函数,这个函数有4个参数# t是turtle对象,r是圆的半径,direction是弧线的方向# angle是弧线的度数def arc(t, r, direction, angle): # 通过弧线的度数来计算弧线的长度 arc_length = 2 * math.pi * r * angle / 360 # 每条短线段的长度设定为3,这样肉眼看上去就是连续的 # 计算近似多边形的边数 n = int(arc_length / 3) + 4 # 计算精确的步长 step_length = arc_length / n # 计算每次的转角 step_angle = float(angle) / n # 调用polyline函数来画出弧线 polyline(t, n, direction, step_length, step_angle)

# 控制箭头移动的函数,这个函数有三个参数# t是turtle对象,direction控制移动方向# distance控制移动距离def move(t, direction, distance): # 提笔,再移动不会在画布上留下痕迹 t.pu() # 判断移动方向,fd向前,bk向后,移动相应距离 if direction == "fd": t.fd(distance) elif direction == "bk": t.bk(distance) # 放下笔,再移动会在画布上留下痕迹 t.pd()

# 画每条彩带的函数,这个函数有三个参数# t是turtle对象,r是彩带弧的半径,i是第几条彩带def single(t, r, i): # 设定箭头朝向正北 t.setheading(90) # 画第一条弧线,每次半径减少20, # 由于是用步长为3的多边形来近似弧线,每次画完都会有些许偏差 # 所有这里对半径和弧度做了一些补偿 arc(t, r - 20 * i + 2, "right", 180 + 0.08 * i) # 设定箭头朝向正西 t.setheading(180) # 画一条长度为20的直线 t.fd(20) # 设定箭头朝向正北 t.setheading(90) # 画第二条弧线,每次半径减少20,这里对弧度也有补偿 arc(t, r - 20 * (i + 1), "left", 180 + 1.2 + 0.08 * i) # 设定箭头朝向正西 t.setheading(180) # 画一条长度为20的直线 t.fd(20)

# 画彩虹的函数,这个函数有四个参数# t是turtle对象,r是弧的半径,bandwidth是彩虹的宽度,n是几条彩带def rainbow(t, r, bandwidth, n): # 彩带的颜色,这里列了7种颜色 colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'] # 循环n次,画出n条彩带 for i in range(n): t.begin_fill()        # 因为这里只提供了7种颜色,如果彩带条数多于7条        # 会除7取余 t.fillcolor(colors[i % 7]) single(t, r, i) t.end_fill() move(t, 'bk', bandwidth - 2)

bob = turtle.Turtle()move(bob, 'bk', 300)rainbow(bob, 280, 20, 7)turtle.mainloop()

结合视频来看,可以对整个过程更加清楚

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用Python画一朵玫瑰花
中秋节到了,送你一个Python做的Crossin牌“月饼”
Accesory Article Package Chapter--Package 1
Python标准库 之 turtle(海龟绘图)
《计算机二级Python语言程序设计考试》第9章:Python标准库概览
turtle库使用简介
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服