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新手实现2048小游戏
Mar 31 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
简单介绍Python中的几种数据类型
Jan 02 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
python中单例常用的几种实现方法总结
Oct 13 Python
python pandas库的安装和创建
Jan 10 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
python数字类型和占位符详情
Mar 13 Python
Django基础CBV装饰器和中间件
Mar 22 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编码转换
2012/11/05 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python操作 hbase 数据的方法
2016/12/18 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
家长会邀请书
2014/01/25 职场文书
护士自我评价
2014/02/01 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
后备干部培训方案
2014/05/22 职场文书
活动总结格式
2014/08/30 职场文书
行政文员岗位职责
2015/02/04 职场文书
安全生产标语口号
2015/12/26 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS