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.你就可以在你的部落格上看到你放的動畫囉!!

TEST

本篇是為了講解如何放置動畫到blog上,非作業,不要對他打分數阿XPXP

2007年4月25日 星期三

HW7



B94611023許惠善
本人(4/19)有上課

本次作業其實可以利用一個簡短的程式同時完成,所以我只做了一個程式。將三小題的答案同時呈現在同一張圖表中。紅色為各桿之加速度,藍色為速度,綠色為合速度。

另外也可將這隻程式碼做動畫以及圖片的切換。 將12行clf以及23行pause刪掉就變成圖片(最下方依序為起始點到五秒過後的對應圖片)。


以下為程式碼:

%輸入a長度,我的學號為b94611023,故取a=3(最末碼)+10
a=3+10;

%輸入長度,角度,角速度,角加速度之初始值
rho=[a, a+5, a-5];
theta=[0, 0, 0];
td=[0.2, 0.5, 0 .3];
tdd=[0, 0.1, 0.2];

%本圖形的角度以及角速度會受角加速度影響,亦即受時間改變
for t=0:1:5
clf;
for i=1:1:3
%在此我們必須先做角度的改變,才能作角速度的改變
%因為角度的公式是theta2=theta1+v1t+ωt^2,所以我們要用角度在前一秒的值以和速度前一秒的值來做
%又t間隔都為一秒,所以在此t不代1進去計算
theta(i)=theta(i)+td(i)+0.5*tdd(i);
%角度則為td2=td1+ωt,為前一秒的角度加上角加速度*t,所以同樣t間隔1
td(i)=td(i)+tdd(i);
end;
%繪圖
dyad_draw([a, a+5, a-5],[theta(1),theta(2),theta(3)],[td(1),td(2),td(3)],[tdd(1),tdd(2),tdd(3)])
pause(2);

end;
axis equal;






















HW6

6-1

(1)此例中,總桿數N=10如圖所示
(2)ABCD為三桿共結。
3-1=2故為兩結
總結數為J=13
(3)
第2桿自由度為2
第8桿和第4桿自由度為2
F結處,對第7桿言之自由度為2
∴Σf=9×1+4×2=17
(4)帶入公式
M=3(10-13-1)+Σf=5


滑槽:造成E處的自由度是2,可旋轉並可延滑槽方向移動
第2桿處的滑塊:造成自由度為2,可旋轉並可延x方向移動
F處滑塊:造成自由度為2,可旋轉並可延滑塊方向移動

以古魯伯算之,
df=gruebler(10,[9 0 4])
如課本表3.1,我將滑塊結及槽梢結帶入複式結做運算
df=5;

6-2
(1)此例中,總桿數N=7如圖所示
(2)A處為三連桿同結,所以J=5+(3-1)=7
(3)
三球結,三旋轉結,2自由度為2(可看成圓筒結)
Σf=3×3+3×1+2=14
(4)帶入公式
M=6(7-7-1)+Σf=8
故機構可動

[驗證]
以gruebler函數算之,
df=gruebler(7,[3 0 0 3 1])
df=8;

其中第2,3,5,6桿可以自轉,所以惰性自由度為4
所以整體自由度為8-4=4。


6-3
g為最長桿
s為最短桿
p,q為中間長度之桿

第一組

g=7
s=4
p+q=6+5

→ s+g=p+q=11
→ 為葛拉索變點機構
→ 因為有死點位置(當所有桿重合至一直線),其機構要往前或後退為未知。

驗證:
ans=grashof(1,[7 4 6 5])
ans =
Neutral Linkage


第二組

g=8
s=3.6
p+q=5.1+4.1

→ 11.6=s+g>p+q=9.2
→ 為非葛拉索機構
→ 此機構為搖桿機構,無法產生完整的迴轉運動

驗證:
ans=grashof(1,[8 3.6 5.1 4.1])
ans =
Non-Grashof Linkage

第三組

g=6.6
s=3.1
p+q=5.4+4.7

→ 9.7=s+g<p+q=10.1
→ 為葛拉索機構
→ 基桿為s之鄰桿,此連桿屬於曲柄搖桿型。若較短的側桿旋轉時,另一側桿擺動。

驗證:
ans=grashof(1,[5.4 3.1 6.6 4.7]
ans =
Crank-Rocker Linkage

2007年4月10日 星期二

HW5



ANS 5-1:
5-1-1,5-1-2:
body function的程式碼如下:(包含了手臂跟手掌的座標矩陣在裡面了)

%宣告函數
function body(L1,L2,L3,theta1,theta2,theta3)
%L1=10;
a=2*L1-1;
%宣告手臂的座標矩陣為兩倍手臂長的組數
arm1=zeros(a,2);
%開始輸入手臂的座標
for y1=1:1:a
%當手臂右半部y值<L1值時,對應的x為((1+4*y1).^0.5)/3-0.3;
if(y1<L1-1)
arm1(y1,2)=y1;
arm1(y1,1)=((1+4*y1).^0.5)/3-0.3;
end
%但第一組座標仍須固定在原點
if(y1==1)
arm1(y1,2)=0;
arm1(y1,1)=0;
end
%此項為修正圖形用最靠近手臂的點要做些許修正圖形較好看
if(y1==L1-1)
arm1(y1,2)=L1-0.2;
arm1(y1,1)=arm1(y1-1,1)-0.2;
end
%當Y為L長時,手臂寬度=0
if(y1==L1)
arm1(y1,2)=y1;
arm1(y1,1)=0;
end
%左半部和右半部對稱,圖形只有x差一個負號
if(y1>L1)
%圖形第二項也要做修正
arm1(2,2)=0.5;
arm1(2,1)=arm1(3,1)-0.1;
arm1(y1,2)=arm1(a-y1+1,2);
arm1(y1,1)=-arm1(a-y1+1,1);
end
%最後圖形要回到原點
if(y1==a)
arm1(y1,2)=0;
arm1(y1,1)=0;
end
end
%對手臂做旋轉
%因為一開始不小心畫了垂直的手臂,所以只好修改一下我的轉動公式的角度,
%並且得先將手臂的上端點先下移到原點做旋轉再移回原來高度
for y1=1:1:a
Arm1(y1,1)=arm1(y1,1)*cosd(theta1-90)+(arm1(y1,2)-L1)*sind(theta1-90);
Arm1(y1,2)=-arm1(y1,1)*sind(theta1-90)+(arm1(y1,2)-L1)*cosd(theta1-90)+L1;

end;

b=2*L2-1;
%宣告手臂的座標矩陣為兩倍手臂長的組數
arm2=zeros(b,2);
%開始輸入手臂的座標
for x2=1:1:b
%當手臂上半部x值<L2值時,對應的y為((1+4*x2).^0.5)/3-0.3;
if(x2<L2-1)
arm2(x2,1)=x2;
arm2(x2,2)=((1+4*x2).^0.5)/5-0.3;
end
%但第一組座標仍須固定在原點
if(x2==1)
arm2(x2,1)=0;
arm2(x2,2)=0;
end
%此項為修正圖形用最靠近手臂的點要做些許修正圖形較好看
if(x2==L2-1)
arm2(x2,1)=L2-0.2;
arm2(x2,2)=arm2(x2-1,2)-0.2;
end
%當Y為L長時,手臂寬度=0
if(x2==L2)
arm2(x2,1)=x2;
arm2(x2,2)=0;
end
%左半部和右半部對稱,圖形只有x差一個負號
if(x2>L2)
%圖形第二項也要做修正
arm2(2,2)=arm2(3,2)-0.1;
arm2(2,1)=0.5;
arm2(x2,1)=arm2(b-x2+1,1);
arm2(x2,2)=-arm2(b-x2+1,2);
end
%最後圖形要回到原點
if(x2==b)
arm2(x2,1)=0;
arm2(x2,2)=0;
end
end

% 計算後去修正我的theta2

theta2=180-theta2+theta1;

%一開始就將下手臂畫在原點x方向
%所以先做旋轉後再把他和上手臂接在一起就可以了
for x2=1:1:b
Arm2(x2,1)=(arm2(x2,1))*cosd(theta2)+(arm2(x2,2))*sind(theta2)+Arm1(1,1);
Arm2(x2,2)=-(arm2(x2,1))*sind(theta2)+(arm2(x2,2))*cosd(theta2)+Arm1(1,2);
end;


%手掌的畫法基本上是幾乎依照各點的座標作輸入
%只有盡量去簡化圖形做成對稱的手
%才能縮短程式(但也就和事實不符和)
palm=zeros(25,2);
for i=1:1:21
palm(i,2)=2.5-0.25*(i-1);
palm(i,1)=L3./2;
end
palm(3,1)=palm(3,1)+L3/2-2;
palm(19,1)=palm(3,1);
palm(2,1)=palm(3,1)-0.3;
palm(4,1)=palm(2,1);
palm(18,1)=palm(2,1);
palm(20,1)=palm(2,1);

palm(5,1)=palm(5,1)+1;
palm(17,1)=palm(5,1);

palm(7,1)=palm(7,1)+L3./2-1;
palm(15,1)=palm(7,1);
palm(6,1)=palm(7,1)-0.3;
palm(8,1)=palm(6,1);
palm(16,1)=palm(6,1);
palm(14,1)=palm(6,1);

palm(9,1)=palm(9,1)+2;
palm(13,1)=palm(9,1);

palm(11,1)=palm(10,1)+L3./2;
palm(10,1)=palm(11,1)-0.3;
palm(12,1)=palm(10,1);

for i=22:1:24
palm(i,1)=0;
end
palm(22,2)=-1.5;
palm(24,2)=1.5;

palm(25,1)=palm(1,1);
palm(25,2)=palm(1,2);

%修正theta3以符合題目所求
theta3=theta2-theta3-180;
%一開始就將手掌畫在原點x方向
%所以先做旋轉後再把他和下手臂接在一起就可以了
for i=1:1:25;
Palm(i,1)=(palm(i,1))*cosd(theta3)+(palm(i,2))*sind(theta3)+Arm2(L2,1);
Palm(i,2)=-(palm(i,1))*sind(theta3)+(palm(i,2))*cosd(theta3)+Arm2(L2,2);
end
axis equal;
grid on;

%各部位以一筆畫完成連線
%所以要記得終點和起點為同一點
line(Arm1(:,1),Arm1(:,2));
line(Arm2(:,1),Arm2(:,2));
line(Palm(:,1),Palm(:,2));


5-1-3
圖形如下:


5-1-4

手臂的運動和手指的運動不一樣,手指的運動會受其他兩指的角度改變而被迫改變(尤其是最尖端的指節),然而手臂和手腕可以各自改變其極限的角度。本題要求變動區間分為十等分,在此我將每個theta都分做十份來改變。
然而第二題的手指因為角度會互相遷至,所以整個動畫只分做十等分。

程式碼如下:
axis equal;
for theta1=-90:(15/9):-75
for theta2=-45:(15/9):-35
for theta3=-30:20/9:-10
clf;
body(34,26,16,theta1,theta2,theta3);

pause(0.0000001);

end
end
end
ANS 5-2:

5-2-1

原題目所要分析為手掌指頭在同一「平面」上的運動狀況,所以在此試以古魯伯公式(3-3)作分析。


古魯伯公式如下:


顯而易見的

N=4
J=3

考慮f時,原來旋轉結:連結度=1 球對:連結度=3。但因為在同一平面上,所以事實上手指的球隊部分,也只能具有旋轉結的功用,所以我們可以化簡古魯伯公式如下

m=3(N-J-1)+J=3(N-1)-2J

再將N,J帶入公式,可得自由度為m=3

事實上,手指運動時,角度有所限制,所以在我的分析中,我沒有討論到手指運動的角度,事實上每個指節間的角度都有限制,以我個人來說,θ1的極限90度,θ2最多大約110度,θ3也大約只能90度。

5-2-2




此題我分做兩部份來做,先寫出一個函數FINGER,是可輸入手掌長度和角度,以後要畫出FINGER就很方便,在寫第二支程式,去跑題目所要求的繪出四根指頭(大姆指除外)所可能展示的極限位置。

(1)FINGER的部分

%宣告一函數讓使用者可以輸入手掌和三指節的角度
function FINGER(L,theta1,theta2,theta3)

%畫出代表手掌心的連桿(不含手指的部分約為整個手掌長的1/2)
linkshape([0 0],[-L/2,0],1.4);

%手指分做三節,每節約為1/6的手掌長,再做修正,使三節加起來等於1/2手掌
l=L/6;
l3=l-0.7;
l2=l-0.5,
l1=l+1.2;

%旋轉時θ2會包含一個θ1先旋轉過的部分,θ3也會包含住θ2
theta2=theta1+theta2;
theta3=theta2+theta3;

%先將三連桿都畫在原點上去做旋轉,所以y值都等於0
%事實上我們的轉動方程式+號後面的部分都不需要寫
%也因為畫在原點上,所以我們先考慮每連桿的終點
%但終點最後要平移,距離就是上一根連桿的終點離原點的距離
X02=l1*cosd(theta1)+0*sind(theta1)
Y02=-l1*sind(theta1)+0*cosd(theta1)

X12=l2*cosd(theta2)+0*sind(theta2)+X02;
Y12=-l2*sind(theta2)+0*cosd(theta2)+Y02;

X22=l3*cosd(theta3)+0*sind(theta3)+X12;
Y22=-l3*sind(theta3)+0*cosd(theta3)+Y12;

%最後畫連桿的時候,除了第一桿的起點一直固定在(0 0)
%其他連桿的始點都在上一桿的終點
linkshape([0 0],[X02,Y02],1.4)
linkshape([X02,Y02],[X12,Y12],1.4)
linkshape([X12,Y12],[X22,Y22],1.4)

(2)跑題目要求的程式
%theta1,2,3都先等於0
theta3=0;
theta2=0;

%每次都要畫面暫停後再清除畫面,使畫面變成動畫
%手指每指節的運動會互相遷至,且各有極限
for theta1=0:10:90
clf;
theta2=theta2+80/8;
%可以觀察到theta3在theta2大概等於30度左右的時候就幾乎到了極限
if theta1<30
theta3=theta3+70/3;
end;

axis ([-10 10 -5 5]);
%丟入FINGER函數畫圖
FINGER(16,theta1,theta2,theta3);

pause(1);
end

5-2-3

首先利用dyad這隻函數做變化,去改變他的輸出和輸入,即可做觀察。
(1) 將dyad程式碼中dyadata=[pp vv aa]部分,程式碼此處原為虛數的pp,vv,aa加上abs(),化為dyadata=[abs(pp) abs(vv) abs(aa)],則可將虛數化為實數。
(2) vect最後不用跑出來,所以程式最後加上「;」,而dyadata要跑出來,所以不加「;」。
function [vec,dyadata] = dyad(rho,theta,td,tdd)

theta=theta(:);rho=rho(:);
n=length(rho);
if nargin<4
tdd=zeros(size(rho));
if nargin==2
td=ones(size(rho));
end
end
if length(td)==1
td=ones(size(rho))*td;
end
if length(tdd)==1
tdd=ones(size(rho))*tdd;
end
td=td(:);
tdd=tdd(:);

d2g=pi/180;
tt=exp(i*theta*d2g);
pp=rho.*tt;
vv=i*td.*pp;
aa=-pp.*td.^2+i*pp.*tdd;
%將程式碼此處原為虛數的pp,vv,aa加上abs()
%則可將虛數化為實數
dyadata=[abs(pp) abs(vv) abs(aa)]
vect=[abs(sum(dyadata));angle(sum(dyadata))/d2g];

再來利用5-2-2的第二個程式稍做修改,就再來利用上提的第二個程式稍做修改,就可以利用上提的手指變化方式丟入dyad,輸出我們想看的位置,速度,和加速度的部分。

程式碼如下:
%theta部分如上題所陳述的做改變
theta3=0;
theta2=0;
td=0;
for theta1=0:10:90
td=td+10;
theta2=theta2+80/8;
if theta1<30
theta3=theta3+70/3;
end;

%將連桿長,也就是手指三指節的長度作設定,theta是隨手指頭動作更改的值,丟入dyad函數,td我們初始值設為0再遞增
dyad([2.2 2 2],[theta1 theta2 theta3],[td td td])

end

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;

2007年3月19日 星期一

機動學HW3

Ans1:
y軸上的點為拳頭的軌跡,下方連續曲線為關節的軌跡,每個拳頭會對上一個關節的點,頭底在(0,0)的位置。

(1)程式碼

%L1=30手臂長;
%L2=25手肘長;
%H表示脖子到頭頂的高度=30,(但此處並沒有考慮到頭的寬度);

L1=30;
L2=25;
H=30;


%L也就是手整體伸長的高度;
%也就是假想拳頭的最高點;

L=L1+L2;
y=H:5:L;
x=0;
plot(x,y,'o');

%至此我們先假想了拳頭的移動;
%y由H一直移動到L;

%圖片使用hold on可以把圖形都合在一張圖上;
hold on;

%利用餘弦定律,求出頭與手肘的夾角餘弦值;
c=(y.^2+L2.^2-L1.^2)./(2.*L2*y);

%因為頭與手肘的夾角取正弦*L2就是x 座標;
%所以先做餘弦反函數再取正弦乘上L2;
%y座標則是直接乘上餘弦值;

x=L2.*sin(acos(c));
y=L2.*c;

%畫出圖形
plot(x,y,'o');
hold on;
plot(x,y);

grid on;

(2)移動的範圍
L1+L2=L為最高點
H則是最低點
(3)
假設1:
頭到手肘的底部是忽略其距離的,也就是頭是一條直線,具有高度不具寬度,亦即手完全向上伸展時,整隻手包含手肘手臂及拳頭,可以和頭頂中心上方的延長線重合。

假設2:
忽略拳頭的大小不計,視為在手臂底端的質點。

假設3:
脖子底端到手臂的高度(也就是肩膀斜度所造成的高度)忽略。

基於這三個假設可以想成移動的軌跡是(拳頭高度+頭高)、手臂、手肘三者圍成一個三角形,而拳頭到最高點的時(手肘+手臂)與(拳頭高度+頭高)兩線重合。然而我們知道這三個假設與現實不合。

[假設1]的部分會造成實際值<我們所求的數據
[假設2]則造成實際值>我們所求的數據
[假設3]的部分會造成實際值<我們所求的數據。

所以可知道這個圖形僅供粗略的參考,如果想要知道實際值則要實際頭部的寬度要限制住手可以移動的軌跡,也要去考慮手的質心位置和高度,最後需要考慮的就是脖子底端和手底端真的高度差。

Ans2:日常生活應用的器材中,請舉例(圖示或照片)說明下列之分類:

(1)旋轉對
EX:門片鉸練

Def:
a.兩剛體軸同線:
說明:上下兩片門片鉸練,當兩片套在一起時,中心軸會重合。如圖所示。
b.僅有一個共同軸可供旋轉:
說明:兩門片鉸練重合後,繞中心軸旋轉。ROF=1,如圖所示


門片鉸練一片固定在門上,一片固定在門框上,其相對旋轉運動帶動了門繞著門片鉸練的中心軸旋轉而可自由開關。 以下是門從大角度關到小角度的圖片。

(2)高對與低對運動結 :

a.高對:
EX:
突輪滾動及滑動:衣櫃抽屜

左圖是衣櫃的抽屜,上有滾輪,右圖是衣櫃裡的軌道,滾輪順著軌道由左向右移動。和課本上2.16左上角圖輪滾動及滑動之形式相同。

下方圖片為兩個和起來工作的圖片。

b.低對
C型對:小掛勾

<1>外部掛勾和中心粉紅色杆子兩軸重合在中心粉紅色杆子中心線

<2>第一圖的掛勾經過向左移,以及向上旋轉後形成第二圖的狀況。(即為一軸向平移,一垂直軸之旋轉運動)

<3>DOF=2,拘束度=4

(3)外型式閉合結或外力閉合結

a.外型式閉合結:門栓
門栓原為C型對,但門栓的限制在其外框,如圖中黃線所表示之,所以其平移的距離分別是兩圖的左右極限,而旋轉的角度限制則為向上90度。












b.外力閉合結:懸掛重物的掛勾

如圖所示,掛勾設計就是為的懸掛東西,當東西掛上後,因物體的重量,造成一向下拉的外力,所以掛勾就無法再做旋轉的動作。


Ans 3:(1程式碼及圖片)

%宣告θ from:0~360;
theta=0:1:360;

%宣告圓的半徑
r=80;
%宣告頭的半徑
rh=(r-r*cosd(60))./2

%我假設腳為半徑,腳的開叉處為圓心
%手伸展成水平,緊接在頭下方,忽略脖子
%手與腳開叉處的連線和腳開叉處與頭底的連線角度為60
%腳開叉處與腳的連線和腳開叉處與頭底的連線角度為45
%在此標出腳和手以及腳開叉處,圓心,頭圓心的未旋轉時x,y座標
Xp=[r*sind(60),-r*sind(60),-r*sind(45),r*sind(45),0,0,0];
Yp=[r*cosd(60),r*cosd(60),-r*cosd(45),-r*cosd(45),r*cosd(60),0,(r+r*cosd(60))./2]
%將這些座標值設在for外,以利我先旋轉在平移時不會變成新的座標在旋轉
%由0到360度每隔30度做一次旋轉
for times=0:30:360
%畫出人形以及頭形和大圓
line([xp(1),xp(2)],[yp(1),yp(2)],'color','red');
line([xp(5),xp(6)],[yp(5),yp(6)],'color','yellow');
line([xp(6),xp(3)],[yp(6),yp(3)],'color','black');
line([xp(6),xp(4)],[yp(6),yp(4)]);hold on;


x=xp(6)+r*cosd(theta);
y=yp(6)+r*sind(theta);
plot(x,y);


hold on;

xh=xp(7)+rh*cosd(theta);
yh=yp(7)+rh*sind(theta);
plot(xh,yh)

hold on;
%x座標旋轉
xp=Xp*cosd(times)+Yp*sind(times)
%旋轉後在平移,路徑是rθ
xp=xp+(pi*r*times)./180
%y座標旋轉
yp=-Xp*sind(times)+Yp*cosd(times)
%跳出回圈
end;
axis equal;
(2)在我的程式碼中,宣告了r也就是大圓半徑,由我的圖形可見我的身高即為我的直徑,所以你可以輸入(身高/2)當作r。當然,其中我假設腳長即為半徑長,所以只要知道該人個腳長,即可輸入大圓的半徑r。
另外我先設定了腳以及手的角度,所以如果你要更改你的手臂或是腳張開的角度,也可以更改程式碼中的(
%在此標出腳和手以及腳開叉處,圓心,頭圓心的未旋轉時x,y座標
Xp=[r*sind(60),-r*sind(60),-r*sind(45),r*sind(45),0,0,0];
Yp=[r*cosd(60),r*cosd(60),-r*cosd(45),-r*cosd(45),r*cosd(60),0,(r+r*cosd(60))./2]
)部分,

若是改變手的角度,就改變其中60的部分的角度。(包含頭的圓心座標也可以更改了),改變腳的部分則把45的部分改成你預設的值。
當然,這個程式不是真正人體的狀況,所以我們只能粗略的做計算。

2007年3月13日 星期二

第二次作業

ANS1:

本題答案其實我有找到一個非常好的網站,騎內容十分十分的詳盡,有人體各部位的骨頭的介紹,其中包含了自由度、可以活動的角度等等都十分詳盡,詳盡到我不知道怎麼摘取片段再加上寫自己的註解,所以首先提供這個網站給大家參考,http://www.pt.ntu.edu.tw/hmchai/Kinesiology/Index.htm是台大醫學系骨科的網頁。

因為題目的要求是要自己寫說明,所以我再自己從另一本書上摘路圖片以及自己配合第二章的內容另外作答一次。

首先介紹樞紐關節








膝蓋部位就是屬於樞紐關節,可以像門一樣前後轉,但無法隨意移動。也就是機動學所謂的R型對,只有一個自由度







滑動關節,是兩個平盤疊起來,可以自由的上下左右移動,我們的腳踝就是這種關節。






接下來是重要的球臼關節



在我們的肩膀和臀部屬於此種關節,可以左右移動和旋轉,一端圓形的骨骼及一端臼形骨骼組合而成,為機動學上的球對自由度為3。








轉動關節可以做上下左右移動和轉動。
手腕的關節屬之。











鞍狀關節一端是碼鞍狀,和另一端骨骼扣在一起,可以左右移動,有兩個自由度,如下圖,像指頭底部的關節CMC的部分。









參考資料:
1.〈到人體旅行〉p106-p109,陳文君著,泛亞文化出版2005年二刷。
2.〈漢聲精選目擊者叢書5 骨架〉,溫淑真譯,民國85年五刷。
3.http://www.pt.ntu.edu.tw/hmchai/Kinesiology/Index.htm


ANS2:

首先,在討論這個題目前,我們應該要先瞭解何謂「創造」,何謂「發明」。
創造:指的是在各種不同的,正式或非正式的環境中,創建學習情境所涉及到的研究、理論和實踐。創造可以包括一系列活動,具體根據使用的設計方法而定。
發明:一種新事物或技術的首度出現。發明可以分為物件的發明及方法的發明;而物件的發明亦不限於有形的物件,無形的物件,如電腦程式、虛擬創作等亦包括在內。
兩者都是產生一有形或無形的事物,而創造涵蓋的是在學習情境中所「涉及」的,發明著重於「首度」,也就是前所未有的觀念或物品。

(圖檔自己寫的,但是我用不清楚)





















發明實例:
EX1:
生活情境中遇到不方便」法國畫家Daguerre﹙1787-1851﹚突引發一個為什麼不能想辦法把真實的情景留下來的念頭? → 「找尋相關器材」→「」→「找出所需設計的目標」想辦法把真實的情景留下來→「性能」把真實的情景留下→1826年發明了日光膠版→ 「機構分析,比較與選擇,修正」1839年發明了銀版照相
EX2:
生活情境中遇到不方便」只有不會動的平面照片→ 「找尋相關器材」→「」1885年美國的喬治.伊斯托馬﹙1854-1932﹚發明卷狀,放入捲筒內的感光膠片,→「找出所需設計的目標」欲把照片連接製成動畫→「性能」會連續播放的短片→愛迪遜於1891年發明了放映機→ 「機構分析,比較與選擇,修正」Lumiere兄弟倆的靈感,他們於1895年將愛迪遜放映機改良成投影裝置,發明了電影。

最後,我個人認為在發明與創造有一點必須牢記在心的,即是不可以為了利益而造假或是抄襲。2005年生命科學領域轟轟烈烈的「南韓黃禹錫 幹細胞研究造假」事件,黃禹錫為了個人名譽,以偽造11個胚胎幹細胞存在過的數據和照片,提供給「科學」期刊。使南韓學術界受重挫,也喪失個人在學術界的地位,桃莉羊的製造者,愛丁堡Roslin Institute 的Ian Wilmut教授甚至因為和黃禹錫合作過也被拖累騎學術地位。近期台灣也發生中興大學生化所教授張邦彥投稿到細胞(Cell)雜誌的論文,因博士班學生為了學位而造假,對台灣也是一大傷害。無論是創造與發明,尊重以及真實相信對科學都是最重要的!


參考資料:
奇摩知識http://tw.knowledge.yahoo.com/question/?qid=1405111613285
http://news.sina.com.tw/life/bcc/tw/2006-12-21/171812259321.shtml
http://www.3dollars.com.tw/MNews.asp?NID=993


ANS3:

>> M=23+10;
>> x=1:1:10;
>>y=x.^(1/M);
>> plot(x,y);xlabel('x'):ylabel('y');title('許惠善的y=f(x)圖')