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实现清屏的方法
Apr 30 Python
python复制文件的方法实例详解
May 22 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
用python实现百度翻译的示例代码
Mar 09 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
python向图片里添加文字
Nov 26 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
python 实现任务管理清单案例
Apr 25 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
PHP count()函数讲解
2019/02/03 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python入门学习指南分享
2018/04/11 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
Pycharm中如何关掉python console
2020/10/27 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
机电一体化职业规划书
2014/01/07 职场文书
干部行政关系介绍信
2014/01/17 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
中考标语大全
2014/06/05 职场文书
2014财务年度工作总结
2014/11/11 职场文书
会议邀请函
2015/01/30 职场文书
同事离别感言
2015/08/04 职场文书
python爬虫--selenium模块
2021/03/31 Python
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android