Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2007-08-30
帖子: 2
声望力: 0 ![]() |
![]()
在MATLAB中输入niehe(1,31,91)然后回车就可以看到效果了。四个文件必须在同一文件夹。
niehe.mfunction [ output_args ] =niehe( m,z1,z2 ) %UNTITLED1 Summary of this function goes here % Detailed explanation goes here hold on axis equal grid on [x1 y1]=chilunlunkuo2(m,z1); [x2 y2]=chilunlunkuo2(m,z2); d=m*(z1+z2)/2; r1=m*z1/2; r2=m*z2/2; rb1=r1*cos(pi/9); rb2=r2*cos(pi/9); xq1=-rb1*sin(pi/9); yq1=rb1*cos(pi/9); xq2=rb2*sin(pi/9); yq2=d-rb2*cos(pi/9); xq=[xq1 xq2]; yq=[yq1 yq2]; xxq=[-xq1 -xq2]; yyq=[yq1 yq2]; axis([-4*m 4*m r1-4*m r1+4*m]); first =0; last = 2*pi; n=100; distant=(last-first)/n; sita=first:distant:last; rb1x=r1.*cos(sita); rb1y=r1.*sin(sita); rb2x=r2.*cos(sita); rb2y=r2.*sin(sita)+d; % plot(rb1x,rb1y,'k-'); % plot(rb2x,rb2y,'k-'); ds1=pi/2/z1; %ds1=0; xx1=x1*cos(ds1)-y1*sin(ds1); yy1=x1*sin(ds1)+y1*cos(ds1); ds2=pi-3*pi/2/z2; xx2=x2*cos(ds2)-y2*sin(ds2); yy2=x2*sin(ds2)+y2*cos(ds2)+d; plot(xx1,yy1,'k'); plot(xx2,yy2,'r'); plot(xxq,yyq,'b-'); pause(5); n=0; while n<2000 hold off; si1=ds1+0.001*n; xx1=x1*cos(si1)-y1*sin(si1); yy1=x1*sin(si1)+y1*cos(si1); si2=ds2-0.001*n*(z1/z2); xx2=x2*cos(si2)-y2*sin(si2); yy2=x2*sin(si2)+y2*cos(si2)+d; plot(xq,yq,'b-'); hold on; plot(xxq,yyq,'b-'); plot(xx1,yy1,'k'); plot(xx2,yy2,'r'); axis([-4*m 4*m r1-4*m r1+4*m]); grid on pause(0.01); n=n+1; end chikuoqizhi.mfunction [ jfirstsita jlastsita gfirstsita glastsita] = chikuoqizhi( m,z ) %UNTITLED1 Summary of this function goes here % Detailed explanation goes here [ jfirstsita jlastsita gfirstsita % glastsita] = chikuoqizhi( m,z ),该函数返回齿轮轮廓渐开线段和过渡线段参数方程中参数的起止值 r = m*z/2; ra = r + m; rf = r - 1.25*m; rb = r * cos(pi/9); precise = 1e-7; %%%%%%%%%%渐开线最上面的点 start = -1.5*pi/z; last = 3*pi/z; theone = start; [x,y] = jiankaixian2(m,z,theone,0); t = (x^2+y^2)^0.5 -ra; count = 0; count1 = 0; count2 = 0; while abs(t) > precise && count < 100000 if t > 0 start = theone; theone = (theone + last)/2; count1 = count1+1; end if t < 0 last = theone; theone = (theone + start)/2; count2 = count2+1; end count = count +1; [x,y] = jiankaixian2(m,z,theone,0); t = (x^2+y^2)^0.5 -ra; end jfirstsita = theone; %%%%%%%%过渡线最下面的点 start = -1.5*pi/z; last = 3*pi/z; dd = 10; ddo =0; count = 0; while dd > precise && count < 10000 count = count+1; s1 =start*2/3+last/3; s2 =start/3+last*2/3; [x1 y1]=guoduquxian2(m,z,s1); [x2 y2]=guoduquxian2(m,z,s2); d1 = (x1^2+y1^2)^0.5; d2 = (x2^2+y2^2)^0.5; if d1>d2 start = s1; dd = (d2-rf); end if d1<=d2 last = s2; dd = (d1-rf); end dd =abs(dd); if abs(ddo-dd)<1e-8 break; end ddo = dd; end gfirstsita = (s1+s2)/2; % theone = start; % ydao = gydao(m,z,theone); % % while abs(ydao) > precise && count < 10000 % if ydao < 0 % start = theone; % theone = (theone + last)/2; % count1 = count1+1; % end % if ydao > 0 % last = theone; % theone = (theone + start)/2; % count2 = count2+1; % end % count = count +1; % ydao = gydao(m,z,theone); % end %gfirstsita = theone %%%%%%%渐开线与过渡线的交点 start = -1.5*pi/z; last = 3*pi/z; theone = start; [gx,gy] = guoduquxian2(m,z,theone); [jx,jy] = jiankaixian2(m,z,theone,0); t = gy-jy; while abs(t) > precise && count < 10000 if t < 0 start = theone; theone = (theone + last)/2; count1 = count1+1; end if t > 0 last = theone; theone = (theone + start)/2; count2 = count2+1; end count = count +1; [gx,gy] = guoduquxian2(m,z,theone); [jx,jy] = jiankaixian2(m,z,theone,0); t = gy-jy; end jlastsita = theone; glastsita = theone; chilunlunkuo2.m function [ x2 y2] = chilunlunkuo2( m,z ) [ jfirstsita jlastsita gfirstsita glastsita] = chikuoqizhi( m,z ); first =jfirstsita; last = jlastsita; n = 100; distant = (last - first)/n; sita = first:distant:last; r = m*z/2; ra = r + m; rf = r-1.25*m; % grid on % axis equal % hold on %渐开线段点坐标值%%%%%%%%%%%%%%%%% xm = pi*m/4; ym = r; x = ((cos(sita)+tan(pi/9).*sin(sita)).*(xm-r.*sita+ym*tan(pi/9))+(sin(sita)-tan(pi/9).*cos(sita)).*r)/((tan(pi/9))^2+1); y = ((cos(sita)+tan(pi/9).*sin(sita)).*r-(sin(sita)-tan(pi/9).*cos(sita)).*(xm-r.*sita+ym*tan(pi/9)))/((tan(pi/9))^2+1); % plot(x,y,'m'); % plot(-x,y,'m'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %过渡线段点坐标值%%%%%%%%%%%%%%%%%%%%%%%%% first =gfirstsita; last = glastsita; distant = (last - first)/n; sita = first:distant:last; R = 0.38*m; a = pi*m/4+m*tan(pi/9)+0.38*m*cos(pi/9); b = R*sin(pi/9)+r-m; l1 = b.*sin(sita)+(a-r.*sita).*cos(sita); l2 = (r-b).*cos(sita)+(a-r.*sita).*sin(sita); l3 = b.*cos(sita)-(a-r.*sita).*sin(sita); l4 = (r-b).*sin(sita)-(a-r.*sita).*cos(sita); %yg = l3 - R.*((l2.*l2).^0.5)./((l2.^2+l4.^2).^0.5); %xg = l1 - R.*((l4.*l4).^0.5)./((l2.^2+l4.^2).^0.5); xg = l1 - R.*(l4)./((l2.^2+l4.^2).^0.5); yg = l3 - R.*(l2)./((l2.^2+l4.^2).^0.5); %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%渐开线与过渡线的准确点%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%绘过渡线与渐开线 % plot(xg,yg,'k'); % plot(-xg,yg,'k'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%齿顶圆与基圆%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% n2=20; ra = r + m; first = atan(y(1)/x(1)); last = pi-atan(y(1)/x(1)); distant = (last - first)/n2; t = first:distant:last; raxx = ra.*cos(pi-t); rayy = ra.*sin(t); last = pi-atan(yg(1)/xg(1))-2*pi/z; first= atan(yg(1)/xg(1)); distant = (last - first)/n2; t = first:distant:last; rfxx = rf.*cos(t); rfyy = rf.*sin(t); % plot(raxx,rayy,'g'); % plot(rfxx,rfyy,'g-'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% i=1; xgg=xg; ygg=yg; xx=x; yy=y; while i<n+2 xgg(n+2-i)=xg(i); ygg(n+2-i)=yg(i); xx(n+2-i) =-x(i); yy(n+2-i) = y(i); i = i+1; end x1 = [-xg xx raxx x xgg rfxx]; y1 = [yg yy rayy y ygg rfyy]; %plot(x1,y1,'k'); %%%% x1(n*4+4+n2*2+2)=x1(n*4+4+n2*2+1); y1(n*4+4+n2*2+2)=y1(n*4+4+n2*2+1); xt=x1; yt=y1; i= 1; xi = -2*pi/z; while(i<z) xix = xi*i; i = i+1; x2=x1*cos(xix)-y1*sin(xix); y2=x1*sin(xix)+y1*cos(xix); xt=[xt x2]; yt=[yt y2]; end %%%% x2=xt; y2=yt; %%%%%%%%文件输出%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %k = indexge - indexgs; %fid = fopen('test.txt','wt'); %for i = 1:j % chikuox(i) = xx(i); % chikuoy(i) = yy(i); % fprintf(fid,'%f %f\n',xx(i),yy(i)); %end %for i = 0:k-1 % chikuox(i+j+1) = xxg(k-i); % chikuoy(i+j+1) = yyg(k-i); % fprintf(fid,'%f %f\n',xxg(k-i),yyg(k-i)); %end %fclose(fid); guoduquxian2.m function [x,y] = guoduquxian2(m,z,sita) r = m*z/2; ra = r + m; rf = r-1.25*m; %过度线段点坐标值%%%%%%%%%%%%%%%%% R = 0.38*m; a = pi*m/4+m*tan(pi/9)+0.38*m*cos(pi/9); b = R*sin(pi/9)+r-m; jiankaixian2.m function [x,y] = jiankaixian2(m,z,sita,n); r = m*z/2; ra = r + m; rf = r-1.25*m; %grid on %axis equal %hold on %渐开线段点坐标值%%%%%%%%%%%%%%%%% xm = pi*m/4; ym = r; x1 = ((cos(sita)+tan(pi/9)*sin(sita))*(xm-r*sita+ym*tan(pi/9))+(sin(sita)-tan(pi/9)*cos(sita))*r)/((tan(pi/9))^2+1); y1 = ((cos(sita)+tan(pi/9)*sin(sita))*r-(sin(sita)-tan(pi/9)*cos(sita))*(xm-r*sita+ym*tan(pi/9)))/((tan(pi/9))^2+1); result = R(2*n*pi/z)*[x1;y1;1]; x = result(1,1); y = result(2,1); l1 = b*sin(sita)+(a-r*sita)*cos(sita); l2 = (r-b)*cos(sita)+(a-r*sita)*sin(sita); l3 = b*cos(sita)-(a-r*sita)*sin(sita); l4 = (r-b)*sin(sita)-(a-r*sita)*cos(sita); y = l3 - R*((l2))/((l2^2+l4^2)^0.5); x = l1 - R*((l4))/((l2^2+l4^2)^0.5); |
![]() |
![]() |