天天看点

matlab曲线设计代码,基于matlab生成的scr文件,实现autocad曲线绘制,代码问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

如题,请大神看看错在哪里了,代码如下:

%位移曲线设计

clear;

for i=1:1:60

y(i)=i/60;

x(i)=0;

end

for i=61:1:90

y(i)=1;

x(i)=(i-60)/60;

end

for i=91:1:120

y(i)=cos(2*pi*(i*2-180)/240)/2+1/2;

x(i)=(1/60)*(240/(2*pi))*sin(pi*(i*2-180)/120)/2+1/2;

end

for i=180:-1:121

x(i)=x(240-i);

y(i)=-y(240-i)+1;

end

for i=359:-1:181

x(i)=x(360-i);

y(i)=-y(360-i);

end

y(360)=0;y(361)=y(1);

x(360)=0;x(361)=x(1);

%画未修正速度曲线

figure(1);

subplot(2,1,1);

plot(x);

axis([-1 400 -1 2]);

subplot(2,1,2);

plot(y);

axis([-1 400 -1.2 1.2]);

%修正位移曲线

for i=55:1:65

x(i)=-(1/120)*(20/(2*pi))*sin(2*pi*(i-55)/20)+(i-55)/120 +x(55);

y(i)=(1/120)*(20/(2*pi))*sin(2*pi*(i-55)/20)+(i-55)/120 +y(55);

end

for i=359:-1:181

x(i)=x(360-i);

y(i)=-y(360-i);

end

y(360)=0;y(361)=y(1);

x(360)=0;x(361)=x(1);

%画修正位移曲线

figure(2);

subplot(2,1,1);

plot(x);

axis([-1 400 -1 2]);

subplot(2,1,2);

plot(y);

axis([-1 400 -1.2 1.2]);

%求导

for i=2:1:361

zx(i-1)=x(i)-x(i-1);

zy(i-1)=y(i)-y(i-1);

end

zx(360)=0;

zy(360)=1/60;

zx(361)=zx(1);

zy(361)=zy(1);

%画速度曲线

figure(3);

subplot(2,1,1);

plot(zx);

subplot(2,1,2);

plot(zy);

x2=x;

y2=y;

%凸轮设计

x2=x2*5;

zx=zx*5;

y2=y2*7;

zy=zy*7;

e=8;

r0=40;

rr=5;

s0=sqrt(r0*r0-e*e);

i=1:1:361;

s1=sin(2*pi*i/360);

c1=cos(2*pi*i/360);

% x 方向凸轮

xl1=(s0+x2).*s1+e*c1;

yl1=(s0+x2).*c1-e*s1;

dx1=(zx-e).*s1+(s0+x2).*c1;

dy1=(zx-e).*c1-(s0+x2).*s1;

s21=dx1./sqrt(dx1.^2+dy1.^2);

c21=-dy1./sqrt(dx1.^2+dy1.^2);

xx1=xl1-rr*c21;

yy1=yl1-rr*s21;

% y 方向凸轮

xl2=(s0+y2).*s1+e*c1;

yl2=(s0+y2).*c1-e*s1;

dx2=(zy-e).*s1+(s0+y2).*c1;

dy2=(zy-e).*c1-(s0+y2).*s1;

s22=dx2./sqrt(dx2.^2+dy2.^2);

c22=-dy2./sqrt(dx2.^2+dy2.^2);

xx2=xl2-rr*c22;

yy2=yl2-rr*s22;

%画字母“D”

figure(4)

plot(x2,y2);

title('letter B');

axis([-2 10 -9 9]);

%画X凸轮

figure(5);

plot(xl1,yl1);

hold on;

plot(xx1,yy1);

title('x-Cam');

%画Y凸轮

figure(6);

plot(xl2,yl2);

hold on;

plot(xx2,yy2);

title('y-Cam');

%压力角检验

figure(7)

for i=1:1:361

yy(i)=atan((zx(i)-e))./(x2(i)+s0);

yy(i)=yy(i)*180/pi;

plot(yy);

title('x-pressure angle');

end

figure(8)

for i=1:1:361

yy(i)=atan((zy(i)-e))./(y2(i)+s0);

yy(i)=yy(i)*180/pi;

plot(yy);

title('y-pressure angle');

end

zyr=[xx2,yy2];

zyt=[xl2,yl2];

save d:\cam_realyr zyr -ascii;

save d:\cam_realyt zyt -ascii;

fid=fopen('D:\\camA.scr','W'); % “D:\\camA.scr”为保存文件

fprintf(fid,'spline\n'); % spline 为样条曲线拟合

for i=1:1:361;

fprintf(fid,'%g,%g\n',xl2(i),yl2(i)); % 写入数据

end;

fprintf(fid,'c\n'); % 数据段分割结束

fprintf(fid,'spline\n'); % spline 为样条曲线拟合

for i=1:1:361;

fprintf(fid,'%g,%g\n',xx2(i),yy2(i)); % 写入数据

end;

fprintf(fid,'c\n'); % 数据段分割结束

fclose(fid); % 结束文件编辑