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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
详细介绍Python的鸭子类型
Sep 12 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
Python selenium根据class定位页面元素的方法
Feb 26 Python
python分布式编程实现过程解析
Nov 08 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
Python如何在DataFrame增加数值
Feb 14 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
python模块与C和C++动态库相互调用实现过程示例
Nov 02 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
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python制作数据导入导出工具
2015/07/31 Python
详解Python中heapq模块的用法
2016/06/28 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
parser.add_argument中的action使用
2020/04/20 Python
python 读取.nii格式图像实例
2020/07/01 Python
运动会通讯稿50字
2014/01/30 职场文书
粗加工管理制度
2014/02/04 职场文书
社区居务公开实施方案
2014/03/27 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
给老婆的保证书
2015/01/16 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
详细介绍python类及类的用法
2021/05/31 Python
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫