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 Django框架实现自定义表单提交
Mar 25 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
matplotlib作图添加表格实例代码
Jan 23 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
python实现根据文件格式分类
Oct 31 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
pycharm 对代码做静态检查操作
Jun 09 Python
python 读取、写入txt文件的示例
Sep 27 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 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简单封装了一些常用JS操作
2007/02/25 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
单利模式及python实现方式详解
2018/03/20 Python
python 编码规范整理
2018/05/05 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
带病坚持工作事迹
2014/05/03 职场文书
鸡毛信观后感
2015/06/11 职场文书
公司开业致辞
2015/07/29 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技