matlab练习程序(Ritter‘s最小包围圆)
2014-09-24 20:13
337 查看
原始算法是sphere,我这里简化为circle了。
Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛。
该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bouncing Bubble算法,以后有机会可以尝试一下。
Ritter's算法如下:
1.从点集中随机选出两个点作为直径对圆进行初始化。
2.判断下一个点p是否在圆中,如果在则继续本步骤,如果不在则进行步骤3。
3.使用p作为新圆的一个边界点,另一个边界点为距离p最远的圆上的点,使用这两个点作为直径构造新圆。
4.继续步骤2,直到遍历完所有点。
结果如下:
matlab代码如下:
参考:http://en.wikipedia.org/wiki/Bounding_sphere
Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛。
该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bouncing Bubble算法,以后有机会可以尝试一下。
Ritter's算法如下:
1.从点集中随机选出两个点作为直径对圆进行初始化。
2.判断下一个点p是否在圆中,如果在则继续本步骤,如果不在则进行步骤3。
3.使用p作为新圆的一个边界点,另一个边界点为距离p最远的圆上的点,使用这两个点作为直径构造新圆。
4.继续步骤2,直到遍历完所有点。
结果如下:
matlab代码如下:
clear all;close all;clc; n=100; p=rand(n,2); p1=p(1,:); p2=p(2,:); r=sqrt((p1(1)-p2(1))^2+(p1(2)-p2(2))^2)/2; cenp=(p1+p2)/2; for i=3:n newp=p(i,:); d=sqrt((cenp(1)-newp(1))^2+(cenp(2)-newp(2))^2); if d>r r=(r+d)/2; cenp=cenp+(d-r)/d*(newp-cenp); end end hold on; plot(p(:,1),p(:,2),'o'); x0=cenp(1); y0=cenp(2); theta=0:0.01:2*pi; x=x0+r*cos(theta); y=y0+r*sin(theta); plot(x,y,'-',x0,y0,'.'); axis equal
参考:http://en.wikipedia.org/wiki/Bounding_sphere
相关文章推荐
- matlab练习程序(最小包围矩形)
- matlab练习程序(Kruskal最小生成树)
- matlab练习程序(最小二乘多项式拟合)
- matlab练习程序(最大流/最小割)
- matlab练习程序(线性分类器<最小二乘>)
- matlab练习程序(求灰度图像最大灰度,最小灰度,平均灰度)
- matlab练习程序(Prim最小生成树)
- MATLAB - 练习程序,求灰度图像均值、最大、最小数值
- matlab练习程序(图像旋转,最邻近插值)
- matlab练习程序(生成高斯图像)
- matlab练习程序(灰度拉伸)
- matlab练习程序(白平衡<动态阈值>)
- matlab练习程序(图像水平/竖直移动)
- matlab练习程序(PCA)
- matlab练习程序(LMS)
- matlab练习程序(感知哈希对比图片)
- matlab练习程序(Gabor Filter)
- matlab练习程序(Floyd–Steinberg dithering)
- matlab练习程序(图像错切)
- matlab练习程序(灰度图直方图均衡化)