来 左边 跟我一起画彩虹
时间: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()
- WebService又一个不爽的地方
- 劲爆!小程序又增新功能!为落地微信智慧零售方案做铺垫!
- 5G光传送网技术
- 突破封闭 Web 系统的技巧之正面冲锋
- 建立本地的Blast数据库
- [biztalk笔记]-1.Hello World!
- 人工智能对政府意味着什么
- 利用Linq对集合元素合并、去重复处理
- 上高速就开启自动驾驶,但出车祸了!自动驾驶真不敢用哦!
- Gof设计模式之建造者模式(二)
- 数字化随笔-演进AI
- 有料 | 无人驾驶登机桥首次在深圳试行
- java学习:eclipse + Weblogic 12c + svn 集成开发环境搭建
- Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)
- 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 数组属性和方法
- 加密-解密详解
- 链表中的指针到底是啥 ?
- java8流处理遍历(仅供个人学习)
- Kubernetes 为什么需要策略支持
- iOS富文本之数字小角标
- 50. Vue名称案例-使用keyup事件监听
- 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树...
- 腾讯云-轻量应用服务器SaaS交付Discuz! Q
- LeetCode 刷题技巧与学习方法
- IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效
- SQL之单表查询
- Ubuntu19.10 编译运行C语言程序
- Linux 中杀死指定端口的进程
- Python:将给定字符串中的大写英文字母按以下对应规则替换
- 数据库原理02——关系数据库