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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
Python可以用来做什么
Nov 23 Python
Python图像处理之图像拼接
Apr 28 Python
关于python类SortedList详解
Sep 04 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+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python实现线程池的方法
2015/06/30 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
django model通过字典更新数据实例
2020/04/01 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
文明礼仪事迹材料
2014/01/09 职场文书
服装创业计划书范文
2014/02/05 职场文书
学校督导评估方案
2014/06/10 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS