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爬虫之爬虫编写全记录
Nov 06 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python使用Django实现博客系统完整版
Sep 29 Python
Python实现简单http服务器
Apr 12 Python
用Python写一段用户登录的程序代码
Apr 22 Python
对Python中数组的几种使用方法总结
Jun 28 Python
pymongo中group by的操作方法教程
Mar 22 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
Python 字典中的所有方法及用法
Jun 10 Python
用 python 进行微信好友信息分析
Nov 28 Python
python安装及变量名介绍详解
Dec 12 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
一个可以显示阴历的JS代码
2007/03/05 Javascript
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python3.6正式版新特性预览
2016/12/15 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
行政文员岗位职责
2013/11/08 职场文书
烹调加工管理制度
2014/02/04 职场文书
超市中秋节活动方案
2014/02/12 职场文书
就业协议书范本
2014/10/08 职场文书
小学见习报告
2014/10/31 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
python for循环赋值问题
2021/06/03 Python
实战Python爬虫爬取酷我音乐
2022/04/11 Python