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编写分类决策树的代码
Dec 21 Python
Python 错误和异常代码详解
Jan 29 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
给我一面国旗 python帮你实现
Sep 30 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
Keras自定义IOU方式
Jun 10 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 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 中的str_replace 函数总结
2007/04/27 PHP
php读取msn上的用户信息类
2008/12/05 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
超清晰的document对象详解
2007/02/27 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
金融专业个人求职信范文
2013/11/28 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
生活小常识广播稿
2014/09/16 职场文书
房产公证委托书范本
2014/09/20 职场文书
村干部任职承诺书
2015/01/21 职场文书
诚实守信主题班会
2015/08/13 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL