Python实现不规则图形填充的思路


Posted in Python onFebruary 02, 2020

核心思想:点动成线,线动成面。

以下图为例,要求填充扇子的扇面部分。

Python实现不规则图形填充的思路

一、绘制扇子:

首先要弄清楚它的结构,即能够用代码把扇子绘制出来。(只有先把不规则图形的结构分析清楚,才能进一步填充它。)

先画一个框架:

#调用的库
import math
import numpy as np
import matplotlib.pyplot as plt
#画图的基础设置
fig = plt.figure(1)
ax = fig.add_subplot(111)
plt.axis('off')
plt.axis('equal')
#画框架线条

#画两条圆弧
theta = np.arange(0.5*np.pi,np.pi,0.01)
for i in range(3):
  x = i * np.cos(theta)
  y = i * np.sin(theta)
  ax.plot(x,y,color='black',linewidth=0.7)
#画两条主扇骨
z = np.arange(0,2,0.01)
ax.plot(z * math.cos(math.pi/2), z * math.sin(math.pi/2), color='black',linewidth=0.7)
ax.plot(z * math.cos(math.pi), z * math.sin(math.pi), color='black',linewidth=0.7)

如图:

Python实现不规则图形填充的思路

再把扇子细节部分画出来:

#画10根扇骨
z = np.arange(0,1,0.01)
for i in range(11):
  ax.plot(z * math.cos(math.pi/2+i/10*math.pi/2), z * math.sin(math.pi/2+i/10*math.pi/2), color='black',linewidth=0.7)
#扇面分割为20小份
z = np.arange(1,2,0.01)
for i in range(0,21):
  ax.plot(z * math.cos(math.pi/2+i/20*math.pi/2), z * math.sin(math.pi/2+i/20*math.pi/2), color='black',linewidth=0.7)

这样就可以得到最开始的“素扇子”。

至此,我们也弄清了扇子的“数据”,扇面部分取1/4圆,扇骨部分通过np.arange()函数,把步长设置为0.01即可以创建一条半径,然后通过角度的正余弦变化构建扇骨,从而绘制出整个扇子。

二、填充扇子:

思路:如果两根扇骨的距离足够小,小到人眼难以分辨,当不同颜色的扇骨铺满扇面,就可以实现扇面的颜色填充。

#涂颜色
#选取一个涂色卡
color = ['#cde8f3','#91cfc9','#6bb3c0','#4198b9','#1e5670',
    '#2d4e76','#99bcdd','#c4e5ef','#f3fafa','#bbabd0',
    '#a16e8a','#643f5a','#cfbeb7','#f1ead7','#e99a9a',
    '#e67b79','#f7cece','#eec9bc','#e1f1ea','#91c7c2']

#点动成线
z = np.arange(1.005, 2, 0.01)#边缘修正0.005,露出扇子轮廓

#线动成面
I = np.arange(0,20,0.01)
for i in I:
  ax.plot(z * math.cos(math.pi/2+i/20*math.pi/2), z * math.sin(math.pi/2+i/20*math.pi/2), color=color[int(i)],linewidth=0.7,alpha=0.5)

如图所示:

Python实现不规则图形填充的思路

以上是我在实践过程中遇到无法使用Python库函数填充图形时采取的办法,该方法很好的诠释了数学中“点动成线,线动成面”的思想,仅提供参考,无普适价值。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现查询IP地址所在地
Mar 29 Python
python中使用%与.format格式化文本方法解析
Dec 27 Python
python实现画圆功能
Jan 25 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
Python操作qml对象过程详解
Sep 26 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
Python常用模块函数代码汇总解析
Aug 31 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
Python 如何实现文件自动去重
Jun 02 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 Python
Python ORM编程基础示例
Feb 02 #Python
Python 面向对象之类class和对象基本用法示例
Feb 02 #Python
flask 框架操作MySQL数据库简单示例
Feb 02 #Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 #Python
使用Python操作ArangoDB的方法步骤
Feb 02 #Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 #Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 #Python
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
Python中生成Epoch的方法
2017/04/26 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
tensorflow更改变量的值实例
2018/07/30 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
python爬虫要用到的库总结
2020/07/28 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
银行进社区活动总结
2014/07/07 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
人口与计划生育责任书
2015/05/09 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js