本來想賣藝者的轉輪應該是較為簡單的應用,有些同學是做出來了,但以乎不知其所以然。所以在討論當中著墨甚少。要寫此程式,必須考慮一筆畫的畫法,尤其高度要與輪圈的直徑有關,有時必須有一個大假設:就是當人體張開成大字形時,其身高應略等於其所張開的四肢範圍。有些人找到達文西的人體畫,是很好的資料。
要寫這個程式,有幾個問題必須分別解決。其一是輪圈滾動的問題。就動力學而言,若一圓滾動,其轉動經過之弧長應等於圓心在地面行走的距離。這一個可利用下式計算:
行進的距離=回轉的弧長=半徑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!