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中为feedparser设置超时时间避免堵塞
Sep 28 Python
详解Django中的权限和组以及消息
Jul 23 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
Python实现的个人所得税计算器示例
Jun 01 Python
Python2与Python3的区别实例总结
Apr 17 Python
python面向对象 反射原理解析
Aug 12 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
python实现磁盘日志清理的示例
Nov 05 Python
Python序列化模块JSON与Pickle
Jun 05 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获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python中函数传参详解
2016/07/03 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
python命令 -u参数用法解析
2019/10/24 Python
django修改models重建数据库的操作
2020/03/31 Python
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
2014年社区宣传工作总结
2014/12/02 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
httpclient调用远程接口的方法
2022/08/14 Java/Android