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根据时间生成mongodb的ObjectId的方法
Mar 13 Python
python采集百度百科的方法
Jun 05 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
python求最大连续子数组的和
Jul 07 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
python可迭代对象去重实例
May 15 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
Python实现简繁体转换
Jun 07 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 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 Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
php搜索文件程序分享
2015/10/30 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
在视频前插入广告
2006/11/20 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
python爬取淘宝商品销量信息
2018/11/16 Python
python图像处理入门(一)
2019/04/04 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
会计电算化应届生自荐信
2014/02/25 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
研讨会主持词
2014/04/02 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书