xb=sqrt(R^2-yb.^2); Bx=hL*ones(size(xb)); By=yb;
Bz=zeros(size(xb)); %腿尖曲线数据 figure(1),clf;%画底图,清除以前的图片 holdon
h1=patch(Tx,Ty,Tz,'facecolor',[1 1 1],'edgecolor',[0 0 0]);%画桌面
h2=patch(legx,legy,legz,'facecolor',[1 1 1],'edgecolor',[0 0 0]);%画桌腿
h3=patch(-legx,legy,legz,'facecolor',[1 1 1],'edgecolor',[0 0 0]);%画桌腿
h4=plot3(zhoux,zhouy,zhouz,'c');
h5=plot3(-zhoux,zhouy,zhouz,'c');%画钢筋轴 h6=plot3(Bx,By,Bz,'k');
h7=plot3(-Bx,By,Bz,'k');%腿尖曲线
holdoff;view(3);axis equal;axis([-hLhL -R R 0 2*hH]);axis off; zz=-hH*sind(deg);xz=xe(1)+hH*cosd(deg); %钢筋轴,z坐标和x坐标
alldeg=atan2(-zz*ones(size(xe)),xz-xe); %每个条腿折叠角度,20个
allx=legL.*cos(alldeg)+xe; %每条腿末端x坐标,20个
allz=-legL.*sin(alldeg); %每条腿末端z坐标,20个 alldeg2=atan2(-zz*ones(size(xb)),xz-xb);
Bx=(hL-xb).*cos(alldeg2)+xb;Bz=-(hL-xb).*sin(alldeg2);%腿尖曲线x数据
minz=min(Bz); %最低腿z坐标,桌子当前高度
legx=[allx;allx;xe;xe]; %桌腿数据
legz=[allz;allz;zeros(size(allz));zeros(size(allz))]-minz; set(h1,'ZData',-minz*ones(size(Tz)));
set(h2,'XData',legx,'ZData',legz);set(h3,'XData',-legx,'ZData',legz);
set(h4,'XData',[xz;xz],'ZData',[zz;zz]-minz); set(h5,'XData',-[xz;xz],'ZData',[zz;zz]-minz);
set(h6,'XData',Bx,'ZData',Bz-minz);set(h7,'XData',-Bx,'ZData',Bz-minz); pause(0.1);drawnow;
caochang=sqrt((xe-xe(1)).^2+hH.^2-2*hH.*(xe-xe(1)).*cos(alldeg))-(legL-hH)
程序三:问题一求桌脚边缘线的程序 i=0:9;
y=1.25:2.5:23.75 h=50; b=25-2.5*i; r=25;
a=sqrt(r*r-b.*b); c=60-a
k=sqrt((c(1,1)-sqrt((c(1,1)./2).*(c(1,1)./2)-(h./2).*(h./2))-c).*(c(1,1)-sqrt((c(1,1)./2).*(c(1,1)./2)-(h./2).*(h./2))-c)+(h./2).*(h./2))-(c-c(1,1)./2); e1=66;
x=c(1,1).*cos(e1)-(60-c-c.*(60-c-c(1,1)./2.*cos(e1))./(c+k))
z=c(1,1)*sin(e1)-c.*(c(1,1).*sin(e1)./(c(1,1)+2*k)) plot3(x,y,z)
程序四、问题二求桌高70 cm,桌面直径80 cm的情形,最优设计加工参数的matlab程序 function f=fun1(x); f=x(1)
function [g,ceq]=mycon(x)
g=[x(1).^2/4+x(5).^2+x(2).^2-x(1).*x(5)-1600;x(4).*x(6)-80;x(5).^2+x(7).^2-x(3).^2-2*x(4)*x(5)-2*x(4).*x(7)+2*x(5).*x(7)+x(4).^2.*x(6).^2+x(3).^2.*x(6).^2+2*x(3).*x(7)-2*x(3).*x(7)-2*x(3).*x(4).*x(6).^2-x(8).^2;x(1)/4.*x(1).^2+x(2).^2+x(4).^2-x(1).*x(4)-80*x(2).^2;x(4).^2-x(4).^2.*x(6).^2+x(3).^2-x(3).^2.*x(6).^2-x(3).*x(4)+2*x(3).*x(4).*x(6).^2-x(8).^2;70*x(4)-70*x(3)-x(4).*x(9);-x(5).^2+x(7).^2+x(9).^2];
x0=[1,1,1,1,1,1,1,1,1,1]; A=[];b=[]; Aeq=[];beq=[]; vlb=[];vub=[];
[x,fval]=fmincon('fun1',x(0),A,b,Aeq,beq,vlb,vub,'mycon')
程序五、问题三动态图程序
clear
L=120;D=50;d=2.5;hL=L/2;R=D/2; %木板长,宽;腿木条宽;半长;圆桌面半径 deg=75
ye=-R+d/2:d:R-d/2; x1=0+d/2:d:R-d/2
x2=23.75-(d/2:d:R)+d/2 x3=[x1;x2] x4=x3' xe1=x4(:)
xe=xe1'%折叠点的y坐标,x坐标,各20个; legL=hL-xe%腿长度,20个;
hH=legL(1)/2;ddeg=2; %最长腿半长;角度增量 Tx=[xe -xe;xe
-xe];Tx=Tx(:);Tz=zeros(size(Tx)); %桌面数据 Ty=[ye-d/2 fliplr(ye)+d/2;ye+d/2 fliplr(ye)-d/2];%桌面在y轴上的数据,fliplr函数实现矩阵的左右翻转
Ty=Ty(:);
legx=[hL*ones(size(xe));hL*ones(size(xe));xe;xe]; %桌腿数据
legy=[ye-d/2;ye+d/2;ye+d/2;ye-d/2];legz=zeros(size(legx)); zhoux=[hL-legL(1)/2;hL-legL(1)/2];zhouy=[-R R];zhouz=[0;0]; %钢筋轴的数据
yb=linspace(ye(1),ye(end),50);xb=sqrt(R^2-yb.^2); Bx=hL*ones(size(xb)); By=yb;
Bz=zeros(size(xb)); %腿尖曲线数据 figure(1),clf;%画底图,清除以前的图片 holdon
h1=patch(Tx,Ty,Tz,'facecolor',[1 1 1],'edgecolor',[0 0 0]);%画桌面
h2=patch(legx,legy,legz,'facecolor',[1 1 1],'edgecolor',[0 0 0]);画桌腿
h3=patch(-legx,legy,legz,'facecolor',[1 1 1],'edgecolor',[0 0 0]); 画桌腿
h4=plot3(zhoux,zhouy,zhouz,'c');h5=plot3(-zhoux,zhouy,zhouz,'c');%画钢筋轴
h6=plot3(Bx,By,Bz,'k');h7=plot3(-Bx,By,Bz,'k');%腿尖曲线 holdoff;view(3);axis equal;axis([-hLhL -R R 0 2*hH]);axis off; fordeg=0:ddeg:75 %最长桌腿相对桌面折叠角度
zz=-hH*sind(deg);xz=xe(1)+hH*cosd(deg); %钢筋轴,z坐标和x坐标
alldeg=atan2(-zz*ones(size(xe)),xz-xe); %每个条腿折叠角度,20个
allx=legL.*cos(alldeg)+xe; %每条腿末端x坐标,20个
allz=-legL.*sin(alldeg); %每条腿末端z坐标,20个 alldeg2=atan2(-zz*ones(size(xb)),xz-xb);
Bx=(hL-xb).*cos(alldeg2)+xb;Bz=-(hL-xb).*sin(alldeg2);%腿尖曲线x的数据
minz=min(Bz); %最低腿z的坐标,桌子当前高度
legx=[allx;allx;xe;xe]; %桌腿数据
legz=[allz;allz;zeros(size(allz));zeros(size(allz))]-minz; set(h1,'ZData',-minz*ones(size(Tz)));
set(h2,'XData',legx,'ZData',legz);set(h3,'XData',-legx,'ZData',legz);
set(h4,'XData',[xz;xz],'ZData',[zz;zz]-minz); set(h5,'XData',-[xz;xz],'ZData',[zz;zz]-minz);
set(h6,'XData',Bx,'ZData',Bz-minz);set(h7,'XData',-Bx,'ZData',Bz-minz);
pause(0.1);drawnow; end
caochang=sqrt((xe-xe(1)).^2+hH.^2-2*hH.*(xe-xe(1)).*cos(alldeg))-(legL-hH)