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

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} (xi−x)2+(yi−y)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 最小外接圆
评论区有细心的大佬指出了文章中的的错误,看了下关于外接圆的逻辑,的确存在较大问题,1.1中的内容和1.3的内容逻辑一致,仅考虑了沿着x轴和y轴方向的最小外接情况,对于笔者所使用的场景已经足够,这里还是补充一下关于求解最小外接圆
的理解和实现方法
。同时,非常感谢@X-Qiang对错误的反馈。
💦💦
最小外接圆
的求解步骤如下:
(1) 先找点集 ( x i , y i ) {(x_{i},y_{i})} (xi,yi)的凸包点,问题转化为求解凸多边形的最小外接圆;
(2) 根据3点可以确定一个圆。先拿3个凸包点 ( p 1 p 2 p 3 ) (p_{1} p_{2} p_{3}) (p1p2p3)生成一个圆,这3个点称为基准点,得到圆的圆心坐标 ( O 1 ) (O_{1}) (O1)和半径 ( R 1 ) (R_{1}) (R1);
(3) 计算剩余凸包点与圆心 ( O 1 ) (O_{1}) (O1)的距离 ( D i ) (D_{i}) (Di),如果 ( D i ) (D_{i}) (Di)中的最大值小于 ( R 1 ) (R_{1}) (R1