Matlab程序绘制凸轮轮廓曲线

Matlab程序绘制凸轮轮廓曲线
%Homework of Cam Design
%By Maosheng Liao
%2015.09.18
h=15;
b=90*pi/180;
r0=30;
e=5;
rr=6;
w=10;
s0=sqrt(r0*r0-e*e);
for i=1:1:90;
sita(i)=i*pi/180.0;
s1=h*(sita(i)./b-sin(2*pi*sita(i)./b)/(2*pi));
v1=h*w./b-w*h*cos(sita(i)*2*pi./b)./b;
a1=sin(sita(i).*2.*pi./b)*w.^2.*2*pi./(b.^2);
j1=cos(sita(i).*2.*pi./b)*w.^3.*4.*pi.^2./(b.^3);
x(i)=(s0+s1)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s1)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s1)*cos(sita(i))-e*sin(sita(i));
b(i)=(s0+s1)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*b(i)./sqrt(a(i)*a(i)+b(i)*b(i));
yy(i)=y(i)-rr*a(i)./sqrt(a(i)*a(i)+b(i)*b(i));
alpha(i)=atan((v1-e)./(s0+s1));
end
for i=91:1:180;
sita(i)=i*pi/180;
s2=h;
v2=0;
a2=0;
j2=0;
x(i)=(s0+s2)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s2)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s1)*cos(sita(i))-e*sin(sita(i));
b(i)=(s0+s1)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*b(i)/sqrt(a(i)*a(i)+b(i)*b(i));
yy(i)=y(i)-rr*a(i)/sqrt(a(i)*a(i)+b(i)*b(i));
alpha(i)=atan((v2-e)/(s0+s2));
end
for i=181:1:270;
sita(i)=i*pi/180;
s3=-h*((sita(i)-3*pi/2)/b-sin(2*pi*(sita(i)-3*pi/2)/b)/(2*pi));
v3=h*w/b+h*w/b*cos(2*pi*(sita(i)-3*pi/2)/b);
a3=-h*(w^2)*2*pi/(b^2)*sin(2*pi*(sita(i)-3*pi/2));
j3=-h*w^3*4*pi^2/(b^3)*cos(2*pi*(sita(i)-3*pi/2));
x(i)=(s0+s3)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s3)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s3)*cos(sita(i))-e*sin(sita(i));
b(i)=(s0+s3)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*b(i)/sqrt(a(i)*a(i)+b(i)*b(i));
yy(i)=y(i)-rr*a(i)/sqrt(a(i)*a(i)+b(i)*b(i));
alpha(i)=atan((v3-e)/(s0+s3));
end
for i=271:1:360;
sita(i)=i*pi/180;
s4=0;
v4=0;
a4=0;
j4=0;
x(i)=(s0+s4)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s4)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s4)*cos(sita(i))-e*sin(sita(i));
b(i)=(s0+s4)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*b(i)/sqrt(a(i)*a(i)+b(i)*b(i));
yy(i)=y(i)-rr*a(i)/sqrt(a(i)*a(i)+b(i)*b(i));
alpha(i)=atan((v4-e)/(s0+s4));
end
这个怎么老是出现
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> Camdesign at 17
x(i)=(s0+s1)*sin(sita(i))+e*cos(sita(i),求指教如何改正。

h=15;
b=90*pi/180;
r0=30;
e=5;
rr=6;
w=10;
s0=sqrt(r0*r0-e*e);

for i=1:1:90;
sita(i)=i*pi/180.0;
s1=h*(sita(i)./b-sin(2*pi*sita(i)./b)/(2*pi));
v1=h*w./b-w*h*cos(sita(i)*2*pi./b)./b;
a1=sin(sita(i).*2.*pi./b)*w.^2.*2*pi./(b.^2);
j1=cos(sita(i).*2.*pi./b)*w.^3.*4.*pi.^2./(b.^3);
x(i)=(s0+s1)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s1)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s1)*cos(sita(i))-e*sin(sita(i));
bb(i)=(s0+s1)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*bb(i)./sqrt(a(i)*a(i)+bb(i)*bb(i));
yy(i)=y(i)-rr*a(i)./sqrt(a(i)*a(i)+bb(i)*bb(i));
alpha(i)=atan((v1-e)./(s0+s1));
end
for i=91:1:180;
sita(i)=i*pi/180;
s2=h;
v2=0;
a2=0;
j2=0;
x(i)=(s0+s2)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s2)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s1)*cos(sita(i))-e*sin(sita(i));
bb(i)=(s0+s1)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*bb(i)/sqrt(a(i)*a(i)+bb(i)*bb(i));
yy(i)=y(i)-rr*a(i)/sqrt(a(i)*a(i)+bb(i)*bb(i));
alpha(i)=atan((v2-e)/(s0+s2));
end
for i=181:1:270;
sita(i)=i*pi/180;
s3=-h*((sita(i)-3*pi/2)/b-sin(2*pi*(sita(i)-3*pi/2)/b)/(2*pi));
v3=h*w/b+h*w/b*cos(2*pi*(sita(i)-3*pi/2)/b);
a3=-h*(w^2)*2*pi/(b^2)*sin(2*pi*(sita(i)-3*pi/2));
j3=-h*w^3*4*pi^2/(b^3)*cos(2*pi*(sita(i)-3*pi/2));
x(i)=(s0+s3)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s3)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s3)*cos(sita(i))-e*sin(sita(i));
bb(i)=(s0+s3)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*bb(i)/sqrt(a(i)*a(i)+bb(i)*bb(i));
yy(i)=y(i)-rr*a(i)/sqrt(a(i)*a(i)+bb(i)*bb(i));
alpha(i)=atan((v3-e)/(s0+s3));
end
for i=271:1:360;
sita(i)=i*pi/180;
s4=0;
v4=0;
a4=0;
j4=0;
x(i)=(s0+s4)*sin(sita(i))+e*cos(sita(i));
y(i)=(s0+s4)*cos(sita(i))-e*sin(sita(i));
a(i)=(s0+s4)*cos(sita(i))-e*sin(sita(i));
bb(i)=(s0+s4)*sin(sita(i))-e*cos(sita(i));
xx(i)=x(i)-rr*bb(i)/sqrt(a(i)*a(i)+bb(i)*bb(i));
yy(i)=y(i)-rr*a(i)/sqrt(a(i)*a(i)+bb(i)*bb(i));
alpha(i)=atan((v4-e)/(s0+s4));
end

主要问题是,一开始定义了变量b=90*pi/180是一个标量常数
后来循环计算中用了b(i)结果是一个数组
你这里肯定是变量太多,搞混了
前面的b,和数组b(i)应该是两个不同的变量

所以我把数组改名字为bb,就没有报错了
你也可以将一开始的b改个名字
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-24

本视频展示如何用matlab绘制散圆状态图,可用于相关科研数据绘图!

00:00
00:00
  • 2
  • 1.5
  • 1
  • 0.75
  • 0.5
X1
正在播放

相似回答