% disp(sprintf('木条数%d',nstr));
% disp(sprintf('每根木条宽度%.1f (cm)',w1str)); % disp(sprintf('总用料%.3f (cm^3)',Vstr)); % disp(sprintf('支撑角%.3f (rad)\\n',Cstr));
分支定界法
function [lmin,wmin,T,nmin,w1min,Vmin,Cmin]=q2_Major ( R , h ) global l w ; T=3; h=h-T; lmin=inf; wmin=inf; nmin=inf; w1min=inf; Vmin=inf; Cmin=inf;
esp=0.05;
L=2*(sqrt(R^2+h^2)+R); for w1=2.5 : esp*0.5 : 5 for n=10 : 2 : 40
if ((n*w1>2*R)&&(n*w1<2*R+2*w1)) w=n*w1;
ll1 = sqrt(R^2-(R-w1)^2) ;
for l=ceil(2*(h+ll1)): esp : min(Vmin/(w*T) ,L ) V=w*l*T;
if (V>Vmin) break; end l1=l/2-ll1;
cita = asin(h/l1); y1=-ll1-l1*cos(cita); z1=-h; Ln2=R; y4=-Ln2; z4=0;
z2= -(y4 + (4*Ln2^2*h^2 - 4*Ln2*h^2*l + h^2*l^2 + y4^2)^(1/2))/(2*h);
y2=y4*(z2+h)/h;
y3=(ll1*y2*z1 - ll1*y4*z1 + ll1*y4*z2 + y1*y4*z2)/(ll1*z2 + y1*z2 - y2*z1 + y4*z1);
z3=(z2*(ll1*z1 + y4*z1))/(ll1*z2 + y1*z2 - y2*z1 + y4*z1); if (y3>y2) continue; end%两木条未相交 %disp('木条未相交检查完毕');
29
r=sqrt( (y3+ll1)^2+z3^2 ); y0=-r*cos(cita)-ll1; z0=-r*sin(cita); %木条位置初始化 clear x y z yk zk;
x = [(-w/2+w1) : w1 : 0]; x = [x -x(end:-1:1)]; y = -sqrt(R.^2-x.^2); z = x*0;
%计算桌脚点坐标 for i=1:n
[yk(i) zk(i)]=f1( cita , y(i) , y0 , z0 ); end
%判断桌脚点正负 for i=2:n
if ( yk(i) - yk(i-1) ) <0 & (i*2 if flag>0 for i=flag:n-flag+1 yk(i) =f2( cita , y(i) , y0 , z0 ); end end if ( yk(1) > y4 ) continue; end %disp('稳定性检查完毕'); if ( zk(1) > zk(2) ) break; end %disp('轨迹单调性检查完毕,开始绘图'); %寻找用料最小解 if (Vmin>V) Vmin=V; lmin=l; wmin=w; w1min=w1; nmin=n; Cmin=cita; tit='用料最小解'; plotpic; % saveas(1,[tit '.png']); output; end end end 30 end end % disp('计算完毕'); % disp('用料最省的设计:'); % disp(sprintf('木板尺寸%.2f*%.2f*%.2f (cm)',lmin,wmin,T)); % disp(sprintf('木条数%d',nmin)); % disp(sprintf('每根木条宽度%.2f (cm)',w1min)); % disp(sprintf('总用料%.3f (cm^3)',Vmin)); % disp(sprintf('支撑角%.3f (rad)\\n',Cmin)); % toc 画图程序 %画桌脚曲线 drawnow; axis([yk(1),-yk(1),x(1),x(n),zk(1),0]); axis square; hold on; cla; plot3 ( yk , x , zk ,'g'); % plot3 ( yk , x , zk ,'go'); xlabel('y'); ylabel('x'); zlabel('z'); title(tit); %画桌顶边缘线 plot3 ( y , x , z ,'b') ; for i = 1 : n/2; plot3 ( [ yk(i) y(i) ] , [ x(i) x(i) ] , [ zk(i) z(i) ] , 'r' ) ; plot3 ( [ yk(i) y(i) ] , [ x(i)-w1 x(i)-w1 ] , [ zk(i) z(i) ] , 'r' ); plot3 ( [ yk(i) yk(i) ] , [x(i)-w1 x(i) ] , [zk(i) zk(i)],'r' ); plot3 ( [ y(i) y(i) ] , [x(i)-w1 x(i) ] , [z(i) z(i)],'r' ); end for i = (n/2+1):n; plot3 ( [ yk(i) y(i) ] , [ x(i) x(i) ] , [ zk(i) z(i) ] , 'r' ) ; plot3 ( [ yk(i) y(i) ] , [ x(i)+w1 x(i)+w1 ] , [ zk(i) z(i) ] , 'r' ); plot3 ( [ yk(i) yk(i) ] , [x(i)+w1 x(i) ] , [zk(i) zk(i)],'r' ); plot3 ( [ y(i) y(i) ] , [x(i)+w1 x(i) ] , [z(i) z(i)],'r' ); end plot3 ( -yk , x , zk ,'g'); %画桌顶边缘线 plot3 (- y , x , z ,'b') ; %画条纹曲面 for i = 1 : n/2; % pc=-2*[ -y(i)+yk(i) , 0 , z(i)-zk(i) ]; 31 % plot3 ( [ -y(i) -y(i)+pc(1) ] , [ x(i) x(i) ] , [ z(i) z(i)+pc(3) ] , 'r' ) ; plot3 ( [ -yk(i) -y(i) ] , [ x(i) x(i) ] , [ zk(i) z(i) ] , 'r' ) ; plot3 ( [ -yk(i) -y(i) ] , [ x(i)-w1 x(i)-w1 ] , [ zk(i) z(i) ] , 'r' ); plot3 ( [ -yk(i) -yk(i) ] , [x(i)-w1 x(i) ] , [zk(i) zk(i)],'r' ); plot3 ( [ -y(i) -y(i) ] , [x(i)-w1 x(i) ] , [z(i) z(i)],'r' ); plot3 ( [y(i) -y(i)] , [x(i) x(i) ] , [z(i) z(i)] ,'k'); if (i==1) plot3 ( [y(i) -y(i)] , [x(i)-w1 x(i)-w1 ] , [z(i) z(i)] ,'k'); end end for i = (n/2+1):n; plot3 ( [ -yk(i) -y(i) ] , [ x(i) x(i) ] , [ zk(i) z(i) ] , 'r' ) ; plot3 ( [ -yk(i) -y(i) ] , [ x(i)+w1 x(i)+w1 ] , [ zk(i) z(i) ] , 'r' ); plot3 ( [ -yk(i) -yk(i) ] , [x(i)+w1 x(i) ] , [zk(i) zk(i)],'r' ); plot3 ( [ -y(i) -y(i) ] , [x(i)+w1 x(i) ] , [z(i) z(i)],'r' ); plot3 ( [y(i) -y(i)] , [x(i)+w1 x(i)+w1 ] , [z(i) z(i)],'k' ); end function [ y z a b] = f1( cita , yy ,y0 ,z0 ) %计算桌脚点1 global R l w h; a = 1 + ( z0 .^ 2 ) ./ ( yy - y0) .^ 2 ; b = (yy+l./2) .^2; y=-sqrt(b/a)+yy; z=-abs((yy-y)*z0/(yy-y0)); end function [ y z a b] = f2( cita , yy ,y0 ,z0 ) %计算桌脚点2 global R l w h; a = 1 + ( z0 .^ 2 ) ./ ( yy - y0) .^ 2 ; b = (yy+l./2) .^2; y=sqrt(b/a)+yy; z=-abs((yy-y)*z0/(yy-y0)); 32 end 附录4 问题二开槽长度与其他设计参数表格 表2 分支定界法稳定性最优的木条开槽长度 木条编号 开槽距离 木条编号 开槽距离 木条编号 开槽距离 1 0 7 21.30145 13 19.41994 2 4.806782 8 22.42731 14 16.78234 3 9.361093 9 22.80191 15 13.40699 4 13.40699 10 22.80191 16 9.361093 5 16.78234 11 22.42731 17 4.806782 6 19.41994 12 21.30145 18 0 表3 枚举法用料最省木条开槽长度 1 2 木条编号 0 5.855658 开槽距离 8 9 木条编号 开槽距离 26.40619 28.3464 15 16 木条编号 开槽距离 32.66383 32.49356 22 23 木条编号 开槽距离 24.08086 21.35384 木条编号 开槽距离 木条编号 开槽距离 木条编号 开槽距离 1 0 7 21.96798 13 20.04199 3 10.52883 10 29.91532 17 31.98155 24 18.20537 4 14.61043 11 31.12417 18 31.12417 25 14.61043 5 6 7 18.20537 21.35384 24.08086 12 13 14 31.98155 32.49356 32.66383 19 20 21 29.91532 28.3464 26.40619 26 27 28 10.52883 5.855658 0 5 17.33913 11 23.11971 17 5.00615 6 20.04199 12 21.96798 18 0 表4 分支定界法稳定性最优的木条开槽长度 2 5.00615 8 23.11971 14 17.33913 3 9.711138 9 23.50281 15 13.87451 4 13.87451 10 23.50281 16 9.711138 表5 分支定界法用料最省其他设计加工参数 木条编号 木条长度 桌面坐标x 桌面坐标y 桌面坐标z 桌角坐标x 桌角坐标y 桌角坐标z 开槽起点 开槽终点 开槽距离 水平倾角 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 72.41 66.56 62.42 59.16 56.49 54.25 52.36 50.75 49.39 48.26 47.32 46.57 46.00 45.60 45.35 -37.88 -35.35 -32.83 -30.30 -27.78 -25.25 -22.73 -20.20 -17.68 -15.15 -12.63 -10.10 -7.58 -5.05 -2.53 -12.86 -18.72 -22.86 -26.11 -28.78 -31.02 -32.92 -34.52 -35.88 -37.02 -37.96 -38.70 -39.28 -39.68 -39.92 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -37.88 -35.35 -32.83 -30.30 -27.78 -25.25 -22.73 -20.20 -17.68 -15.15 -12.63 -10.10 -7.58 -5.05 -2.53 33 -40.04 -31.06 -25.10 -21.14 -18.62 -17.10 -16.26 -15.89 -15.80 -15.89 -16.07 -16.29 -16.49 -16.65 -16.76 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 -67.00 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 42.08 46.28 49.96 53.29 56.32 59.05 61.49 63.64 65.53 67.14 68.50 69.60 70.45 71.06 71.42 0.00 4.20 7.88 11.21 14.23 16.96 19.40 21.56 23.44 25.06 26.42 27.52 28.37 28.98 29.34 67.92 79.56 88.09 94.24 98.63 101.74 103.96 105.55 106.68 107.50 108.09 108.50 108.78 108.97 109.07