Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >matlab计算多重复杂多边形重叠面积

matlab计算多重复杂多边形重叠面积

作者头像
巴山学长
发布于 2021-07-30 02:37:32
发布于 2021-07-30 02:37:32
2.5K01
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:1
代码可运行

最近在学习中遇到了求多边形图像重叠面积问题,经查阅资料发现polyshape函数可以解决此问题,下面总结一下本次学习的心得:

Polyshape函数的调用形式为:pgon =polyshape(x,y) 从由 x 坐标向量和对应的 y 坐标向量定义的二维顶点创建 polyshape。x 和 y 的长度必须相同,且至少要有三个元素。

这里我们以四个不规则五边形来举例,首先导入多边形:

poly1 = polyshape([22 100 100 50],[93 2 2 93 50]);

poly2 = polyshape([44 92 92 60],[65 5 4 100 60]);

poly3 = polyshape([77 100 100 70],[89 10 7 89 60]);

poly4 =polyshape([10 10 77 77 40],[110 25 25 56 30]);

绘图如下:

然后利用intersect函数求两个图形之间的重叠部分,调用格式如下:

polyout = intersect(poly1,poly2) 返回一个 polyshape 对象,它的区域是两个 polyshape 对象的几何交集。交集包含 poly1 和 poly2 的重叠区域。poly1 和 poly2 必须具有兼容的数组大小。

由于有四个图形,所以需要调用三次求解,代码如下:

polyout1 = intersect(poly1,poly2);

polyout2 = intersect(polyout1,poly3);

polyout3 = intersect(polyout2,poly4);

polyout3中便是求解结果,绘图如下:

可见求解结果是非常准确的。

还可以直接调用重叠部分坐标,代码为:polyout3.Vertices

重叠部分面接,代码为:polyout3.area

完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clear;clc;
% polyshape的函数说明:https://ww2.mathworks.cn/help/matlab/ref/polyshape.html
% 注意坐标要逆时针填写,前面填写x坐标,后面是对应的y坐标
poly1 = polyshape([2 2 100 100 50],[93 2 2 93 50]);
poly2 = polyshape([4 4 92 92 60],[65 5 4 100 60]);
poly3 = polyshape([7 7 100 100 70],[89 10 7 89 60]);
poly4 = polyshape([10 10 77 77 40],[110 25 25 56 30]);
% intersect的函数说明:https://ww2.mathworks.cn/help/matlab/ref/polyshape.intersect.html
polyout1 = intersect(poly1,poly2);
polyout2 = intersect(polyout1,poly3);
polyout3 = intersect(polyout2,poly4);
%% 绘图
% 绘制原始图
plot(poly1);
hold on
plot(poly2)
plot(poly3)
plot(poly4)
title('原始图');
% 绘制重叠部分图像
figure
plot(polyout3)
xlim([-20,120]);
ylim([-20,120]);
title('重叠部分图像');
%% 重叠部分坐标
x = polyout3.Vertices;
disp('重叠部分坐标为:')
disp(x);
%% 重叠部分面积
disp(['重叠部分面积为:',num2str(polyout3.area)]);

计算结果

感谢Miracle向matlab爱好者投稿,希望本文对大家学习matlab编程有所帮助。如果您愿意与大家分享您的matlab学习心得体会,在matlab爱好者公众号中回复"投稿"加群私信群主即可。

参考资料:

[1] https://ww2.mathworks.cn/help/matlab/ref/polyshape.html

[2] https://ww2.mathworks.cn/help/matlab/ref/polyshape.intersect.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MATLAB】进阶绘图 ( fill 填充二维多边形 | fill 函数 | 绘制文字 | text 函数 )
fill 函数参考文档 : https://ww2.mathworks.cn/help/matlab/ref/fill.html
韩曙亮
2023/03/29
2.3K0
【MATLAB】进阶绘图 ( fill 填充二维多边形 | fill 函数 | 绘制文字 | text 函数 )
【MATLAB】进阶绘图 ( 进阶绘图展示 | 对数图 | semilogx 半对刻度数图 | semilogy 半对数刻度图 | loglog 双对数刻度图 )
logspace 函数参考文档 : https://ww2.mathworks.cn/help/matlab/ref/logspace.html
韩曙亮
2023/03/29
2.5K0
【MATLAB】进阶绘图 ( 进阶绘图展示 | 对数图 | semilogx 半对刻度数图 | semilogy 半对数刻度图 | loglog 双对数刻度图 )
shapely.geometry.polygon 实现任意两个四边形的IOU计算
来源为华中科技大学白翔老师。import numpy as np import shapelyfrom shapely.geometry import Polygon,MultiPoint #多边形 line1=[2,0,2,2,0,0,0,2] #四边形四个点坐标的一维数组表示,[x,y,x,y....]a=np.array(line1).reshape(4, 2) #四边形二维坐标表示poly1 = Polygon(a).convex_hull #python四边形对象,会自动计算四个点,最
狼啸风云
2021/05/10
1.9K0
MATLAB中画折线图:plot函数的简单用法
关于MATLAB里柱状图的画法,以及如何在图例legend和轴标签xlabel里加入latex公式,请参考 https://blog.csdn.net/u014261408/article/details/102511989。
全栈程序员站长
2022/09/06
1.3K0
MATLAB中画折线图:plot函数的简单用法
matlab 画折线图并美化
ytick 和 xtick 设置x和y轴刻度线位置; 可以单独使用 xtick([1,4,7])
全栈程序员站长
2022/09/06
7510
基于Python Shapely的几何集合操作
shapely是基于笛卡尔坐标的几何对象操作和分析Python库,底层基于GEOS和JTS库。
MeteoAI
2019/09/17
6.8K0
模拟量差分和单端(iou计算方法)
人工修正后的每一个框与算法输出的所有框去计算IOU,取出IOU大于0.9的算法输出框
全栈程序员站长
2022/07/31
5800
模拟量差分和单端(iou计算方法)
【MATLAB】基本绘图 ( 保存图像 | saveas 函数 )
saveas 函数参考文档 : https://ww2.mathworks.cn/help/matlab/ref/saveas.html
韩曙亮
2023/03/29
1.9K0
【MATLAB】基本绘图 ( 保存图像 | saveas 函数 )
【MATLAB】基本绘图 ( text 函数 | annotation 函数 | 绘制图像示例 )
参考文档 : https://ww2.mathworks.cn/help/matlab/ref/text.html
韩曙亮
2023/03/29
2K0
【MATLAB】基本绘图 ( text 函数 | annotation 函数 | 绘制图像示例 )
matlab plot函数详解_MATLAB的plot
NO.3 绘制横轴为X,竖轴为Y的多组二维线图,Y值与X值一一对应,所有线条都使用相同的坐标区。
全栈程序员站长
2022/11/03
1.9K0
matlab plot函数详解_MATLAB的plot
【MATLAB】进阶绘图 ( Stairs 阶梯图 | stairs 函数 | Stem 离散序列数据图 | stem 函数 | 正弦函数采样 )
stairs 函数文档 : https://ww2.mathworks.cn/help/matlab/ref/stairs.html
韩曙亮
2023/03/29
1.6K0
【MATLAB】进阶绘图 ( Stairs 阶梯图 | stairs 函数 | Stem 离散序列数据图 | stem 函数 | 正弦函数采样 )
Matlab 2018b基础教程复习
最近写CFD的东西,发现主机造轮子太累,还是用matlab吧,有点忘记了,复习一下啦~
云深无际
2021/07/23
7990
Matlab 2018b基础教程复习
matlab计算机仿真与蒙特卡洛法【数学建模】
前言:在计算机出现之前,我们对数学模型的研究只能通过数学推导和实验研究两种方法。在此之后,我们可以通过在计算机上对实际问题的模拟、仿真求解模型。计算机仿真在数学建模中具有很重要的作用,而蒙特卡洛法则是计算机仿真中的一个重要方法。
巴山学长
2021/07/09
2.3K0
matlab计算机仿真与蒙特卡洛法【数学建模】
OSG绘制空间凹多边形并计算其面积
在OpenGL/OSG中,由于效率的原因,默认是直接显示的简单的凸多边形。如果直接强行显示凹多边形,渲染结果是不确定的。所以对于复杂的凹多边形,需要将其分解成简单的凸多边形,这个过程就是多边形分格化。在OSG中是通过osgUtil::Tessellator类来实现多边形分格化的。
charlee44
2019/08/13
1.6K0
【MATLAB】进阶绘图 ( Polar Chart 极坐标图 | polar 函数 )
polar 函数参考文档 : https://ww2.mathworks.cn/help/matlab/ref/polar.html
韩曙亮
2023/03/29
1.9K0
【MATLAB】进阶绘图 ( Polar Chart 极坐标图 | polar 函数 )
【MATLAB】进阶绘图 ( Boxplot 箱线图 | boxplot 函数 | Error Bar 误差条线图 | errorbar 函数 )
boxplot 函数文档 : https://ww2.mathworks.cn/help/stats/boxplot.html
韩曙亮
2023/03/29
1.9K0
【MATLAB】进阶绘图 ( Boxplot 箱线图 | boxplot 函数 | Error Bar 误差条线图 | errorbar 函数 )
判断点是否在多边形内的Python实现及小应用(射线法)
判断一个点是否在多边形内是处理空间数据时经常面对的需求,例如GIS软件中的点选功能、根据多边形边界筛选出位于多边形内的点、求交集、筛选不在多边形内的点等等。判断一个点是否在多边形内有几种不同的思路,相应的方法有:
蛰虫始航
2019/09/29
9.9K2
判断点是否在多边形内的Python实现及小应用(射线法)
封闭区域多边面积计算算法设计
过冷水最近遇到了这么一个问题,有一系列点组成了如上图所示的封闭图形,该如何求面积?
巴山学长
2021/03/15
1.2K0
博士来稿!如何计算自定义的风暴面积
这怎么搞呢?他找到一个使用polygon计算matplotlib绘图对象面积的方法
用户11172986
2024/06/20
1240
博士来稿!如何计算自定义的风暴面积
Python可视化 | xarray 绘图时序图
xarray 通过对plt.plot()的包装实现对线图的绘制。如前面所述,axes可以用变量进行标记,从而可以传递给底层matlibplot调用。
郭好奇同学
2021/07/30
3.5K0
Python可视化 | xarray 绘图时序图
推荐阅读
相关推荐
【MATLAB】进阶绘图 ( fill 填充二维多边形 | fill 函数 | 绘制文字 | text 函数 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验