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()
绘制过程和最终效果如下:
其实如果把前面的画正多变形和弧线的方法掌握了,只需要稍作修改就像能得到这把《生化危机》定制太阳伞。赶紧操练起来吧!
- Spring Cloud各组件调优参数
- 手把手教你设置 IntelliJ IDEA 的彩色代码主题
- 实用技巧:Hystrix传播ThreadLocal对象(两种方案)
- OpenDaylight与Mininet应用实战之流表操作
- 使用Spring Cloud Feign上传文件
- 用 TensorFlow 让你的机器人唱首原创给你听
- Spring Cloud限流详解(附源码)
- 手动安装Docker 17.06
- 详述使用 IntelliJ IDEA 解决 jar 包冲突的问题
- Spring Cloud各组件重试总结
- js或者php浮点数运算产生多位小数的理解
- 纠错帖:Zuul & Spring Cloud Gateway & Linkerd性能对比
- 你知道 Python 这五个有趣的彩蛋吗?
- [图解DS基础概念]Critical value,Alpha,Z-score,P-value 关系
- 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 数组属性和方法
- SwiftUI:与 MapKit 协调器通信
- SwiftUI:集成 MapKit
- Seurat教程 || 分析Cell Hashing数据
- 图数据库之TinkerPop Provider
- SwiftUI:用枚举切换视图状
- 【POI】maven引用POI的依赖,XSSFWorkbook依旧无法使用的问题。
- SwiftUI: 将数据写入文档目录
- 如何从YouTube搬运视频?| Mixlab代码入门
- 「MoreThanJava」Day 7:接口详解
- Python 基础(十一):面向对象
- 使用tensorflow进行音乐类型的分类
- Mac安装brew 及安装报错的解决办法【已解决】
- 为什么要停止过度使用置换重要性来寻找特征
- 5个可以帮助pandas进行数据预处理的可视化图表
- 聊聊dubbo-go的leastActiveLoadBalance