2007年3月29日 星期四

機動學HW4


B94611023許惠善


本次作業二三僅要求畫出對應的相關位置,沒有明確表示是否要以動畫方式呈現,所以我的程式碼暫以「動畫」呈現,如果不想要以動畫呈現的話,分別在第二題的第7、第三題第8行(clf部分)行以及第二題28~34行第三題第30行處(pause部分)前,加上%使其變成註解方式,可自由改變是否以動態程式呈現,或是只要圖片亦可直接刪除上述程式碼。

另外我的螢幕因為是16:9的,所以圖形在動畫會跑得有點怪怪的,好像有點不合比例,不過我確定我的程式碼在別人電腦裡跑出來是正確無誤的。

以下為程式碼內容:

ANS1:



clf;

%宣告三角形邊長
L=23+10;

%宣告三角形的三個座標,為了回到原點我們必須對起點重複
Triangle=[0 0;L 0;L/2 (L.*3^0.5)./2;0 0];
%宣告另一個triangle,使我們可以暫存三角形的旋轉座標
triangle=Triangle;
%因為總共旋轉三次,所以使用for畫圖三次縮短程式碼
for i=1:1:3;

%本段的if i==2的部分是將第二個座標先移到原點做旋轉
%下一段i==2的部分是把座標在移回去原來對應的圖形
if(i==2);
Triangle(:,1)=Triangle(:,1)-L;
end;
%本段的if i==3的部分是將第三個座標先移到原點做旋轉
%特別要注意的是:
%但由於在第二個部分的時候我們先把Triangle(:,1)都向左移了L
%所以這部分我們只要移動向右L/2
%下一段i==2的部分是把座標在移回去原來對應的圖形
if(i==3)
Triangle(:,1)=Triangle(:,1)+L/2;
Triangle(:,2)=(Triangle(:,2)-(L.*3^0.5)./2);
end;
for theta=0:0.5:360;

%x座標旋轉
triangle(:,1)=Triangle(:,1)*cosd(theta)+Triangle(:,2)*sind(theta);

%y座標旋轉
triangle(:,2)=-Triangle(:,1)*sind(theta)+Triangle(:,2)*cosd(theta);

if(i==2);
triangle(:,1)=triangle(:,1)+L;
end;
if(i==3)
triangle(:,1)=triangle(:,1)+L/2;
triangle(:,2)=(triangle(:,2)+(L.*3^0.5)./2);
end;

axis equal;
axis ([-40 80 -40 80]);

%畫出三角形
line(triangle(:,1),triangle(:,2));

grid on;
hold on;

%使圖形暫停0.0001秒鐘,變成動畫
pause(0.0001);

%除了最後一個圖以外,我們都要清除原來的圖形,才會是動畫,
%為方便觀察每點第一圖停留較久,尤其第一點旋轉圖的第一途停留最久
if theta==0
pause(1.5);
if i==1
pause(5)
end
end
if i<3theta<360;
clf;
end;
end;
end;



Ans2:



%先訂出連桿的始點
L=[0 0;10 0];
%宣告一個變數以做旋轉
l=L;
%動畫從0度到360度每隔一度做變化
for theta=0:1:360;
clf;

%x座標旋轉
l(:,1)=L(:,1)*cosd(theta)+L(:,2)*sind(theta);

%y座標旋轉
l(:,2)=-L(:,1)*sind(theta)+L(:,2)*cosd(theta);

%呼叫lineshape函數繪圖
linkshape([l(1,1),l(1,2)],[l(2,1),l(2,2)],4);
hold on;

%畫出彈簧位置與連桿連結,為了讓圖形看起來比較清楚,特別將彈簧畫紅色,並在兩端做+記號
plot(15,0,'r+')
plot(l(2,1),l(2,2),'r+')
line([15,l(2,1)],[0,l(2,2)],'color','r');


axis ([-15 15 -15 15]);
grid on;

%為了讓圖形觀察容易,在初始值的時候停留一秒鐘
if theta==0;
pause(10)
end;

pause(0.001);
end;


Ans 3:



%先訂出連桿的始點
%A(0,0);B(3,4);C(13,4);D(10,0),
L=[0 0;3 4;13 4;10 0];
%宣告一個變數以做旋轉
l=L;
%動畫從0度到360度每隔一度做變化
for theta=0:30:360;
clf;

%首先僅需考慮主動軸
%x座標旋轉
l(2,1)=L(2,1)*cosd(theta)+L(2,2)*sind(theta);
%y座標旋轉
l(2,2)=-L(2,1)*sind(theta)+L(2,2)*cosd(theta);


%因為AB是主動軸,所以C點的位置會受到B點牽制,故XC=XB+10
l(3,1)=l(2,1)+10;
l(3,2)=l(2,2);

%呼叫lineshape函數繪圖
linkshape([l(1,1),l(1,2)],[l(2,1),l(2,2)],3);
linkshape([l(2,1),l(2,2)],[l(3,1),l(3,2)],2);
linkshape([l(3,1),l(3,2)],[l(4,1),l(4,2)],1.5);
linkshape([l(4,1),l(4,2)],[l(1,1),l(1,2)],2);
hold on;

axis ([-10 20 -15 15]);
grid on;
if theta==0;
pause(10);
end;
pause(0.8);
end;

2 則留言:

Martin Foon 提到...

Good work! It would be better if you declare "axis equal" first to make sure the shape of link is right.

gaohui 提到...

If you're a plus size woman you've probably Moncler noticed that the majority of coats in stores today are moncler veste designed with women that are supposed to be moncler doudoune shaped like a toothpick. It can be difficult to moncler hommes find a coat that not only looks good but also doesn't break the moncler femmes bank. Coats typically cost a lot of money so it's in your doudoune moncler femmes best interest to shop wisely.A lot of women doudoun moncler hommes make the mistake of only thinking about their dress doudoune moncler femmes or skirt when putting together an doudoune moncler hommes outfit. However, it's important to keep in mind that the majoriy of moncler-gilet people are going to see you with a coat on.