Python之turtle模块-饼状图
时间:2022-07-22
本文章向大家介绍Python之turtle模块-饼状图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天我们聊一聊如何用python的turtle模块来画饼状图。
首先观察图形特征,发现 饼状图基本上都是由多个等腰三角形构成的,因此只要能用turtle这个模块画出一个等腰三角形,这项任务就完成了一大半了。
基本思路:
- 初始状态下箭头的方向是水平向右,那么我们就先画等腰三角形的底。如果我们知道边长为r,该怎么计算底的长度呢?我搜索枯肠,终于唤醒了尘封的记忆。虽然已经不记得初中数学老师的名字了,但依稀的还记得sin,cos,tan。正多边形的顶角度数为360/n, 我们就称之为内角inner_angle吧。那么底(edge)的一半,应该是r*sin(inner_angle/2)。
- 接下来就是向前移动底边的长度, t.fd(edge)
- 接下来需要画等腰三角形右边这条边,首先需要把箭头的方向调整到跟这条边的方向一致。需要向左转180-bottom_angle(底角)。底角的度数可以通过(180-inner_angle)/2得到。
- 向前移动边的长度,t.fd(r)
- 再次向左调整箭头的方向,调整180-inner_angle.
- 向前移动r,来画左边这条边。
- 再次向左调整180-bottom_angle, 把底边再画一次。
- 最后一次调整箭头的方向,为画下一个等腰三角形做准备。这次需要向左调整180-2*bottom_angle,其实就是inner_angle,因为三角形内角和为180。
- 接下来就是重复1-8步,画第二个等腰三角形了。因为1-8步要重复的使用,我们就直接把它定义成一个函数,叫single。意思是画一个单独的部分。
具体的代码如下:
import math
import turtle
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(edge)
t.lt(180 - bottom_angle)
t.fd(r)
t.lt(180 - inner_angle)
t.fd(r)
t.lt(180 - bottom_angle)
t.fd(edge)
t.lt(180 - 2 * bottom_angle)
def pies(t, r, n):
for i in range(n):
single(t, r, n)
t.pu()
t.fd(150)
t.pd()
bob = turtle.Turtle()
bob.pu()
bob.bk(250)
bob.pd()
pies(bob, r=50, n=5)
pies(bob, r=50, n=6)
pies(bob, r=50, n=8)
pies(bob, r=50, n=10)
turtle.mainloop()
运行过程和结果如下:
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
- 人类的未来:儿童都能驾驶的汽车
- 论循证新闻的方法与意义——一种媒体融合背景下新闻生产方式创新
- 域名资讯:域名jiuhuang.com已搭建成“韭黄答题助手”网站
- Servlet开篇
- 浅谈中国域名的名与利
- 加密货币的火爆,tokens.com域名已50万美元成交
- 家具平台谷居完成2000万元融资,启用长尾双拼域名
- 如果未来的 AI 拥有意识,你舍得不理它吗?
- 微信这家人脸智慧时尚店可以“刷脸”试衣、付款
- 北京允许无人驾驶路测 难道是为方便圣诞老人送礼?
- 小程序新增多项功能,优化100多个功能点,堪称重磅!
- 人工智能的回报率:对冲基金嵌入机器学习?
- “人工智能助力上海科创中心建设”国际高峰论坛圆满结束
- 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 数组属性和方法
- 基于Apriori的数据关联分析 | 工业数据分析 | 冰水数据智能专题 | 4th
- 基于FP树的频繁项挖掘 | 工业数据分析 | 冰水数据智能 | 5th
- ICCV2019 高通Data-Free Quantization论文解读
- VBA解压缩ZIP文件10——解压-动态Huffman
- 海思NNIE之PFPLD训练与量化
- [译] 用 Truffle 插件自动在Etherscan上验证合约代码
- 二层网络上的以太坊智能合约: Optimistic Rollup
- 基于决策树的工业数据分类——数据智能
- Kestrel的ListenAnyIP和ListenLocalhost的区别
- 【为宏正名】什么?我忘了去上“数学必修课”!
- 第6章 Jenkins系统权限划分与授权管理
- Python爬虫新手教程: 知乎文章图片爬取器
- 《重构-代码整洁之道TypeScript版》第4天
- C++基础 杂记(一)
- 一种Cortex-M内核中的精确延时方法(ns级别)