01年数学建模A题程序.docx
- 文档编号:7941722
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:6
- 大小:29.07KB
01年数学建模A题程序.docx
《01年数学建模A题程序.docx》由会员分享,可在线阅读,更多相关《01年数学建模A题程序.docx(6页珍藏版)》请在冰豆网上搜索。
01年数学建模A题程序
程序1:
计算最大内切圆半径的粗略范围。
运行前请先将程序中“F:
\01A\图片\”改为图片在你电脑中的实际储存路径。
运行时用鼠标在切片图中点出内切圆的大致位置;
运行后显示的r是半径估计区间的下限,r1是上限。
clear,clc
ima=imread('F:
\01A\图片\');%读入一张图片
figure
imshow(ima)%显示这张图像
[j,i]=ginput
(1);%在坐标上取圆心
i=round(i);j=round(j);
r=1;s=0;
[xxyy]=yuan(j,i,r);
fork=1:
length(xx)
s=s+ima(yy(k),xx(k));
end
whiles==0
r=r+1;
[xxyy]=yuan(j,i,r);
s=0;
fork=1:
length(xx)
s=s+ima(yy(k),xx(k));
end
end
r=r-1%rmin
r1=sqrt((sum(sum(ones(size(ima))))-sum(sum(ima)))/pi)
程序2:
计算最大内切圆半径、圆心坐标,作投影图与三维图。
运行前同样要修改路径。
运行时要调用函数,在命令窗口当tt=100时程序运行完毕,运行时间一般不超过2分钟。
运行结束后,工作空间中,aax,aay为利用计算出的数据拟合后的球心横、纵坐标。
ar为从每张图计算出的最大内切圆半径。
clear,clc
r=28;tt=0;
forii=0:
99
tt=tt+1
ima=imread(['F:
\01A\图片\'int2str(tt-1)'.bmp']);
ima1=ima;
ima1([1512],:
)=0;ima1(:
[1512])=0;
fori=3:
3:
510
forj=3:
3:
510
ifsum(sum(ima(i-1:
i+1,[j-2j+2])))+sum(sum(ima([i-2i+2],j-1:
j+1)))==12
ima1(i-1:
i+1,j-1:
j+1)=0;
end
end
end
%eg=edge(ima,'sobel');求出切片的边缘点的位置
%[yeg,xeg]=find(eg);边缘点的横纵坐标
[yeg,xeg]=find(ima1);
fork=1:
length(xeg)
[xxyy]=yuan(xeg(k),yeg(k),r);
ifrem(k,5)==1
fl=floor(r/sqrt
(2));
ima(yeg(k)-fl:
yeg(k)+fl,xeg(k)-fl:
xeg(k)+fl)=1;
end
fork1=1:
length(xx)
ima(yy(k1),xx(k1))=1;%剔除区域C以外的点
end
end
[yc,xc]=find(1-ima);
len2=500000;len22=0;
fork=1:
length(xc)
len2=500000;
fork1=1:
length(xeg)
t=(xc(k)-xeg(k1))*(xc(k)-xeg(k1))+(yc(k)-yeg(k1))*(yc(k)-yeg(k1));
ift len2=t; end end iflen2>len22 len22=len2; z=k; end end len2=500000;len22=0; fork=: : fork0=: : len2=500000; fork1=1: length(xeg) xz=xc(z)+k0;yz=yc(z)+k; t=(xz-xeg(k1))*(xz-xeg(k1))+(yz-yeg(k1))*(yz-yeg(k1)); ift len2=t; end end iflen2>len22 len22=len2;kx=k0;ky=k; end end end ax(tt)=yc(z)+ky-256; ay(tt)=xc(z)+kx-256; ar(tt)=sqrt(len22); end z=0: 99; A=polyfit(z,ax,7); B=polyfit(z,ay,7); aax=polyval(A,z); aay=polyval(B,z); figure (1) plot(aax,aay) gridon figure (2) plot(aax,z) gridon figure(3) plot(aay,z) gridon figure(4) plot3(aax,aay,z,'r') gridon 函数 function[xx,yy]=yuan(x,y,r) k=1; forj=x-r+1: x-1 fori=y-r+1: y-1 if(x-j)*(x-j)+(y-i)*(y-i) xx(k)=j; yy(k)=i; k=k+1; break; end end end fori=y-r+1: y-1 forj=x-r+1: x-1 if(x-j)*(x-j)+(y-i)*(y-i) xx(k)=j; yy(k)=i; k=k+1; break; end end end xx(k: k+1)=[x-r+1x]; yy(k: k+1)=[yy-r+1]; xx=[xxxx2*x-xx2*x-xx]; yy=[yy2*y-yyyy2*y-yy]; 以上程序根据国防科技大学向为、王瑛、伍微的论文而编写,但在确定最大圆半径时并不是用二分法,请大家注意。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 01 数学 建模 程序