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()
绘制过程和最终效果如下:
其实如果把前面的画正多变形和弧线的方法掌握了,只需要稍作修改就像能得到这把《生化危机》定制太阳伞。赶紧操练起来吧!
- Mycat适配oracle,各种坑
- 看完这个,不用写代码就能实现深度学习了
- Mycat -- linux安装与配置笔记
- 挖洞经验 | 记一次曲折的Getshell过程
- Java泛型一览笔录
- Java多态性的“飘渺之旅”
- Java动态代理一览笔录
- activiti-explorer部署笔记
- 没有准考证号我是如何暴力查询英语六级成绩的
- asp.net web api 2.2 基础框架(带例子)
- 走近科学:如何一步一步解码复杂的恶意软件
- OpenAI 开源机器人模拟 Python 库:优化API接口提升400%处理速度
- 远控木马上演白利用偷天神技:揭秘假破解工具背后的盗刷暗流
- 设计模式学习(三): 装饰者模式 (附C#实现)
- 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 数组属性和方法
- Linux Crontab Shell脚本实现秒级定时任务的方法
- Linux配置SSH和Xshell连接服务器的教程(图解)
- 增强Linux内核中访问控制安全的方法
- 使用Samba在Linux服务器上搭建共享文件服务的方法
- CentOS Yum编译安装MySQL 5.6
- Linux中环境变量配置的步骤详解
- 详解Linux搭建DNS服务器
- 一篇文章弄懂Linux磁盘和磁盘分区
- Ubuntu 17.04系统下源码编译安装opencv的步骤详解
- 如何在Linux中自定义bash命令提示符
- 详解如何在Linux上一次性批量重命名一组文件
- 虚拟机中centos修改时间的方法
- Ubuntu 18.04 Server 设置静态IP 的方法
- 嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)
- CentOS下MySQL的彻底卸载的几种方法