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

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

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

最近在学习中遇到了求多边形图像重叠面积问题,经查阅资料发现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
运行
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
kubelet 启动流程分析
上篇文章(kubelet 架构浅析 )已经介绍过 kubelet 在整个集群架构中的功能以及自身各模块的用途,本篇文章主要介绍 kubelet 的启动流程。
田飞雨
2019/12/15
1.3K0
kubelet 启动流程分析
11.深入k8s:kubelet工作原理及其初始化源码分析
在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。
luozhiyun
2020/09/22
2K0
11.深入k8s:kubelet工作原理及其初始化源码分析
kubelet 启动流程分析
本来这篇文章会继续讲述 kubelet 中的主要模块,但由于网友反馈能不能先从 kubelet 的启动流程开始,kubelet 的启动流程在很久之前基于 v1.12 写过一篇文章,对比了 v1.16 中的启动流程变化不大,但之前的文章写的比较简洁,本文会重新分析 kubelet 的启动流程。
田飞雨
2020/01/05
2.4K0
kubelet源码解析
kubelet 在 Node 节点上负责 Pod 的创建、销毁、监控上报等核心流程,通过 Cobra 命令行解析参数启动二进制可执行文件,
thierryzhou
2022/10/30
8270
《一起读 kubernetes 源码》kubelet 如何创建 pod?
pod 是 k8s 调度的最小单位,也就是整个 k8s 的基础之一,那么如何创建 pod 就是我们今天的关键了。这也是为什么我将它放在第一章的原因。
LinkinStar
2023/12/30
2880
12.深入k8s:kubelet创建pod流程源码分析
在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syncLoop来完成不同的工作的。syncLoop会根据不同的上报信息管理pod的生命周期,这些操作都是通过HandlePods来实现的。
luozhiyun
2020/09/28
1.6K0
12.深入k8s:kubelet创建pod流程源码分析
Kubelet PLEG源码分析
A: 同其他Manager类似,PLEG在kubelet调用NewMainKubelet进行初始化时创建的。
Walton
2018/10/29
3.5K0
Kubelet PLEG源码分析
Kubelet 中的 “PLEG is not healthy” 到底是个什么鬼?
在 Kubernetes 社区中,PLEG is not healthy 成名已久,只要出现这个报错,就有很大概率造成 Node 状态变成 NotReady。社区相关的 issue 也有一大把,先列几个给你们看看:
米开朗基杨
2019/12/06
12.4K2
Kubelet 中的 “PLEG is not healthy” 到底是个什么鬼?
深入分析Kubernetes Critical Pod(二)
深入分析Kubernetes Critical Pod(一)介绍了Scheduler对Critical Pod的处理逻辑,下面我们再看下Kubelet Eviction Manager对Critical Pod的处理逻辑是怎样的,以便我们了解Kubelet Evict Pod时对Critical Pod是否有保护措施,如果有,又是如何保护的。
Walton
2019/03/12
1.5K0
Kubernetes Eviction Manager源码分析
Kubernetes Eviction Manager介绍及工作原理 这部分内容,请看我的前一篇博文:Kubernetes Eviction Manager工作机制分析 Kubernetes Eviction Manager源码分析 Kubernetes Eviction Manager在何处启动 Kubelet在实例化一个kubelet对象的时候,调用eviction.NewManager新建了一个evictionManager对象。 pkg/kubelet/kubelet.go:273 func New
Walton
2018/04/16
2.6K1
Kubelet 创建 pod 工作流程
Kubelet 作为 Kubernetes 的四大组件之一,维护了 pod 的整个生命周期,并且是 Kubernetes 创建 pod 的最后一环。本篇文章就来介绍一下 Kubelet 如何创建 pod。
CS实验室
2021/03/22
1.2K0
Kubelet 创建 pod 工作流程
Static pod实现与使用分析
Pod是kubernets中最基本的工作单元,一个Pod中可以包含一组容器。通常情况,Pod的创建流程是如下所示(以Bare Pod为例):
用户1360858
2021/07/07
2.6K0
Kubelet与CNI交互源码
kubelet通过调用 grpc 接口调用实现了 CRI 的 dockershim 完成 rpc 通信,CNI 是由 dockershim grpc server 中调用的
李鹤
2023/03/06
4730
Kubelet与CNI交互源码
K8S Pod解析
上篇文章我们在解析K8S Container时,提到Pod的整个生命周期都是围绕“容器”这个核心进行运转,毕竟,Pod 是 Kubernetes 集群中能够被创建和管理的最小部署单元,只有弄清楚其底层原理以及实现细节,我们才能够对Kubernetes生态体系有所了解。
Luga Lee
2021/12/09
5760
K8S Pod解析
kubelet 创建 pod 的流程
上篇文章介绍了 kubelet 的启动流程,本篇文章主要介绍 kubelet 创建 pod 的流程。
田飞雨
2019/12/15
1.2K0
kubelet statusManager 源码分析
本篇文章没有接上篇继续更新 kube-controller-manager,kube-controller-manager 的源码阅读笔记也会继续更新,笔者会同时阅读多个组件的源码,阅读笔记也会按组件进行交叉更新,交叉更新的目的一是为了加深印象避免阅读完后又很快忘记,二是某些代码的功能难以理解,避免死磕,但整体目标是将每个组件的核心代码阅读完。
田飞雨
2019/12/26
1.7K0
关于kubernetes垃圾回收那点事
使用kubernetes的过程中,为了保持磁盘的空间在一个合理的使用率,kubele提供了垃圾回收机制,kubelet的垃圾回收机制分为镜像的回收和container的回收。
聂伟星
2020/09/10
3.5K1
从源码看kubernetes与CNI Plugin的集成
libcni cni项目提供了golang写的一个library,定义了集成cni插件的应用需调用的cni plugin接口,它就是libcni。其对应的Interface定义如下: libcni/api.go:51 type CNI interface { AddNetworkList(net *NetworkConfigList, rt *RuntimeConf) (types.Result, error) DelNetworkList(net *NetworkConfigList, rt *R
Walton
2018/04/16
1.2K0
从源码看kubernetes与CNI Plugin的集成
深入分析Kubelet的动态配置
The basic workflow for configuring a Kubelet in a live cluster is as follows:
Walton
2019/01/07
3.7K0
深入分析Kubelet的动态配置
pod创建源码分析
1、k8s源码中针对pod的增删改查是在源码包/pkg/kubelet/kubelet.go中的syncLoop()进行。如下所示:
没有故事的陈师傅
2023/05/01
4960
pod创建源码分析
相关推荐
kubelet 启动流程分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档