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中关键字is与==的区别简述
Jul 31 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
在Python 不同级目录之间模块的调用方法
Jan 19 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
PHP统计代码行数的小代码
Sep 19 Python
Python二元赋值实用技巧解析
Oct 25 Python
opencv+python实现均值滤波
Feb 19 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 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&mysql(五)
2006/10/09 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
JS实现简单打字测试
2020/06/24 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
python解析xml模块封装代码
2014/02/07 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python探索之SocketServer详解
2017/10/28 Python
Django model反向关联名称的方法
2018/12/15 Python
Python os.access()用法实例
2019/02/18 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
个人对照检查材料
2014/02/12 职场文书
企业领导对照检查材料
2014/08/20 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
辞职信的写法
2015/02/27 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
护理培训心得体会
2016/01/22 职场文书