2007年3月25日 星期日

作業4-3

axis equal; %設定刻度
axis([-15 20 -15 15]); %用來計算各連桿數值的初始值

Ax=[0,3,0,10];
Ay=[0,4,0,0];
Bx=[3,13,3,0];
By=[4,4,4,0];
d=[3,1.5,2,2]; %各連桿的厚度
Dxx=zeros(1,13); %用來儲存第三桿始點x之座標值的陣列
Dyy=zeros(1,13); %用來儲存第三桿始點之y座標值的陣列
Dxxp=zeros(1,13); %用來儲存第三桿終點之x座標值的陣列
Dyyp=zeros(1,13); %用來儲存第三桿終點之y座標值的陣列

%開始繪圖
for n=1:1:4,

AB=(Bx(n)+j*By(n))-(Ax(n)+j*Ay(n)); %計算連桿長度
D=abs(AB); %取絕對值
th=angle(AB); %連桿與水平軸的夾角
t=linspace(pi/2,2.5*pi,20); %計算角度差
Cout=d(n)/2*exp(j*t'); %外圓的半徑
Cin=Cout/2; %內圓的半徑
P=[0;Cin; %連桿各點之水平狀態
Cout(1:10);
D+Cout(11:20);
D+Cin;
D+Cout(20);
Cout(1)];
xx=real(P); %取x座標部份
yy=imag(P); %取y座標部份

x=xx*cos(th)-yy*sin(th)+Ax(n); %利用水平夾角計算x,y座標
y=xx*sin(th)+yy*cos(th)+Ay(n);
Dx=3; %第三連桿之起始點初始值
Dy=4;

%AB(第二桿)為主動迴轉桿
if(n==1)
for theta=0:30:360,
x1=x*cosd(theta)-y*sind(theta); %轉動公式
y1=x*sind(theta)+y*cosd(theta);
Dxx((theta/30)+1)=Dx*cosd(theta)-Dy*sind(theta); %儲存第三桿之起始點座標
Dyy((theta/30)+1)=Dx*sind(theta)+Dy*cosd(theta);
line(x1,y1,'color','k'); %繪製第二桿之軌跡
end;
end;

if(n==3) %CD桿(第四桿)
for theta=0:30:180-atand(4/3), %於平行四邊形機構狀態下轉動
x2=Ax(4)+x*cosd(theta)-y*sind(theta); %轉動及移動公式
y2=x*sind(theta)+y*cosd(theta);
Dxxp((theta/30)+1)=Ax(4)+Dx*cosd(theta)-Dy*sind(theta); %儲存第三桿之終點座標
Dyyp((theta/30)+1)=Dx*sind(theta)+Dy*cosd(theta);
line(x2,y2,'color','k'); %繪製第四桿之軌跡
end;

x2=Ax(4)+x*cosd(-30)-y*sind(-30); %於第11個轉點下之狀態
y2=x*sind(-30)+y*cosd(-30);
Dxxp(11)=Ax(4)+Dx*cosd(-30)-Dy*sind(-30);
Dyyp(11)=Dx*sind(-30)+Dy*cosd(-30);
line(x2,y2,'color','k');

for nn=5:1:10, %於平行四邊形反置機構狀態下轉動
w=360-(atand(4/3)+30*nn); %計算第四桿的轉動角度
m=75/(20-10*cosd(w));
theta=180-(acosd((25-4*m)/(20-2*m)))-atand(4/3);
x2=Ax(4)+x*cosd(theta)-y*sind(theta); %轉動及移動公式
y2=x*sind(theta)+y*cosd(theta);
Dxxp(nn+1)=Ax(4)+Dx*cosd(theta)-Dy*sind(theta) %儲存第三桿之終點座標
Dyyp(nn+1)=Dx*sind(theta)+Dy*cosd(theta)
line(x2,y2,'color','k'); %繪製第四桿之軌跡
end;
end;

if(n==4) %繪製第一桿(固定桿AD)之軌跡
line(x,y,'color','r');
end;

end;


for k=1:1:13; %計算BC桿(第三桿)之軌跡
AB=(Dxxp(k)+j*Dyyp(k))-(Dxx(k)+j*Dyy(k)); %計算連桿長度
D=abs(AB); %取絕對值
th=angle(AB); %計算連桿與水平軸之夾角
t=linspace(pi/2,2.5*pi,20);
Cout=3/2*exp(j*t'); %外圓半徑
Cin=Cout/2; %內圓半徑
P=[0;Cin; %設定各點於水平狀態下之座標值
Cout(1:10);
D+Cout(11:20);
D+Cin;
D+Cout(20);
Cout(1)];
xx=real(P); %取x座標值
yy=imag(P); %取y座標值
x=xx*cos(th)-yy*sin(th)+Dxx(k); %利用轉動及移動公式計算出新的座標值
y=xx*sin(th)+yy*cos(th)+Dyy(k);
line(x,y,'color','b'); %繪製第三桿(固定桿BC)之軌跡


end;






右圖是以平行四邊形反置機構的角度觀點來繪製

沒有留言: