[y0 z0]=find_cus(cita,0); cy=[cy y0]; cz=[cz z0];
% % saveas(1,sprintf('cita=%.4f.png',cita)); % if (find(out==cita))%导出数据到EXCEL % output; % end end
%钢筋位置示意图 % figure % hold on;
% title('钢筋运动轨迹图') %
% for i=1:length(cz)
% plot3 ( [cy(i) cy(i)] , [-25 25 ] , [cz(i) cz(i)] , 'r--'); % end
function dis = distence( x0,y0,z0,x1,y1,z1 ); %计算空间两点距离
dis=sqrt((x0-x1).^2+(y0-y1).^2+(z0-z1).^2); end
function [ y z ] = f1( cita , yy ) %计算桌脚点1 global R l w h;
l1=l/2-sqrt(R.^2 -22.5^2); y0=-l1/2*cos(cita)-(l/2-l1); z0=-l1/2*sin(cita);
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 ] = f1( cita , yy ) %计算桌脚点2 global R l w h;
l1=l/2-sqrt(R.^2 -22.5^2);
24
y0=-l1/2*cos(cita)-(l/2-l1); z0=-l1/2*sin(cita);
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 [ y0 z0 ] = find_cus( cita , yy ) %计算钢筋坐标
l=120; w=50; R=23.75;
l1=l/2-sqrt(R.^2 -22.5^2); y0=-l1/2*cos(cita)-(l/2-l1); z0=-l1/2*sin(cita); end
output.m %数据输出
numb = [1:n];%木条编号 len = l/2 + y ;%木条长度
head = [x ; y ; z]';%桌顶边缘
foot = [ x ; yk ; zk]' ;%桌脚点坐标 kc_st = ones(1,n)*(r-y(1));%开槽起点
kc_go =-y +distence(x,y,0,x,y0,z0);%开槽终点 kc_dis = kc_go - kc_st ;%开槽距离
dir = atan( (zk(1)- z)./ ( yk - y) ) / pi*180;%水平倾角 dis=kc_dis(1); kc_dis=kc_dis-dis; kc_st=kc_st+dis; for i=1:n
if (dir(i)<0)
dir(i)=dir(i)+180; end end
OUTP=[numb;len;x;y;z;x;yk;ones(1,n)*zk(1);kc_st;kc_go;kc_dis;dir]'; tit='设计参数';
xlswrite([tit '数据记录.xlsx'],OUTP,1,'A2');
25
附录2 问题一其他设计参数表格
表1 问题一其他设计参数表格 木条编号 木条长度 桌面坐标x 桌面坐标y 桌面坐标z 桌角坐标x 桌角坐标y 桌角坐标z 开槽起点 开槽终点 水平倾角 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 52.19 47.07 43.85 41.50 39.73 38.39 37.40 36.72 36.32 36.18 36.18 36.32 36.72 37.40 38.39 39.73 41.50 43.85 47.07 52.19 -22.50 -20.00 -17.50 -15.00 -12.50 -10.00 -7.50 -5.00 -2.50 0.00 0.00 2.50 5.00 7.50 10.00 12.50 15.00 17.50 20.00 22.50 -7.81 -12.93 -16.15 -18.50 -20.27 -21.61 -22.60 -23.28 -23.68 -23.82 -23.82 -23.68 -23.28 -22.60 -21.61 -20.27 -18.50 -16.15 -12.93 -7.81 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 0.00 0.00 0.00 0.00 0.00 -22.50 -20.00 -17.50 -15.00 -12.50 -10.00 -7.50 -5.00 -2.50 0.00 0.00 2.50 5.00 7.50 10.00 12.50 15.00 17.50 20.00 22.50 -22.78 -17.36 -14.64 -13.22 -12.51 -12.20 -12.11 -12.10 -12.13 -12.14 -12.14 -12.13 -12.10 -12.11 -12.20 -12.51 -13.22 -14.64 -17.36 -22.78 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 -50.00 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 33.95 38.12 41.27 43.82 45.89 47.54 48.79 49.68 50.20 50.38 50.38 50.20 49.68 48.79 47.54 45.89 43.82 41.27 38.12 33.95 73.33 84.94 91.73 96.03 98.82 100.66 101.86 102.60 103.01 103.14 103.14 103.01 102.60 101.86 100.66 98.82 96.03 91.73 84.94 73.33 附录3 问题二计算程序MATLAB代码 枚举法
function [lmin,wmin,T,nmin,w1min,Vmin,Cmin]=q2 ( R , h ) global l w ; T=3; h=h-T; lmin=inf; wmin=inf; T=3;
nmin=inf; w1min=inf; Vmin=inf; Cmin=inf;
esp=1;
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))
26
w=n*w1;
ll1 = sqrt(R^2-(R-w1)^2) ;
for l=ceil(2*(h+ll1)): esp :L V=w*l*T; 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('木条未相交检查完毕'); r=sqrt( (y3+ll1)^2+z3^2 ); y0=-r*cos(cita)-ll1; z0=-r*sin(cita); %木条位置初始化
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 27 if ( yk(1) > y4 ) continue; end %disp('稳定性检查完毕'); if ( zk(1) > zk(2) ) continue; end %寻找用料最小解 if (Vmin>V) Vmin=V; lmin=l; wmin=w; w1min=w1; nmin=n; Cmin=cita; tit='用料最小解'; output; plotpic; % saveas(1,[tit '.png']); end % %寻找最稳定解 % if (Cstr>cita) % Cstr=cita; % Vstr=V; % lstr=l; % wstr=w; % w1str=w1; % nstr=n; % y1str=yk(1); % tit='最稳定解'; % output; % plotpic; % % saveas(1,[tit '.png']); % end end end end end % disp('计算完毕'); % disp('用料最省的设计:'); % disp(sprintf('木板尺寸%.1f*%.1f*%.1f (cm)',lmin,wmin,T)); % disp(sprintf('木条数%d',nmin)); % disp(sprintf('每根木条宽度%.1f (cm)',w1min)); % disp(sprintf('总用料%.3f (cm^3)',Vmin)); % disp(sprintf('支撑角%.3f (rad)\\n',Cmin)); % disp('最稳定的设计:'); % disp(sprintf('木板尺寸%.1f*%.1f*%.1f (cm)',lstr,wstr,T)); 28