python与分形0015 - 【教程】绘制national flag
不知不觉,今天又周五,513330都快破6了,倒金字塔加仓都加到地下室了,真是服气了。
在前几节的教程中,我们玩了一些奇怪的事情,今天我们来玩个正经的事情,画一面五星红旗,也就是我们的国旗。
闲话不说,先上成品图。
<国旗图片>
绘制视频如下:
<国旗视频>
话不多说,还是上教程。
国旗和数学
在画国旗之前,我们需要弄清楚国旗的图形结构。
根据1949年9月28日中国人民政治协商会议第一届全体会议主席团公布的《国旗制法说明》,中华人民共和国国旗旗面为红色,长方形,其长与高为三与二之比,旗面左上方缀黄色五角星五颗。一星较大,其外接圆直径为旗高十分之三,居左;四星较小,其外接圆直径为旗高十分之一,环拱于大星之右。旗杆套为白色。
中华人民共和国国旗的红色象征革命。旗上的五颗五角星及其相互关系象征共产党领导下的革命人民大团结。五角星用黄色是为了在红地上显出光明,黄色较白色明亮美丽,四颗小五角星各有一尖正对着大星的中心点,这是表示围绕着一个中心而团结,在形式上也显得紧凑美观。
如下图所示:
<CSDN提示国旗图片违规,大家可以去查下百度百科>
我们把它转化为数学关系(假设国旗中心点为坐标系原点(0,0),每个格子长宽为L):
国旗的四个顶点为(-15L,10L),(15L,10L),(15L,-10L),(-15L,-10L)
大五角星中心点为(-10L,5L),半径为3L,水平放置
小五角星A中心点为(-5L,8L),半径为L,tan(A)=3/5
小五角星B中心点为(-3L,6L),半径为L,tan(B)=1/7
小五角星C中心点为(-3L,3L),半径为L,tan(C)=2/7
小五角星D中心点为(-5L,1L),半径为L,tan(A)=4/5
这个是我们后面绘图的基础,先放这里了。
开始画图
先来画旗面,是一个简单的矩形,其思路很简单:
从左上顶点开始,往东,seth(0),走30L的长度。
再往南,seth(-90),走20L的长度。
再往西,seth(180),走30L的长度。
最后往北,seth(90),走20L的长度。
fill为红色。
代码如下:
def rectangle(center, length_x, length_y, penc, fillc):turtle.pensize(1)turtle.fillcolor(fillc)turtle.pencolor(penc)turtle.up()pos=(center[0]-length_x/2, center[1]+length_y/2)turtle.goto(pos)turtle.begin_fill()turtle.down()turtle.seth(0)turtle.fd(length_x)turtle.seth(-90)turtle.fd(length_y)turtle.seth(180)turtle.fd(length_x)turtle.seth(90)turtle.fd(length_y)turtle.end_fill()
再来画五角星,我们先来分解,画一个正五角星。
同样的,我们先把数学关系弄出来,见下图:
假设圆的半径为L。
我们先来找到边长关系,因为:sin(54) = T / L0 且 sin(36) = T / L,得到:L0 = L * sin(36) / sin(54),即五角星的边长。
我们观察到五角星的边具有可复制性,A-C1-B重复画5次即可,那么我们先把A-C1-B画出来。
先不要下笔,从O出发,向北,seth(90),走L的长度,现在在A点。
向西南方向,seth(180+72),做准备。
落笔,走L0的长度,到C1点。
右转72度,right(72),走L0的长度,到B点。
至此,A-C1-B就画好了。
然后我们把方向转到下一次画图的方向,左转144度,left(144)。
重复3-6的动作4次,即可完成整个图形。
最后fill为黄色。
代码如下:
def star(pos, length, penc, fillc):turtle.pensize(1)turtle.fillcolor(fillc)turtle.pencolor(penc)L = length*math.sin(36*math.pi/180)/math.sin(54*math.pi/180)turtle.up()turtle.goto(pos)turtle.seth(90)turtle.fd(length)turtle.seth(180+72)turtle.down()turtle.begin_fill()for _ in range(5):turtle.fd(L)turtle.right(72)turtle.fd(L)turtle.left(144)turtle.end_fill()
五角星我们已经画出来了,现在我们需要给它旋转一个角度。
这时,我们发现,绘图的过程中,五角星的角度在down之前就已经调整好了,后面画5条折线的时候都是相对位置。
OK,我们把函数改吧改吧就可以了:
def star(pos, angle, length, penc, fillc):turtle.pensize(1)turtle.fillcolor(fillc)turtle.pencolor(penc)L = length*math.sin(36*math.pi/180)/math.sin(54*math.pi/180)turtle.up()turtle.goto(pos)turtle.seth(90+angle)turtle.fd(length)turtle.seth(180+72+angle)turtle.down()turtle.begin_fill()for _ in range(5):turtle.fd(L)turtle.right(72)turtle.fd(L)turtle.left(144)turtle.end_fill()
再来看,旋转20°:
star((0, 0), 0, 90, 'yellow', 'yellow')
star((150, 0), 20, 90, 'red', 'red')
OK,到此,万事俱备,只欠代码。
画国旗
所有的细节都说清楚了,直接上代码吧!!!
#coding: utf-8import turtle
import time
import mathturtle.setup(width=1.0, height=1.0, startx=None, starty=None)
turtle.ht()
turtle.tracer(0, 0)
turtle.bgcolor("black")turtle.pensize(1)def star(center, angle, length, penc, fillc):turtle.pensize(1)turtle.fillcolor(fillc)turtle.pencolor(penc)L = length*math.sin(36*math.pi/180)/math.sin(54*math.pi/180) turtle.up()turtle.goto(center)turtle.seth(90+angle)turtle.fd(length)turtle.seth(180+72+angle)turtle.down()turtle.begin_fill()for _ in range(5):turtle.fd(L)turtle.right(72)turtle.fd(L)turtle.left(144)turtle.end_fill()def rectangle(center, length_x, length_y, penc, fillc):turtle.pensize(1)turtle.fillcolor(fillc)turtle.pencolor(penc)turtle.up()pos=(center[0]-length_x/2, center[1]+length_y/2)turtle.goto(pos)turtle.begin_fill()turtle.down()turtle.seth(0)turtle.fd(length_x)turtle.seth(-90)turtle.fd(length_y)turtle.seth(180)turtle.fd(length_x)turtle.seth(90)turtle.fd(length_y)turtle.end_fill()W = 1200
H = 800
dW = W/30
dH = H/20#time.sleep(6)rectangle((0,0), W, H, 'red', 'red')
C0 = (-dW*10, dH*5)
A0 = 0
L0 = dW*3
star(C0, A0, L0, 'yellow', 'yellow')
C1 = (-dW*5, dH*8)
A1 = 90+math.atan(3/5)*180/math.pi
L1 = dW
star(C1, A1, L1, 'yellow', 'yellow')
C2 = (-dW*3, dH*6)
A2 = 90+math.atan(1/7)*180/math.pi
L2 = dW
star(C2, A2, L2, 'yellow', 'yellow')
C3 = (-dW*3, dH*3)
A3 = 90-math.atan(2/7)*180/math.pi
L3 = dW
star(C3, A3, L3, 'yellow', 'yellow')
C4 = (-dW*5, dH)
A4 = 90-math.atan(4/5)*180/math.pi
L4 = dW
star(C4, A4, L4, 'yellow', 'yellow')
python与分形0015 - 【教程】绘制national flag相关推荐
- python 曲线分析_大数据分析之Python计算KS值并绘制KS曲线
本篇教程探讨了大数据分析之Python计算KS值并绘制KS曲线,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. python实现KS曲线,相关使用方法请参考上篇博客-R语言实现K ...
- Python 数据科学入门教程:TensorFlow 聊天机器人
TensorFlow 聊天机器人 原文:Creating a Chatbot with Deep Learning, Python, and TensorFlow 译者:飞龙 协议:CC BY-NC- ...
- Python 数据科学入门教程:机器学习:回归
Python 数据科学入门教程:机器学习:回归 原文:Regression - Intro and Data 译者:飞龙 协议:CC BY-NC-SA 4.0 引言和数据 欢迎阅读 Python 机器 ...
- Python 数据科学入门教程:Matplotlib
Matplotlib 入门教程 来源:Introduction to Matplotlib and basic line 译者:飞龙 协议:CC BY-NC-SA 4.0 在线阅读 PDF格式 EPU ...
- 视频教程-Python数据分析与案例教程:分析人口普查数据-Python
Python数据分析与案例教程:分析人口普查数据 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙 ...
- 【图解SHA1杂凑算法】SHA1杂凑算法的Python实现保姆级教程 | 物联网安全 | 信息安全
系列索引:[图解安全加密算法]加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 起初写实验时找到的代码大多基于c/c++,python可参考的资料很少,所以借着这次实验的机会 ...
- Python 数据科学入门教程:OpenCV
图像和视频分析 原文:Images and Video Analysis 译者:飞龙 协议:CC BY-NC-SA 4.0 一.Python OpenCV 入门 欢迎阅读系列教程,内容涵盖 OpenC ...
- python二元函数图像在线绘制_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
Python实现的拟合二元一次函数功能示例[基于scipy模块] 发布时间:2020-08-31 00:46:24 来源:脚本之家 阅读:121 本文实例讲述了Python实现的拟合二元一次函数功能. ...
- Python数据分析与案例教程:分析人口普查数据-欧阳桫-专题视频课程
Python数据分析与案例教程:分析人口普查数据-379人已学习 课程介绍 本课程将带你全程实现对全国第六次人口普查数据的获取.分析.及可视化图表的制作 课程收益 熟悉和掌握使 ...
- Python之Numpy详细教程
NumPy - 简介 NumPy 是一个 Python 包. 它代表 "Numeric Python". 它是一个由多维数组对象和用于处理数组的例程集合组成的库. Numeric, ...
最新文章
- javascript实现缩略图
- python计算向量夹角代码
- RHEL5.4 iptables 配置详解(图)
- 你喜欢什么样的课堂?
- Mybatis 源码分析(一)配置文件加载流程
- python访问webservice接口
- [Linux] 通过shell给unix socket发送数据
- hadoop各组件及其作用
- 史陶比尔Staubli库卡kuka机器人切割加工首先电主轴德国sycotec
- JavaNIO读取文件
- qq传输文件为什么服务器忙,qq传送离线 接收文件很慢怎么回事
- 润乾打印控制解决方案
- 电容笔和Apple pencil的区别?适合ipad画画的电容笔推荐
- PyCharm关闭拼写检查(Typo提示)
- 电源正极电流检测:差分放大器与电流传感器放大器的对比
- python计算三阶行列式
- MySQL 中 You can‘t specify target table ‘表名‘ for update in FROM clause解决办法
- PowerDesigner 大小写转换
- nginx配置虚拟主机vhost
- Java操控Excel