2007年5月16日 星期三
第七章動畫程式已經改善
張貼者:
不留白老人
於
5/16/2007 06:05:00 下午
標籤: 老師的話
2007年4月30日 星期一
f4limits函數
這個函數實際上與drawlimit相同,只是它是將四個連桿先存在握把中,然後再設法將其中之座標改變,以達到圖形變動之效果。
Read more!
function h=f4limits(r,th1,sigma,driver)
%function f4lmits(r,th1,sigma,driver)
%draw the positions of four-bar links
%call f4bar funcion
%r: row vector for four links
%th1: frame angle
%sigma: assembly mode
%driver: 0 for crank, 1 for coupler
% Example:h=f4limits([4 2 3 4],0,1,0)
[Qstart, Qstop]=fb_angle_limits(r,th1,driver)
[values b]=f4bar(r,th1,Qstart,0,0,sigma,driver);
if b==1,
h=draw4link(values,driver);
else
fprintf('Combination of links fails at degrees %6.1f\n',Qstart);
end
[values b]=f4bar(r,th1,Qstop,0,0,sigma,driver);
if b==1,
h=draw4link(values,driver);
else
fprintf('Combination of links fails at degrees %6.1f\n',Qstart);
end
axis equal
grid on
張貼者:
不留白老人
於
4/30/2007 02:31:00 下午
標籤: 老師的話
2007年4月19日 星期四
Google的漢語拼音法
利用注意符號法雖然是台灣的專利,但這項專利走到最後可能只有台灣使用,國外很少會用注音符號,而對注音符號陌生的年老一輩,只要它會英文鍵盤,就可以使用漢語拚音,其學習成本將遠比注音符號低,而且更容易使用。有些人幾乎在三分鐘內就可學會打出他們所要的文字。這一套免費軟體將會使國內仍然以注音符號輸入法賺錢的公司失去利基,甚至它要比微軟提供的注音輸入法更好,我們且拭目以待。
有關注音符號與漢語拚音轉換規則網路上真是汗牛充棟,下面是一個部落格的參考資料:
漢語拼音與注音符號基本規則對照表 Read more!
張貼者:
不留白老人
於
4/19/2007 08:05:00 下午
標籤: 老師的話
2007年4月3日 星期二
第四次作業討論
有些同學繳交作業純屬急就章,所以作業內容常只有程式,未加說明,甚至連執行結果也付之闕如。上課時有同學要求僅繳交作業,不必考試,這當然可行。不過若有此認識,作業必須做的有模有樣,不要一味抄襲或變裝,對作業則不求甚解。這樣成績不但分不出高下,反而造就抄襲歪風。所以若要不考試,則每個人的作業要注重自己瞭解的程度,不會可以問人,直到自己完全體會,然後寫出自己的東西。不要僅憑一個程式作為答案就繳交出來,否則最終只是作業垃圾,沒有任何意義。下面有幾個重點大家請切記:
- 作業要自己作,不要拿別人抄襲或改裝,甚至央請別人替你上傳,這些都失去作業的本質,故請以考試的精神對待自己的作業,會的人可告訴他人怎麼做,而不是將自己的作業全部傳給別人,像張志鵬同學那樣(至少我在懷疑)。
- 寫出的程式自己必須完全瞭解其意義,並且加以說明及執行,所以程式的格調與寫法會因人而異,但不會像前面幾個作業產生千篇一律的情形,千萬不要提交未經執行過的程式。
- 寫出的程式要配合原來題目的旨意進行討論,或者改變參數,討論其結果變化,多討論為什麼及如何改以及可能的結果。
- 多用函數程式,少用script檔。前者可以利用輸入參數變換範圍也可以呼叫其他函數,也可以將其中呼叫的小函數放在主程式後面,共同執行,其彈性較大。
- 請多用自己的部落格發佈,多採用部落格之圖片上傳功能。上傳若採用其他軟體(如ACDSee),其他人觀看時還要下載該軟體,並不太適合,也浪費時間,請儘量不採用。有些同學仍然堅不使用部落格,不過在評分上會差很多的,可以自己酙酌。
茲以作業四第一題為例,解說如下:
考慮點:
- 設正三角形邊長為L,則其原始座標可利用[0 0;L 0;L/2 sqrt(3)*L/2;0 0]表示,剛如構成三角形的一線畫。其原圖使用 patch指令為之,得到的結果如下:

- 為使此三角形達到旋轉的目的必須利用座標旋轉的功能。由於必須循序以三個頂點為圓心旋轉。其公式如下:
x'=xcos(theta)+ysin(theta)+x0
y'=-xsin(theta)+ycos(theta)+y0
其中,(x,y)為原來之座標,(x'y')為經過迴轉theta角度後之座標;而(x0,y0)為迴轉的圓心,依序為三角形之三個頂點。然而為配合三角形每轉一圈後仍然回到原來位置,第一點為原點應無問題,第二點及第三點則其起點必須配合調整。迴轉點之座標可用apex表示,若配合其轉動時起點位置之不同,可使用switch case這個功能進行選擇,其值設為ss。
程式之內容如下:輸入參數為L與delt,分別為三角形之邊長與繪點之區隔角度。
function triangle_rot(L,delt)
% Inputs:
% L:length of the side of right triangle
% delt:interval angle for rotation, degrees
% Example: triangle_rot(10)
clf;
triangle=[0 0;L 0;L/2 sqrt(3)*L/2;0 0];%coordinates of triangle
apex=0;%index of origins
patch(triangle(:,1),triangle(:,2),'r');
h=line(triangle(:,1),triangle(:,2),'erasemode','xor');
axis equal;
axis([-L 2*L -L 2*L]);
ss=0;
while 1
apex=apex+1;
switch apex
case 1, ss=0;
case 2, ss=-120;
case 3, ss=120;
case 4, ss=0;apex=1;
end;%the origin of rotation
x0=triangle(apex,1);y0=triangle(apex,2);
for i=0:delt:360
s=ss+i;
ct=cosd(s);st=sind(s);
x=triangle(:,1)*ct+triangle(:,2)*st+x0;
y=-triangle(:,1)*st+triangle(:,2)*ct+y0;
set(h,'xdata',x,'ydata',y)
pause(0.01);
%drawnow
end
end
執行例:
>>triangle_rot(10,10)
(執行結果亦可利用動畫檔處理)

討論:
- 當增加的角度變化時會有如何的結果?如何使其成為函數之輸入參數?
- 當pause(t) 的時間改變時會有何種現象?
心得:
- 由此例中得到的心得如何?可以學到什麼指令?
- 有沒有可以改變撰寫的地方?如何做?
張貼者:
不留白老人
於
4/03/2007 08:42:00 上午
標籤: 老師的話
2007年3月26日 星期一
如何在自己的部落格加動畫
未來運動的型式會常常出現在機動學中,雖然利用Matlab執行時可以產生動畫,但若要將其置於部落格上則需要稍費週章。其中牽涉到幾個免費軟體的使用,其一是CamStudio。此程式置於http://www.camstudio.org/,下載後可以在螢幕中限制顯示區域,進行錄音存檔。
其次是到youtube.com網站中,自己設立帳號,將所得的檔案上載存在自己的帳號中。約過一刻鐘即可上載完畢。然後觀看無誤後,可將其embed之網址拷貝至自己的部落格中張貼(最好轉為Html模式)。經發佈後即可由部落格觀賞該動畫。
例如:一個迴轉的葉片
Read more!
張貼者:
不留白老人
於
3/26/2007 12:28:00 下午
2007年3月25日 星期日
如何在網頁上保留程式結構
在程式中,有些內容必須採用內縮的方式,方能顯示程式的結構。為維持原段落文字之結構,可以在html模式下將所要顯示的程式括在<pre>...</pre>之內即可。其型式如下:
<pre>
% fricfat.m
% Comparsion of friction factor derived from
% both Blasius & universal velocity distribution law
%
Re=[1000:500:25000,30000:5000:250000,300000:50000:650000];
fx=0.0791./Re.^0.25;
disp(' 雷諾數 Blasius Uni Vel %Diff');
for i=1:length(Re),
f2=fx(i)^2;ffx=f2+0.1;
while abs(f2-ffx)>0.0001
f2=ffx;
ffx=1/(4*log10((Re(i)*f2))-0.4);
end
f1=f2*f2;
fprintf(1,'%10.0f %10.6f %10.6f %10.2f\n',...
Re(i),fx(i),f1,(f1-fx(i))/fx(i)*100);
end
</pre>
值得注意的是:如果你是要將文字由word或其他文書處理拷貝至待發佈的視窗內時,應拷貝至"修改Html"之模式下較不會產生太多的控制碼。若拷貝至"撰寫"模式則會因為需要維持原來的格式而產生相當多重複的控制碼,有些可能多到令你心煩意燥,無從改起。同學不妨自行試試看其間之差異,並熟悉其用法。
其次大標題或次標題則可使用<h2...>...</h2...>之型式,例如:
<h1>第一標題</h1>
<h2>第二次標題</h2>
<h3>第三小標題</h3>
<h4>第四細標題</h4>
Read more!
張貼者:
不留白老人
於
3/25/2007 09:49:00 下午
標籤: 老師的話
2007年3月24日 星期六
賣藝者的迴圈
本來想賣藝者的轉輪應該是較為簡單的應用,有些同學是做出來了,但以乎不知其所以然。所以在討論當中著墨甚少。要寫此程式,必須考慮一筆畫的畫法,尤其高度要與輪圈的直徑有關,有時必須有一個大假設:就是當人體張開成大字形時,其身高應略等於其所張開的四肢範圍。有些人找到達文西的人體畫,是很好的資料。
要寫這個程式,有幾個問題必須分別解決。其一是輪圈滾動的問題。就動力學而言,若一圓滾動,其轉動經過之弧長應等於圓心在地面行走的距離。這一個可利用下式計算:
行進的距離=回轉的弧長=半徑X迴轉的角度(弧度)
其次要解決的是座標轉動與移動的問題,其公式可依據講義之第一章座標之迴轉:
x'= xcosθ+ysinθ
y'=-xsinθ+ycosθ
因此,圓圈之滾動前進可視為在原地轉動到適當角度後再將整個圓的座標平移至適當地方。亦即在X方面增加特定距離,但Y軸座標則維持不變。
如何繪出人及輪圈的座標這就要利用一筆畫的功夫,兩個座標可分開。人的座標可依人的簡單尺寸標出連續點之座標位置。輪圈則可依 R*cos(t); R*sin(t)的方式求得,但記得轉成行向量。人體座標在程式中以man稱之;圓圈則以circ稱之。

這是人體與迴圈的簡化一筆畫法
其程式內容如下,同學可參考:
function acrobat(height)
% height:height of man.cm
clf;
R=height/2;
r=R*sind(45);r3=r/2.5;r2=r/4.5;r4=r/1.5;r5=r/7;r1=r/6.5;
man=[0 0;0 r4;r5 r4;r5 r3;-r5 r3;-r5 r4;0 r4;0 r2;...
r5 r2;r r;r5 r1;r5 -r1;r,-r;r5 -r2;-r5 -r2;...
-r -r;-r5 -r1;-r5 r1;-r r;-r5 r2;0 r2;0 0];
t=linspace(0,2*pi,20)';
circ=[0 0;R*cos(t) R*sin(t);0 0];
for i=0:pi/3:2*pi
st=sin(i);ct=cos(i);
d=R*i;
mx=man(:,1)*ct+man(:,2)*st+d;
my=-man(:,1)*st+man(:,2)*ct;
line(mx,my,'color','r','linewidth',3)
cx=circ(:,1)*ct+circ(:,2)*st+d;
cy=-circ(:,1)*st+circ(:,2)*ct;
line(cx,cy)
end
axis equal
我的身高178公分,故可用上述函數執行如下:
>> acrobat(178)
Read more!
張貼者:
不留白老人
於
3/24/2007 10:28:00 下午
標籤: 老師的話
有關作業三
一談到分析的題目,有些同學常會慌了手腳,不知如何下手。但是解決工程上的問題,並不是意氣用事,而是有步驟的。這次作業的結果,可以看出大部份的同學都是在最後一刻找答案,抄答案。也沒花時間事前思考,更遑論分析。到底是基礎不足或者學習上有障礙,實在很難完全瞭解。
在第一題目中,主要針對人體工學的問題作討論,並設法應用於機動學上之觀念。當人手在一平面上移動時,實際上已經將問題簡化許多,因此不必考慮到三維之動作問題。當然為使問題簡化,仍然必須有些假設,使解題的步驟清晰。這些假設包括:
- 拳頭僅當做一點,因此成為手腕或下手臂A的一部份。
- 上手臂之轉動實際上與中心線仍有一段距離。此處假設上手臂之長度L係自心臟部位算起。
- 頭的高度H因此也需由心臟部位算起。
- 當伸直時,實際上手臂可能無法完全伸直。為簡化起見,其伸直之位置不考慮頭部的阻礙。

整個手臂的動作如上圖,實際上類似一個滑塊的動作。其動作來源仍然為上手臂L。由於拳頭的動作由頭部開始。故上下手臂與頭部高度H所構成之三角形或角度θo為限制點,因此若以上手臂之角度θ表示任意位置之角度時,其值應在θo<θ<π/2之間,而θo應為
cos(θo)=[H^2+L^2-A^2]/(2HL)
設兩手臂交點為P,則其座標應為:
x1=Lcosθ
y1=Lsinθ
其在頭頂上之點Q之座標為:
x2= 0
y1=y1+ sqrt(A^2-(Lcosθ)^2)
因此繪線時,只需將原點O與PQ等三點連線即可構成手臂的位置。其程式內容如下:
function [theta]=fistheight(L,A,H)
% Variables:
% L:length of upper arm, cm
% A:length of lower arm, cm
% H:head height, cm
% theta:initial angle, degrees
% Example [theta]=fistheight(30,25,30)
clf;
th=pi/2-acos((H*H+L*L-A*A)/(2*H*L));% Initial angle
theta=th*180/pi;
t=linspace(th,pi/2,10);
for i=1:length(t),
x1=L*cos(t(i));y1=L*sin(t(i));
line([0 x1 0],[0 y1 y1+sqrt(A*A-x1*x1)]);
end
line([L 0 0],[0 0 L+A],'color','r','linewidth',3);%繪座標
line(L*cos(t),L*sin(t),'linestyle',':');%繪P點軌跡圓
axis equal;
xlabel('X-Axis')
ylabel('Y-Axis')
角度θ在θo與π/2之間,係利用linspace指令將其分成十個區段。執行下列指令後,其結果如下圖:
>> t=fistheight(30,30,25) %設L=30cm,A=30cm,H=25cm
t =
24.6243
Read more!
張貼者:
不留白老人
於
3/24/2007 05:03:00 下午
標籤: 老師的話
2007年3月16日 星期五
第二週作業有感
下圖是陳柏成同學所搜尋得到的人體關節圖,與機構所討論的運動結有極類似的比喻,相當好的資料。只可惜沒有注明出處。希望他能補充。
- 肩關節:上臂由肩關節和身體連結,做球面運動,應屬於球對(Spherical pair)
- 肘關節:只能做大約120度的迴轉運動,應 為平面低對中的旋轉對(Revolute pair)。這種對偶只能迴轉不能平移,故自由度等於一
- 鞍狀關節:大拇指和手掌連接的關節,和肘關節類似,做大約90度的迴轉運動
- 其餘手指與手掌間的關節:做有限度的球面運動,屬於球對(Spherical pair)
- 膝關節:和肘關節類似,做有限度的迴轉運動,為旋轉對(Revolute pair)
- 踝關節:腳掌可做兩方向的旋轉,自由度為二
若以伏地挺身為例,手掌作為支撐點,此時上臂和下臂像是雙頭接桿(Binary link)
肩關節、肘關節和掌關節為旋轉對。手掌固定不動,靠著這三個關節(接頭)和上下臂
(連桿)的旋轉,加上肌肉的收縮舒張,即可完成這個動作。
人體關節圖
上述圖若能配合林軍耀同學的網頁說明,則更為清楚。徐嘉鴻的圖也很不錯,只可惜沒有適當的網頁可以顯示。例如:
球臼型結
比較特別不解的是林瑋倫與張志鵬的第二次作業同樣放在一個部落格內。我不知道這兩位同學為什麼要如此做,節省空間嗎?今後最好分開,各人自己擁有自己的部落格。
最後再強調一次,送交作業不要像在網站上隨便取一個名字送上即可。拜託不要讓我花太多時間去核對諸如INVES ,Charlie,stone,nlnmtitmihiu等等是誰,實在浪費我太多的時間。我再說一次,如果每次繳交時忘記報上姓名或學號,我不想讓自己的血壓升高,只好將你的作業成績以零分計算了。
在同學搜尋的資料中,下面之網頁甚有參考價值:
http://www.shockfamily.net/skeleton/JOINTS.HTML
http://www.saburchill.com/chapters/chap0008.html
http://www.bbc.co.uk/science/humanbody/body/factfiles/joints/ellipsoidal_joint.shtml
http://www.preventdisease.com/fitness/fundament/articles/types_of_joints.html
請同學參考。 Read more!
張貼者:
不留白老人
於
3/16/2007 01:42:00 下午
標籤: 老師的話
2007年3月14日 星期三
一套免費的三D軟體
介紹你一個免費的三D繪圖軟體:Google財大氣粗,很久以前就買下sketchup這套三D的繪圖軟體,只是她並沒有大肆宣揚。我認識這套軟體是其第五版,現已出到第六版。這套軟體是免費的,稱為free sketchup,另外一套為sketchup pro,屬專業版,要價495美元。但兩者功能差不多,重要的項目多有了。
當初google購置這一套軟體最主要為的是在google earth的應用。有了sketchup,任何人都可以上網在google earth上找到自己的家,然後將自家的房子以立體的方式顯示在這個地球上。google這家公司在型式上已經佔據了整個地球,將來你家後院的垃圾,說不定在google earth上可以找到。
這套軟體可以自網站下載(sketchup.com),試用看看,也許你會發現另一片天空。
這是我用sketchup軟體繪製的八德農會乾燥機圖
年老一輩的人認識這一棟房子嗎?
更多的作品參看與圖同樂。
Read more!
張貼者:
不留白老人
於
3/14/2007 04:16:00 下午
標籤: 老師的話
2007年3月10日 星期六
如何繪製與機動有關的圖
繪圖的工作對工程人員而言,是不可或缺的。如果到現在你對電腦繪圖的工具仍然一知半解,那表示從前所學的工程圖學一定沒有真正紥下根。一般繪畫與工程繪圖不同,前者必須具有慧根,後者則只要學著用就行。
電腦繪圖的工具很多,AUTOCAD是比較流行的,但對機動的圖有時可能會有殺雞用牛刀的感覺。比較簡單可看的則有小畫家、WORDDRAW、VISIO及OPEN OFFICE DRAW等等。小畫家是附在系統內之小程式,但在張貼圖的過程中時常也可派上用場,尤其是任何圖要剪裁或轉為JPG格式上載張貼時相當有用。例如:直接將螢幕之內容剪下(按Prt Sc鍵)再貼至小畫家修剪張貼,相當管用。WORDDRAW則是文書處理中之簡便繪圖工具,用來繪製機構圖也綽綽有餘,只可惜很多人都棄之如敝徙。VISIO是OFFICE的附屬軟體,取得容易,功能俱備,值得同學認真學習使用,現在所用的教科書中大部份的圖都是使用這套軟體繪製的。OPEN OFFICE DRAW則是自由軟體的一項,功能佳,可以繪製各種圖形、流程圖及標誌,而且是免費的,其匯出功能可以將任何軟體繪製的圖轉為jpg或其他型式,立即供上載,故也值得一學。
當然,經過MATLAB繪圖產生的圖也可以在EDIT的項下,以COPY FIGURE的方式,拷貝為JPG之格式,然後再行上載。所以繪圖程式一籮框,怕是你不去用而已,根本不必花費多少錢或多少心思就可達成。所以在作業中,若有需要繪圖的,請多自行繪製,然後上載至自己的部落格中,再用超連結的方式繳交作業,大一時所學的武功,至此應拿出來展現。然而萬事起頭難,若不實際去執行一遍,困難的山頭永遠會擋在前頭。等到學期過了一半以後,發覺仍然要如此走一遭,那時功課又多,時間更不夠,回頭想想,那何不提早開始呢?
Read more!
張貼者:
不留白老人
於
3/10/2007 10:00:00 上午
標籤: 老師的話
一篇值得你一讀的文章
盧教授的心聲發表於我的另一個教學時光的部落格中,也曾經產生了不少迴響。不過,長江後浪推前浪,身為台大生機系的同學,請大家捫心自問,自己現在的行為是不是也在拷貝兩年前學長們所演出的情節?
在你求學的當中,尤其是全國最高學府裡,你是否切切實實地扮演過一位大學生的角色?然後回家告訴親朋好友說:我真的了不起,因為我上了台大,我是台大的學生!
然而在真實的生活裡,你是否仍然上課的時候,帶著早餐,準備上課的時候在類似麥當勞的座位上吃喝一頓?或者躲在角落裡,與鄰座同學竊竊私語,無視課堂的進行?或者帶著手機汲汲營營地在課堂內準備今天課堂外的業務?
仔細思考一下,也許看到別人,也會看到自己!
Read more!
張貼者:
不留白老人
於
3/10/2007 09:22:00 上午
標籤: 老師的話
2007年3月7日 星期三
機動論壇開張囉!
學習本身是一種樂趣,這種樂趣在年歲愈大愈為濃厚。年紀輕的人對新事物的學習就沒有這種動力了嗎?可能也不見得,也許會更多,端視個人對自己的期許與時間的妥善安排罷了。
機動學的課程到底有捨好玩的呢?若僅為分數當然不好玩。任何課程若是為了分數,什麼都不好玩,不是嗎?只可惜台大的學生,一向偏重分數,好玩的東西往往擺在次一位階,學習的痛苦指數增加,越學也越痛苦。
這個版面設立之目的主要讓同學稍有機會散散心,搖下車窗看一看外邊的世界。所以也沒有一定的主旨,也沒有特定的設限。總是希望課外之餘,憑著赤子之心,聊聊機動在課外還有些什麼話題,有什麼心得,有什麼發現。聊聊地球不停地轉動,產生春夏秋冬,但它到底會動到何時何日?
Google買下blogger.com之後,就一直不斷地在耕耘之中,有些人說它使用不習慣,有些人嫌它的結構太複雜。不過愈複雜的東西就會讓你有更多的好奇的空間,可以創造自己更多的個性網頁。因此,使用它,不但可以發現許多新的事物,而且可以利用其龐大的免費資源。
現在上課用的網頁,同學僅能採用張貼意見的方式回應,限制很大。這可能當初blogger.com設計時,目的不在應用於教學吧,只是我拿來作為教學論壇,看起來真有點削足適履,但至少也能發揮一些教學效果。
因此同學可以利用這個窗口透透氣,我不希望每位同學都參加,至少提供有興趣的同學可以有表現的機會。使用這個論壇有幾個方法,其一是直接成為這個網頁的成員,只要告訴我一聲,或在本頁下意見回應一下,我可以將你的帳號列入,直接在本論壇中大大方方地張貼你的內容及圖片,不會受迴應功能的限制(當然迴應張貼的功能仍然存在)。其二是利用電郵的方法,直接將內容郵寄過來。電郵位址為martinfon.xxxxx@blogger.com。這裡的xxxxx內容會在課堂中公佈,以防止大量的垃圾信。
Read more!
張貼者:
不留白老人
於
3/07/2007 08:29:00 上午
標籤: 老師的話