来 左边 跟我一起画彩虹
时间:2022-07-22
本文章向大家介绍来 左边 跟我一起画彩虹,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近被《野狼disco》洗脑了,其中一句歌词已经印在了我深深的脑海里。
“来 左边 跟我一起画彩虹
在你右边 再画个龙”
那么今天就用python的turtle这个包, 来跟我一起画彩虹。先来缕一缕思路。
据毛泽东《菩萨蛮·大柏地》记载,
“赤橙黄绿青蓝紫, 谁持彩练当空舞?”
那么彩虹由七种不同的颜色构成,赤,橙,黄,绿,青,蓝,紫。
所以我们需要画七条彩带。具体可以用到前面构建的arc函数来画弧线,两条平行的弧线可以构成一条彩带。彩带的宽度就是两条弧线半径的差值。将这个过程重复七次就能得到七彩虹。
下面来看具体代码
import turtle
import 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()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 轻松掌握Git开发(四)分支操作
- 一文搞定pandas的透视表
- Spring 日志输出错误字符 -e[0;39m e[2m[
- linux不支持所有命令的解决办法
- linux系列之常用运维命令整理笔录(小结)
- 轻松掌握Git开发(五)远程库的基本操作
- GitHub竟然还有这些骚操作,赶紧学起来
- leetcode之单词规律
- 内存溢出及解决方案
- 3分钟短文:Laravel控制器用法光速入门
- Linux查看ip的实例方法
- Ubuntu18.04通过源码安装Odoo14的教程
- Linux系统中SSH服务基于key认证实践的过程
- linux防墙iptables详细介绍、配置方法与案例
- Linux unlink函数和删除文件的操作方法