2007年6月13日 星期三

HW13


生機二 B84611023 許惠善



1.試設計一組複式齒輪,使其轉速比為125(請說明思考步驟及結果)。

(1) 決定組合數:

a.對125開根號≒11.180>10,因為每組轉數比維持在10之內較佳,所以由此可見,用兩組組合不佳。

b.我們考慮對125開立方根=5<10,故使用三組齒輪。

(2) 由(1)可知我們僅需串聯三組齒輪即可,其齒數對應可由

小齒輪齒數×5=大齒輪齒數 得知

選用齒輪對應可得

小齒輪齒數 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

對應大齒輪齒數60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150

(3) 當壓力角為25度時,為防止內切,故小齒輪齒數選擇12,故三組齒輪分別為12,60;12,60;12,60




2.請指出本學期中你自己最感得意的一次作業(請說明其原因,且該作業必須在自己的部落格內)。
我最感得意的作業是HW10 






其實HW3 HW4 HW5我自己也都很喜歡,因為那幾次作業寫完程式後,仍然不斷更改自己的程式,盡量把我的程式碼的邏輯用的更簡單(ex:HW5的手指,由一開始在跑程式的TEST時描很多點去做修正,自己想像一個拋物線方程式,利用拋物線方程去畫出手指的圖形,節省每個點必須自己INPUT的困擾)





另外,在作業時也將自己的照片、圖片加註很多對於說明自己作業更清楚、淺顯易懂的標記,所以我自己覺得HW3、4、 5,其實都還滿有參考價值的。





然而,HW10雖然沒有很多很難的程式碼要自己寫,這次作業一開始我也盡可能的像以往寫作業一樣,程式碼可以利用老師的程式作修改,也將自己的邏輯整理上去,註解部分盡求詳細、明瞭。



然而我覺得從作業十開始,自己有很大的進步。主要是因為,這篇作業是在和老師小組討論後才發表的。雖然之前有再看大家的BLOG,但並沒有很仔細檢討自己的作業缺失,和老師小組討論以後,我在去參考同學的BLOG,發現自己也有很多可以改善的地方:



(1)李儀珊的BLOG頁面非常詳細易懂,雖然我的BLOG放了很多內容進去,但我覺得儀珊的BLOG因為有套色的關係,所以整個版面讓讀者可以很容易的瞭解重點在哪,也不會看起來那麼雜亂,所以在這次作業我也開始改善自己的版面顏色配置。





(2)小組討論時聽林詠瞬提到,matlab的圖形可以直接在matlab程式中做修改,這次圖片就不像以往在小畫家畫得那麼辛苦,反而在matlab畫完後,整個圖片也比較有質感。





我認為我每次作業都很用心再撰寫,但其實沒想到自己的作業也應該去做的更好,而這次作業因為吸收不同人的長處,也保有自己原先的想法和優點,所以我很喜歡我的HW10。所以我認為多多參考別人的BLOG,會讓自己的作業更充實,BLOG經營的更好!!


2007年6月7日 星期四

HW12

生機二  B94611023 許惠善
我5/31日曾全程來上課。



Q:一組標準全齒輪齒輪之徑節為8(亦可使用自設值),齒數分別為30T與48T,其工作壓力角為20度(可為14.5或25度,自選)。

1.試求其接觸線長度,與接觸比。


本題利用老師講義中的contact_ratio function即可求出答案

呼叫方式如下:
[c_ratio, c_length,ad,pc,pb,d2,d3,ag]=contact_ratio(8,30,40,20)

[輸入]
第一項為徑節,由題目所知為8
第二項為齒輪一的齒數,由題目所知為30
第三項為齒輪二的齒數,由題目所知為48
第四項為壓力角,由題目所知為20

[輸出]
第一項為接觸比:c_ratio = 1.7005
第二項為接觸長度:c_length =0.6275
第三項為齒冠:ad =0.1250
第四項為周節:pc =0.3927
第五項為基周節:pb =0.3690
第六項為齒輪一的節圓直徑:d2 =3.7500
第七項為齒輪二的節圓直徑:d3 =6
第八項
ag =
接近角 遠退角 作用角
齒輪一 10.4850 9.9211 20.4061
齒輪二 6.5532 6.2007 12.7538


第一項接觸比:c_ratio = 1.7005
第二項接觸長度:c_length =0.6275

即為所求

2.兩齒輪之節圓、基圓直徑各為如何?請列式計算其結果。

由課本公式可知

節圓直徑=齒數÷徑節
D=N/Pd
[齒輪一]
D1=30/8=3.75
[齒輪二]
D2=48/8=6

由課本公式可知
基圓直徑=節圓直徑×cos(工作壓力角)
D'=D×cos(ψ)

[齒輪一]
D1'=D1×cos(ψ)
D1'=3.75×cos20=3.53
[齒輪二]
D2'=D2×cos(ψ)
D2'=6×cos20=5.64

節圓直徑亦可用第一題的結果第六項及第七項d2,d3得到
另原程式碼中,亦有求rb2以及rb3,即基圓的直徑,我們可以在funtion的輸出中加入rb2,rb3兩項
且由程式結果可知我們的計算無誤

3.此組齒輪是否會產生干涉現象?試列式證明之。

由課本公式9.47,測試干涉之條件為:
(N1²+2N1 x N2)sin²ψ≧ 4 + 4N2

又題目所給N1=30T,N2=48T,Φ=20 則
(30²+2x30x48)*sin²(20)>4+4x48

∴不會產生干涉。

此題亦可使用老師講義中範例9.20 function [x]=isinterf(phi,N1,N2)計算
執行結果如下:

>> [x]=isinterf(20,30,48)
x = 0
[輸入]
第一項為壓力角為20
第二項為齒輪一齒數,30齒
第三項為齒輪二齒數,48齒

[輸出]
x=1表示產生干涉
x=0表示不產生干涉

∵ans=0
∴不產生干涉,與計算結果吻合。


另外,此題產生干涉的最低齒數可由課本公式(9.48)
N=2k/sin²ψ

已知20度時,k=1
N=18,故小齒輪的最低齒數為18

亦可由老師講義上的function min_teeth執行
執行如下:
>> [minT, value]=min_teeth(20,1)
minT = 18 %最小齒數=18,與我們計算結果吻合
value =17.0973

4.可否利用draw_gear.m繪出其接合情形,並繪出其動畫效果。
此題利用老師所提供的function move2_gear(Dpitch,nn1,nn2,phi,omega1)其實就可以解這題了,事實上老師的function中,其實不難看出本程式碼與draw_gear其實在畫出齒輪的部分概念大致相同。

其呼叫如下:
move2_gear(8,30,48,20,10)

[輸入]
第一項為徑節,由題目所知為8
第二項為齒輪一的齒數,由題目所知為30
第三項為齒輪二的齒數,由題目所知為48
第四項為壓力角,由題目所知為20
第五項為齒輪一的角速度,,自訂為10

輸出動畫如下:


[本題作業心得]
本題我起初自己改寫draw_gear改寫,然而動畫一直無法跑對,錯誤的動畫如下:

後來比對老師的程式碼function move2_gear(Dpitch,nn1,nn2,phi,omega1),
才發現自己的錯誤在於兩個齒輪在轉動時,相同的並不是他們角速度,而我在跑迴圈時,卻利用角速度做迴圈的條件,在去旋轉圖形,當然跑出了的齒輪不會吻合了。

另外,看見老師的輸出動畫標題打了「按ctrl+c停止」。我才知道有這個功能,之前在做作業的時候,往往因為邏輯上的疏失,常常錯誤的動畫必須耗很久時間讓他跑完,然而現在學會了終止動畫的方法,其實對於在寫程式的時候,要debug是很大的一項幫助

2007年6月1日 星期五

HW11

B94611023生機二許惠善

我本週(5/24)有來上課。

1.某凸輪開始時先在0-100∘區間滯留,然後提升後在200至260∘區間滯留,其高度(衝程)為5公分,其餘l由260∘至360∘則為返程。升程採用等加速度運動,返程之運動型式自定。設刻度區間為10∘,試繪出其高度、速度及加速度與凸輪迴轉角度間之關係。

本題利用老師網路上的程式即可作答。唯dwell函數有部分錯誤,dwell內的parabolicm函數需做修改,方可使用,其錯誤不大,所以僅附在本次作業之後,不再說明。

我所設定的突輪返程運動形式仍選擇用等加速度運動。
函數呼叫為 plot_dwell(0:10:360,5,[2 2],[100 200 260])

[說明]
第一項表示角度:選擇0-360度之區間做圖,故input0:10:360
第二項表示從動件衝程:題目設定為5cm,故input 5
第三項表示形式:因為皆為等加速度運動,所以應選擇2:parabolic 曲
第四項表示運動始末的角度:升程由100度開始運動且200度終止,故前兩項各為100、200,返程始於260度,故第三項為360




由圖可見,其函數圖形在紫色框框範圍內時,雖然速度值仍為斜直線,即加速度值應為水平線,然而加速度值卻掉下來了。原因是因為我們取間隔10度做變化,於是連線變為斜直線。

故我先對plot_dwell稍做更改,將原程式h1=plot(ctheta,y*s,'b-',ctheta,yy*s,'k-',ctheta,yyy*s,'r-')部分,
改為h1=plot(ctheta,y*s,'bo',ctheta,yy*s,'ko',ctheta,yyy*s,'ro'),再重新存成plot_dwell_point,目的是將這十個數據標示成點。

重新呼叫一次:
plot_dwell(0:1:360,5,[2 2],[100 200 260]) %線段部分改為一度一數據
hold on;
plot_dwell_point(0:10:360,5,[2 2],[100 200 260])
%將十個點以o表現出來

如此一來圖形清楚且正確多了



2.設凸輪之半徑為15公分,以順時針方向旋轉,其從動件為梢型,垂直接觸,長為10公分,從動件之運動係依照第二項之運動型式。試繪出此凸輪之工作曲線。

此題仍然依老師程式pincam呼叫即可得到

[x y]=pincam([0:10:360],15,5,0,10,[100 200 260],[2 2],-1);

[說明]
第一項表示角度:選擇0-360度之區間做圖,故input0:10:360
第二項表示突輪基圓半徑:題目要求為15cm,故input為15
第三項表示從動件衝程:題目設定為5cm,故input 5
第四項表示偏置量:設為0
第五項表示從動件長度:題目設定為10cm,故input 10
第六項表示運動始末的角度:升程由100度開始運動且200度終止,故前兩項各為100、200,返程始於260度,故第三項為360
第七項表示形式:因為皆為等加速度運動,所以應選擇2:parabolic 曲線
第八項表示凸輪轉動方向順時針為-1,逆時針為+1,題目所求為順時針,故input -1


圖形表示突輪與從動件的關係

3.你能讓此凸輪迴轉嗎?

本題由老師題目程式pincam做更改即可,原程式碼是將所有突輪上的點與從動件的關係依突輪固定表示之。

簡單的來思考這個問題,這支程式碼原先是先繪出所有線段,最後再迴圈外把突輪畫出來。所以我們可以先將從動件底端與圓心的線(這條是跑動畫不需要的線段)刪除。再者,我們無論圖形如何轉動,都應該有所有突輪的數據(也就是輪廓),最後我們去思考在轉動時,一次只能有一條從動件的關係在圖上。

所以應該不難想出,大致上的想法是利用兩組迴圈組成此程式,第一次迴圈中先將整個突輪的形狀相對關係求出,第二次在去做繪圖及旋轉

程式碼如下:

function [x,y]=pincam_rotate(cth,r0,s,e,L,range,pattern,cw)

figure(4);
clf;
th=cth*pi/180;
s0=sqrt(r0*r0-e*e);

%第一次迴圈
%我們將先求出整個突輪的形狀
%所以在此運算部分我們不需要去對老師的程式做更改

for i=1:length(cth)
t=th(i)*cw;
A=[cos(t) -sin(t);sin(t) cos(t)];
[ym,yy,yyy]=dwell(cth(i),range,pattern);
x0=s0+ym*s;
Sx=[0 x0 x0+L;e e e];
X=A\Sx;
x(i)=X(1,2);y(i)=X(2,2);

%原先此處line出圖形,在此刪除,否則所有的線會同時留在圖上
%line(X(1,1:2),X(2,1:2));
%line(X(1,2:3),X(2,2:3),'linewidth',3,'color','red')



end

%本angle是為了旋轉圖形90度之用
angle=[cosd(90) -sind(90);sind(90) cosd(90)];

%第二次迴圈才是真正要畫出圖形以及執行動畫
for i=1:length(cth)
clf ;
t=th(i)*cw;
[ym,yy,yyy]=dwell(cth(i),range,pattern);

%因為圖形在迴轉,所以應該和桿接觸點會固定在某一軸上
%所以我們先旋轉突輪
%因為xy(突輪外觀)是在上一個迴圈裡出現,所以我們每次更改數值時並不會影響xy的值


%原程式設計為圖形基準為x方向,但旋轉到了突輪各角度的方向,所以我一開始先將圖形轉回至正x方向(水平)
o=x*cos(-t)+y*sin(-t)
p=x*sin(-t)-y*cos(-t)


%然而題目所求為y方向(垂直),故我應將圖形旋轉至y方向上
m=o*cosd(90)+p*sind(90)
n=o*sind(90)-p*cosd(90)

%先畫出整個突輪的外型
plot([0 m],[0 n],'ro',m,n,'k-')
axis([-50 50 -50 50])
grid on;

%運算從動件位置
x0=s0+ym*s;
Sx=[0 x0 x0+L;e e e];

%本處老師程式原設計為旋轉某角度到突輪的各點使從動桿連接,然而現在我們不需要,只需要由水平轉回垂直向即可。
X=angle*Sx;

%為使圖形清楚,我仍然把從動桿底端到突輪中心線刪除
%line(X(1,1:2),X(2,1:2));

%畫線成為動畫
line(X(1,2:3),X(2,2:3),'linewidth',3,'color','red')
pause(0.5)

end
hold on;
grid on


呼叫為:
[x y]=pincam_rotate([0:10:360],15,5,0,10,[100 200 260],[2 2],-1);
(各項說明同上題)

動畫如下:

2007年5月25日 星期五

HW10

B94611023 生機二 許惠善
本週我有上課

1.請思考速度與加速度的問題,當一桿以某特定點M等角速度迴轉時,其端點P之速度方向如何? 其加速度方向如何?

由下圖可見,我們取特定點o作為迴轉時:

端點p的速度:

即為vp=ω×r,由內積的結果,其量值為ωr,方向則為切線方向,也就是垂直op這條線的方向。

端點p的加速度:

切線方向上,因為並無角加速度,故其切線方向並無加速度。然而在做迴轉的同時,有一法線加速度是朝內的,an=ω×(ω×r),內積的結果,量值為(ω^2)r,方向則由o朝p方向。






然而,若是今天迴轉的中心不在端點O而是桿上任一點M,我們就要取該點M與P的距離作為新的r',仍然適用於上列分析。 即vp'=ω×r'以及an'=ω×(ω×r')。其結果方向仍然與上述分析相同,唯量值改變。


若該特定點M復以等速水平運動,則同一端點P之速度與加速度方向會變為如何?


端點p的速度:

p受Vo影響,所以Vp=ω×r+Vo,其向量和在圖中所示為咖啡色線段,其水平分量為Vo+ωrcosθ,垂直分量為ωrsinθ

端點p的加速度:

不受Vo影響,an=ω×(ω×r),內積的結果,量值為(ω^2)r,方向則由o朝p方向。

若M點同時也有加速度,則點P會有何變化?

P點的速度:
如前述所分析,不受ao所影響, Vp=ω×r+Vo,其水平分量為Vo+ωrcosθ,垂直分量為ωrsinθ

P點的加速度:
除原先an=ω×(ω×r),然而整個ap要加上ao的加速度,所以ap=ao+an(rad/s^2)的和向量,如下圖粉紅色線段所示。
可分為垂直分量和水平分量。垂直分量=ω^2*rcosα水平分量=ao+ω^2*rsinα


若以此推理四連桿的運動,則點P與Q之速度與加速度方向會與桿一(固定桿)之兩端點之關係如何?與我們前面的作業分析結果有無共通之處?(參看第六章之四連桿機構之運動分析)

本題一開始我想用瞬心的觀念來解,然而後來想到加速度無法用順心的觀念解,故僅先列出瞬心的速度部分。


由圖上可見,若op桿以ω開始運動,則p的速度顯而易見的,速度垂直r1,然而也可知道q點速度必垂直r2。
而瞬心由做圖的方式,由pq兩點做延伸線(因恰分別垂直於r1,r2)而可求得Ic的位置
接著求Vp:因o點以及IC速度皆為零,故Vp=r1*ω1=r1'*ω2
由上式我們可以求得ω2,再以Vq=r2'*ω2解出Vq

但求速度及加速度則必須去求出p、q間的關係。
首先,o及R兩點皆為固定點。所以可列出:
Vp=ω × r1
ap=αx r1+ω×(ω×r1)

其為向量式,內積的結果Vp會垂直r1,然而ap分成兩部分,第一項為切線加速度,故垂直於r1,第二項由向量外積的結果,恰延r1指向o點,量值為ω^2×r1

計算Q點的速度與加速度,較為麻煩,必須考慮pq的相對關係
Vq=Vp+ω2× rq/p
aq= ap+α2x rq/p+ω2× (ω2 × rq/p)

我們必須求出相對於P點的角速度及角加速度,才可求出Vq及Aq,其分析等同於前述單單op一桿且o點有速度及加速度的分析。故我們求出q相對於p的速度(即ω2× rq/p)及加速度(即α2x rq/p+ω2× (ω2 × rq/p) )後,應再加上p點的速度及加速度才為所求。 (ω2應可用前述瞬心的求法得到Vq再帶回本式求ω2)



設有一運動之曲柄滑塊連桿組合,設滑塊之偏置量為零,且在水平方向移動,
試以此機構之曲桿長度及角度,以及連結桿之長度為輸入項,
利用matlab寫出一程式計算在不同曲柄角度時,六點瞬心之對應位置。
可順便探討六點瞬心與曲柄角間之關係。

本題以drawslidlinks做更改為程式function [values]=drawsldIC(r,th1,th2,sigma,driver)
(僅加入IC部分,原連桿曲趕不做更動,故在此指標住IC部分的註解,並將程式碼更動部分套咖啡色)

程式碼如下:

function [values]=drawsldIC(r,th1,th2,sigma,driver)
%function drawlinks(r,th1,th2,sigma,driver)
%draw the positions of four-bar links
%call f4bar funcion
%r: row vector for four links
%th1: frame angle
%th2: crank angle or couple angle
%sigma: assembly mode
%driver: 0 for crank, 1 for coupler
%
% Example:
% drawsldlinks([1 2 3 4],0,60,1,0)
%clf;
[values b]=sldlink(r,th1,th2,10,0,sigma,driver);
rr=values(:,1)
rr(3)=rr(3)+rr(2);
rx=real(rr);
rx(4)=0;
ry=imag(rr);
ry(4)=0;


if rx(1)>0
theta2=th2;
else
theta2=180-th2;
end;
theta3=-values(3,2);

%瞬心IC13由課本5-22可看出IC13 IC12 IC34組成一三角形
%所以IC13的x座標即為IC34
%y座標則可由值角三角形取底邊*tan(theta2)可得
IC13x=rx(1);
IC13y=rx(1)*tand(theta2);



%瞬心IC24由課本5-22可看出IC13 IC12 IC34組成另一三角形
%所以IC24的x座標即為IC12=0
%y座標則可由值角三角形取底邊*tan(theta3)可得
IC24x=0;
IC24y=rx(1)*tand(theta3);


if b==1 plot([0 rx(1)],[0 0],'k-','LineWidth',4);
%ground line
hold on;
plot([0 rx(1)],[0 ry(1)],'g-','LineWidth',1.5);


if driver==0
plot([0 rx(2)],[0 ry(2)],'b-','LineWidth',1.5);
plot([rx(2) rx(3)],[ry(2) ry(3)],'r-','LineWidth',2);
else
plot([0 rx(2)],[0 ry(2)],'r-','LineWidth',2);
plot([rx(2) rx(3)],[ry(2) ry(3)],'b-','LineWidth',1.5);
end

%原程式碼部分不動,但另外整理標出瞬心的部分

%標出IC13
plot(IC13x,IC13y,'ms');
text(IC13x+1,IC13y,'IC13');

%此部分是在畫出與IC13相關的直角三角形軌跡
plot([rx(1) IC13x],[ry(1) IC13y],'c:','LineWidth',1.5);
plot([rx(2) IC13x],[ry(2) IC13y],'c:','LineWidth',1.5);


%標出IC24
plot(IC24x,IC24y,'ms');
text(IC24x+1,IC24y,'IC24');

%此部分是在畫出與IC24相關的直角三角形軌跡
plot([0 IC24x],[0 IC24y],'c:','LineWidth',1.5);
plot([rx(2) IC24x],[ry(2) IC24y],'c:','LineWidth',1.5);



plot([rx(1) rx(3)],[ry(1) ry(3)],'k-');
plot(rx,ry,'bo');


%IC12與o重合 在此加註
text(0,0,' O IC12');
text(rx(1),ry(1),' R');

%IC23與p重合 IC34與P重合 在此加註
text(rx(2),ry(2),' P IC23');
text(rx(3),ry(3),' Q IC34');
length=max(abs(values(2:3,1)));
len=.20*length;ww=.15*length;
[coords] = sldbox(len,ww,rx(3),ry(3),th1);
plot(coords(:,1),coords(:,2),'r-','LineWidth',2);
[coords] = sldbox(len*3,0,rx(3),ry(3)-ww/2,th1);
plot(coords(:,1),coords(:,2),'r:','LineWidth',1.5);
else
fprintf('Combination of links fails at degrees %6.1f\n',th2);
end
axis equal
axis ([-100 100 -100 100])

grid on

我們以drawslidIC做動畫,已觀察IC的位置
呼叫為:
for i=0:10:360
drawsldIC([0 33 38 0],0,i,1,0)
pause(0.1)
clf
end;
動畫如下:


[分析]
首先,滑塊機構中IC 12、23、34、14為四個基本瞬心,然而本機構中IC14在無限遠處,所以我不標出。

又瞬心IC12固定在O點,恆不動

瞬心IC24及13隨PQ點改變
我們可以觀察驅動桿的角度的改變造成IC24及13的改變
0<theta2<90:
IC24及IC13在OR上方
90<theta2<180:
IC24及IC13分別位於OR兩側(IC24在OR上方,IC13在OR下方)
180<theta2<270:
IC24及IC13分別位於OR兩側(IC24在OR下方,IC13在OR上方)
270<theta2<360:
IC24及IC13在OR下方

2007年5月15日 星期二

HW9

B94611023 生機二 許惠善


我本週(5/3)有來上課。
詳細作業請參考我的部落格



本次作業我以課本的程式為基礎來作為分析。自己再寫了一支程式draw_slider,用來讓使用者將RLe三值輸入,程式就會自動跑其極限位置的動畫。

運用到的課本程式是slider_limit()以及slider_solve(),基本上對於slider_limit()這支程式碼並無做異動,所以我只放在作業最後供各位同學參考,可以試著在自己電腦跑跑看。

然而slider_solve我對其做了少許變更,可以由原本的程式看出,利用基本的三角關係,我們求出了滑塊所可移動的距離,然而以A點為座標原點的話,這個滑塊的移動距離其實就是其在座標平面上的x值,故在此利用座標x,y值皆求出來,以做圖形。


程碼如下式如下:

(1)draw_slider()
function draw_slider(R,L,e)

%將輸入帶入slider_limit()中計算,先求出其極限位置
%藉此我們就可以做出滑塊的運動動畫
[s theta1 theta2]=slider_limit(R,L,e)

%theta值只能介於theta1 theta2之間,所以for迴圈的上下線是theta1,theta2

for theta=theta1:1:theta2

%所以用thetax角做出一迴圈
%讓theta介於由slider_limit()所求出的兩個極限角中間
%然而不寫在同個for迴圈內,是因為希望B的軌跡可以一直就在圖上

for thetax=theta1:1:theta2%畫出驅動桿B點可走的軌跡

plot(R.*cosd(thetax),R.*sind(thetax),'r-','LineWidth',2)
axis ([-2 70 -2 35]);
grid on;
hold on;
end
%開始化滑塊運動的動畫,利用做更改後的slider_solve()做動畫
[d,theta3]=slider_solve(theta,R,L,e)
pause(0.01);
clf
end

(2)slider_solve()

function [d,theta3]=slider_solve(theta2,R,L,e,mode)
if nargin<5 mode="0;" d2g="pi/180;" theta="theta2*d2g;" cc="(e-R.*sin(theta))./L;">=0
theta3=asin(cc);
else
theta3=asin(-cc)*pi;
end
%由課本p 4-37圖4-21可見A B C三點的三角關係
d=L.*cos(theta3)+R.*cos(theta);


% B就是以A點為圓心,轉動theta角
text(0,0,'A')
hold on;
Bx=R.*cos(theta)
By=R.*sin(theta)
text(Bx,By,'B');
hold on;
plot([0 Bx],[0 By],'b-','LineWidth',2)
hold on;
plot(Bx,By,'ro');
hold on;

% C就是以B點為圓心,轉動theta3角
%但要記得我們一開始是以A點作為座標平面的原點
%所以別忘了把他加上Bx,By值做平移
%此處Cx其實就等於d,但因d為老師原有的程式,表示滑塊的水平距離,在此不做刪除

Cx=Bx+L.*cos(theta3)
Cy=By+L.*sin(theta3)
text(Cx,Cy,'C');
plot([Bx Cx],[By Cy],'k-','LineWidth',2)
hold on;
plot(Cx,Cy,'ro')
hold on;

%最後將theta3換回degree
theta3=theta3/d2g;


呼叫執行:

%R=10+23=33
%L=R+5=38
%e=10

draw_slider(33,38,10)
影片如下:


[附一]slider_limit()
function [s,theta21,theta22]=slider_limit(R,L,e)
d2g=pi/180;
th1=asin(e./(R+L));
th2=asin(e./abs(R-L));
s=(R+L).*cos(th1)-abs(R-L).*cos(th2);
theta21=th1/d2g;
theta22=th2/d2g;

2007年5月5日 星期六

HW8


問題一:設桿2角度theta2=45度時,求各點之位置、速度與加速度為何?

本題利用f4bar函數執行即可

呼叫為:f4bar([4 3 3 5],0,45,10,0,-1,0)

桿長分別為[4 3 3 5]
由於第一桿是水平桿,所以theta1=0
第二桿由題目限定為theta2=45
角速度為td2=10(rad/s)
角加速度為tdd2=0
因為為閉合型,所以mode組合模數=-1
由第二桿驅動,所以linkdive選擇0


以下為matlab執行過程:

>> [val,form]=f4bar([3 2 4 2],0,60,10,0,-1,0)

val =

1.0e+002 *

Columns 1 through 4

0.0300 0 0 0
0.0100 + 0.0173i 0.6000 0.1000 0
0.0387 - 0.0102i -0.1475 0.0541 -1.2758
0.0187 + 0.0071i 0.2091 0.1655 -2.3627

Columns 5 through 6

0.1000 + 0.1732i 0.0100 + 0.0173i
0.3092 + 0.1181i 0.0487 + 0.0071i
-1.0000 - 1.7321i 0
-3.4302 - 6.3693i 0

%form = 1表示可以構成四連桿。
form =

1
%跑出來的答案仍然為複數形式,所以利用abs去求各項的值

%第一項為各桿向量值
>> abs(val(:,1))

ans =

4
3
3
5

%第二項為各桿之角度
%第二桿符合題目所要求的45度
>> abs(val(:,2))

ans =

0
45.0000
69.4856
99.5246

%第三項為各桿之角速度
%第二桿符合題目所要求的10 rad/s
>> abs(val(:,3))

ans =

0
10.0000
16.2681
4.9677

%各桿之角加速度
>> abs(val(:,4))

ans =

0
0
491.4428
383.6120

>> abs(val(:,5))

ans =


0.0300 %此為Q點的線速度
0.0248 %此為P點的線速度
0.3000 %此為Q點的線加速度
1.9220 %此為P點的線加速度




問題二:繪出此四連桿之相關位置及標明各點之速度方向及大小(以程式為之)。

本題利用drawlinks程式執行即可

呼叫為
>> drawlinks([4 3 3 5],0,45,-1,0)
桿長分別為[4 3 3 5]
由於第一桿是水平桿,所以th1=0
第二桿由題目限定為th2=45
因為為閉合型,所以mode組合模數=-1
由第二桿驅動,所以linkdive選擇0


唯需更改原drawlinks程式碼,將題目所要求的速度及加速度標明上去
其中V及a由上題所求代入

程式碼如下:

%取Vp的實部做v方向的x座標(對原點)
Ap=real(values(1,5))
%取Vp的虛部做v方向的y座標(對原點)
Bp=image(values(1,5))

%取Vq的實部做v方向的x座標(對原點)
Aq=real(values(2,5))
%取Vq的虛部做v方向的y座標(對原點)
Bq=image(values(2,5))

%因為此向量太常,所以稍微做修正除以三百,圖形才會清楚
%並且必須平移至P點及Q點
Ap=Ap/300+rx(2)
Bp=Bp/300+ry(2)
Aq=Aq/300+rx(3)
Bq=Bq/300+ry(3)

%標出速度的方向,並加註其速度以及加速度
plot(Ap,Bp,'o')
text(Ap,Bp,' Vp=0.0248 ap=1.9220 ');
plot([rx(2) Ap],[ry(2) Bp]);
plot(Aq,Bq,'o')
text(Aq,Bq,' Vq=0.0300 aq=0.3000 ');
plot([rx(3) Aq],[ry(3) Bq]);
圖片如下:


問題三:當桿2迴轉時,求出此組四連桿之限制角度,並繪出其位置(以程式為之)。
∵4+3≦3+5,4-3≦3-5。

∴無法做完整迴轉,必定有限制
其中 θmin=cos-1{[r12+r22-(r3-r4)2]/[2r1r2]}=28.9550
θmax=2π-cos-1{[r12+r22-(r3-r4)2]/[2r1r2]}=331.0450
呼叫 drawlimits([4 3 3 5],0,-1,0)

得圖如下:




問題四:設theta2=[0:20:360],試繪出此組四連桿之重疊影像,解釋為何有些沒有值。

程式碼如下:
>>for i=0:20:360
drawlinks([4 3 3 5],0,i,-1,0)
hold on

end

圖如下:

其中沒有值的部份可由第三題看出,其以到達極限點後就無法再繼續旋轉,若把這張圖以第五題的動畫方式來觀察,更為明顯。


問題五:若將問題三考慮在內,只在可迴轉的範圍內迴轉,請問你能讓此組四連桿作成動畫方式迴轉嗎?

利用講義中 move_4path2,body,draw4links,f4limits函數即可完成

呼叫方式如下:

move_4paths([4 3 3 5],0,0,3,0,10,0,1,0,4,150)
%r取[4 3 3 5]
%本題中r6 th6皆等於0
%nlink取3
%th1由題意為0
%td2=10
%tdd2=0
%總共做四次運動
%分割成150個片段

影片如下:



2007年4月28日 星期六

如何在自己的文章放上動畫

因為在逛大家的blog時有發現滿多人影片是用連結的,而不是直接在文章上放動畫,所以我簡短的用三張圖跟大家說一下怎麼放上來,希望對大家有幫助囉!!

1.先把影片放到youtube上,然後在圖片中Embed那行把他通通複製下來


2.接著編輯你的blog,記得切換到修改Html模式,然後把你剛剛複製的東西原封不動的貼上來
3.你就可以在你的部落格上看到你放的動畫囉!!