用Matlab求解绘制2D散点(x y)数据的最小外接圆、沿轴外接矩形

news2024/9/20 8:51:21

用Matlab求解绘制2D散点(x y)数据的最小外接圆、沿轴外接矩形

  • 0 引言
  • 1 原理概述即代码实现
    • 1.1 最小外接圆
    • 1.2 沿轴外接矩形
  • 2 完整代码
  • 3 结语


0 引言

  本篇简单介绍下散点数据最小外接圆沿轴外接矩形的简单原理matlab实现过程

1 原理概述即代码实现

1.1 最小外接圆

  求解散点外接圆关键是找到外接圆的圆心最小半径,假设有散点数据集 [ x i , y i ] [x_{i},y_{i}] [xi,yi],可以通过以下步骤求解外接圆

(1)分别取 x x x的平均和 y y y的平均,可以得到最小外接圆的圆心坐标

(2)遍历/循环每个散点,通过 ( x i − x ‾ ) 2 + ( y i − y ‾ ) 2 \sqrt{(x^{i}-\overline{x})^2+(y^{i}-\overline{y})^2} (xix)2+(yiy)2 得到每个散点距圆心的距离,然后取距离的最大值即为最小外接圆的半径

% 主过程及图示部分,调用的函数在下一部分
clc;clear;
n = 100;
x = rand(n,1); % 随机数
y = rand(n,1);

figure(1)
scatter(x,y,'o')
hold on

% 绘制圆(方法1)
[center_x,center_y,r] = maxBoundCycle(x,y);
para = [center_x-r, center_y-r, 2*r, 2*r];
rectangle('Position', para, 'Curvature', [1 1],'EdgeColor','g',LineStyle='-.');

% 绘制圆(方法2)
hold on
theta = 0:pi/50:2*pi; %角度[0,2*pi] 
xx = center_x + r*cos(theta);
yy = center_y + r*sin(theta);
plot(xx,yy,'o')

1.2 沿轴外接矩形

  通常外接矩形指的是面积最小的外接矩形沿轴外接矩形(自己给命的名😜)就是矩形的长、宽分别和x轴、y轴平行的矩形。沿轴外接矩形的原理与上面介绍的外接圆的原理相似, 关键是求矩形的四个角点的坐标。仍假设有散点数据集 [ x i , y i ] [x_{i},y_{i}] [xi,yi],具体步骤如下:

(1)分别取 x x x的平均和 y y y的平均,可以得到沿轴外接矩形的绘图中心坐标;

(2)遍历/循环每个散点的x坐标,根据 ( x i − x ‾ ) {(x^{i}-\overline{x})} (xix),计算x方向距中心点的距离 d x i dx_{i} dxi,取 d x i dx_{i} dxi最大值 d x m a x + x ‾ dx_{max}+\overline{x} dxmax+x和最小值 d x m i n + x ‾ dx_{min}+\overline{x} dxmin+x 得到沿X轴矩形的最小值 x m i n x_{min} xmin和最大值 x m a x x_{max} xmax

(3)同理在y方向上执行如(2)中相同的计算过程,得到y轴的最小值 y m i n y_{min} ymin和最大值 y m a x y_{max} ymax

(4)得到矩形4个角点的坐标,就可以构造出一个封闭图形,即为所需矩形;

% 主程序及绘图示例,所需函数在下一部分
clc;clear;
n = 100;
x = rand(n,1); % 随机数
y = rand(n,1);

figure(1)
scatter(x,y,'o')
hold on

% 散点x y最大外接矩形
hold on
[boundary] = maxBoundRect(x,y);
plot(boundary(:,1),boundary(:,2),Color='b',LineStyle='-',LineWidth=1.2);

2 完整代码

💦💦💦💦💦

  代码综示,包含计算过程和绘图方法:

%% 散点最大外接圆 
clc;clear;
n = 100;
x = rand(n,1); % 随机数
y = rand(n,1);

figure(1)
scatter(x,y,'o')
hold on

% 绘制外接圆(方法1)
[center_x,center_y,r] = maxBoundCycle(x,y);
para = [center_x-r, center_y-r, 2*r, 2*r];
rectangle('Position', para, 'Curvature', [1 1],'EdgeColor','g',LineStyle='-.');

% 绘制外接圆(方法2)
hold on
theta = 0:pi/50:2*pi; %角度[0,2*pi] 
xx = center_x + r*cos(theta);
yy = center_y + r*sin(theta);
plot(xx,yy,'o')

% 散点x y外接矩形(沿轴)
hold on
[boundary] = maxBoundRect(x,y);
plot(boundary(:,1),boundary(:,2),Color='b',LineStyle='-',LineWidth=1.2);
% 计算散点外接矩形(沿轴)
function [boundary] = maxBoundRect(x,y)
	center_x = mean(x);
	center_y = mean(y);
    listx = (x - center_x);
    I = find(listx < 0);
    x1 = listx(I);
    minx = min(x1) + center_x;
    I = find(listx >= 0);
    x1 = listx(I);
    maxx = max(x1) + center_x;

    listy = (y - center_y);
    I = find(listy < 0);
    y1 = listy(I);
    miny = min(y1) + center_y;
    I = find(listy >= 0);
    y1 = listy(I) ;
    maxy = max(y1) + center_y;

    boundary = zeros(5,2);
    boundary(1,:) = [minx,miny];
    boundary(2,:) = [minx,maxy];
    boundary(3,:) = [maxx,maxy];
    boundary(4,:) = [maxx,miny];
    boundary(5,:) = [minx,miny];

end
% 计算散点外接圆
function [center_x,center_y,r] = maxBoundCycle(x,y)
	center_x = mean(x);
	center_y = mean(y);
	list_distance = sqrt((x - center_x).^2 + (y - center_y).^2);
	r = max(list_distance);
end

3 结语

💦💦💦💦💦
  本篇简单介绍了散点数据最小外接圆沿轴外接矩形原理实现方法,提供了完整的Matlab代码,可以执行并进行理解,后面将分享关于包含散点区域最小外接矩形的相关原理和实现方法。希望对你有所帮助。






😜
😜😜
😜😜😜😜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言-数据结构 有向图拓扑排序TopologicalSort(邻接表存储)

拓扑排序算法的实现还是比较简单的&#xff0c;我们需要用到一个顺序栈辅助&#xff0c;采用邻接表进行存储&#xff0c;顶点结点存储入度、顶点信息、指向邻接结点的指针&#xff0c;算法过程是&#xff1a;我们先将入度为0的顶点入栈&#xff0c;然后弹出栈顶结点&#xff0c…

使用CUBE_MX使用I2C通信,实现对EEPROM的读写

一、使用CUBE_MX配置 1.配置I2C 2.配置USART1 3.重中之重(在KEIL5打开串口使用的库) 二、KEIL5配置 #include "main.h" #include "i2c.h" #include "gpio.h" #include "usart.h"#include <stdio.h>void SystemClock_Config(vo…

flash_attention简要笔记

优化效果 原来&#xff0c;attention部分的计算量和中间激活占用显存的复杂度都是 O ( N 2 ) O(N^2) O(N2) 计算量部分原来QK矩阵乘和attn_scoreV矩阵乘的计算量&#xff0c;复杂度都是 O ( N 2 ) O(N^2) O(N2)&#xff1b;中间激活因为中间有一个attn_score&#xff0c;所以复…

如何接口对接发送视频短信

随着移动通信技术的飞速发展&#xff0c;视频短信作为一种创新的多媒体信息传递方式&#xff0c;正逐渐成为众多行业不可或缺的沟通工具。它不仅丰富了信息传递的形式&#xff0c;还显著提高了信息接收者的参与度和满意度。 支持免费对接试用乐讯通PaaS平台 找好用的短信平台,选…

数据结构:(OJ141)环形列表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

探索iPhone一键删除重复照片的方法

在iPhone用户的生活中&#xff0c;存在一个不变的真理&#xff1a;不管你的照片库有多干净&#xff0c;重复的照片总会找到一种方法悄无声息地积累起来&#xff0c;就像袜子在洗衣机中神秘消失那样不可思议。而当你最终决定处理这些重复照片时&#xff0c;你可能已经面临着一个…

Electron 图标修改

目录 1. 图片基本要求 2. 在main.js中配置icon 位置 ​3. 在package.json 中配置icon 位置 4. 问题&#xff1a;左上角图片 开发环境下显示&#xff0c;生产环境下不显示 1. 图片基本要求 图片格式为ico&#xff0c;图片像素像素为256*256&#xff1b; 将ico文件放在pub…

基于Springboot的医疗健康助手开题报告

文未可获取一份本项目的java源码和数据库参考。 一&#xff0e;选题意义, 研究现状,可行性分析 选题意义&#xff1a;随着科技的高速发展&#xff0c;人们的生活水平也正在稳步提高&#xff0c;解决温饱问题以后&#xff0c;广大人民群众也越来越注重自己的身体健康&#xff0…

openGauss 基于PITR的恢复

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

聚焦汽车智能化与电动化,亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展

抢占市场先机︱聚焦汽车智能化与电动化&#xff0c;亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展 随着汽车智能化与电动化的迅猛发展&#xff0c;汽车电子技术、车用功率半导体技术、智能座舱技术、轻量化技术/材料、软件定义汽车、EV/HV技术、测试测量技…

python之openpyxl模块——实现Excel表格的处理(万字教学,全网最全,超详细!)

文章目录 前言1、Excel表格介绍扩展&#xff1a;.xls 和 .xlsx 2、openpyxl 模块2.1 模块的安装2.2 基础操作2.2.1 生成Excel文件对象&#xff0c;查看所有sheet表2.2.2 通过表名得到表对象2.2.3 获取活动表对象2.2.4 获取表格中数据所占大小2.2.5 获取单元格中的数据2.2.6 获取…

flask搭建微服务器并训练CNN水果识别模型应用于网页

一. 搭建flask环境 概念 flask:一个轻量级 Web 应用框架&#xff0c;被设计为简单、灵活&#xff0c;能够快速启动一个 Web 项目。CNN:深度学习模型&#xff0c;用于处理具有网格状拓扑结构的数据&#xff0c;如图像&#xff08;2D网格&#xff09;和视频&#xff08;3D网格&a…

集成学习详细介绍

以下内容整理于&#xff1a; 斯图尔特.罗素, 人工智能.现代方法 第四版(张博雅等译)机器学习_温州大学_中国大学MOOC(慕课)XGBoost原理介绍------个人理解版_xgboost原理介绍 个人理解-CSDN博客 集成学习(ensemble)&#xff1a;选择一个由一系列假设h1, h2, …, hn构成的集合…

LLM大模型基础知识学习总结,零基础入门到精通 非常详细收藏我这一篇就够了

在这个已经被大模型包围的时代&#xff0c;不了解一点大模型的基础知识和相关概念&#xff0c;可能出去聊天都接不上话。刚好近期我也一直在用ChatGPT和GitHub Copilot&#xff0c;也刚好对这些基础知识很感兴趣&#xff0c;于是看了一些科普类视频和报告&#xff0c;做了如下的…

从数据到决策,无限住宅代理还可以这么用

在企业发展中&#xff0c;一个良好的决策可以起到推波助澜的作用&#xff0c;让企业飞速发展。在决策的背后离不开数据的支撑&#xff0c;数据驱动决策已成为企业成功的关键因素。然而&#xff0c;随着数据量的激增和竞争的加剧&#xff0c;企业如何有效地收集、分析和应用数据…

Python 课程14-TensorFlow

前言 TensorFlow 是由 Google 开发的一个开源深度学习框架&#xff0c;广泛应用于机器学习和人工智能领域。它具有强大的计算能力&#xff0c;能够运行在 CPU、GPU 甚至 TPU 上&#xff0c;适用于从小型模型到大规模生产系统的各种应用场景。通过 TensorFlow&#xff0c;你可以…

【云原生监控】Prometheus之Alertmanager报警

Prometheus之Alertmanager报警 文章目录 Prometheus之Alertmanager报警概述资源列表基础环境一、部署Prometheus服务1.1、解压1.2、配置systemctl启动1.3、监控端口 二、部署Node-Exporter2.1、解压2.2、配置systemctl启动2.3、监听端口 三、配置Prometheus收集Exporter采集的数…

旧衣回收小程序:开启旧衣回收新体验

随着社会的大众对环保的关注度越来越高&#xff0c;旧衣物回收市场迎来了快速发展时期。在数字化发展当下&#xff0c;旧衣回收行业也迎来了新的模式----互联网旧衣回收小程序&#xff0c;旨在为大众提供更加便捷、简单、透明的旧衣物回收方式&#xff0c;通过手机直接下单&…

关于1688跨境官方接口的接入||跨境卖家必知的1688跨境要点

1688跨境是什么&#xff1f; 1688是国内领先的货源平台&#xff0c;每年服务超过6500万B类买家&#xff0c;其中很大一部分是跨境商家。这些跨境商家采购中国高性价比的商品到海外销售。 为什么要入驻跨境专供&#xff1f; 据统计&#xff0c;2028年跨境市场规模将实现翻三番&…

RabbitMQ(高阶使用)延时任务

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 1. 什么是延时任务&#xff1f; 1.1 和定时任务区别 2. 延时队列使用场景 3. 常见方案 3.1 数据库轮询 优点 缺点 3.2 JDK的延迟队列 优点 缺点 3.3 netty时间轮算法 优点 缺点 3.4 使用消息…