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利用beautifulSoup实现爬虫
Sep 29 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python实现批量下载图片的方法
Jul 08 Python
Python pandas常用函数详解
Feb 07 Python
使用Python对微信好友进行数据分析
Jun 27 Python
在python中使用with打开多个文件的方法
Jan 07 Python
python 实现敏感词过滤的方法
Jan 21 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
python数据类型可变不可变知识点总结
Mar 06 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
Python生成pdf目录书签的实例方法
Oct 29 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
CI框架集成Smarty的方法分析
2016/05/17 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
javascript实现计算器功能
2020/03/30 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
师范生教师实习自我鉴定
2013/09/27 职场文书
思想汇报范文
2013/11/04 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
本科毕业生自荐信
2014/05/26 职场文书
监督检查工作方案
2014/05/28 职场文书
大学生求职信
2014/06/17 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
刑事申诉状范文
2015/05/20 职场文书
时尚女魔头观后感
2015/06/04 职场文书
小学记事作文之200字
2019/08/06 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL