2007年5月27日 星期日

作業十

B94611016 胡寅亮
1.本人5/17有來上課。
2.
藉由老師介紹之瞬心畫法,我們可以得到下圖,瞬心在2、4桿的延長線上,故可得P點的速度以及加速度方向。P的速度方向垂直4桿,而加速度是在沿著4桿的方向。

如上圖所示,假設該桿得長度是L在一複數平面上,旋轉中心M為複數平面上的原點,端點P到旋轉中心M的距離是X,並且以角速度ω逆時針方向旋轉,那麼

P點是iωX*exp(iωt+iθ),加速度是-ω*ω*Xexp(iωt+iθ)。

今在M上提供一水平速度v,則P點的速度會是v+iωX*exp(iωt+iθ),加速度是-ω*ω*Xexp(iωt+iθ)。

若加上水平加速度a,則P點的速度會是v+at+iωX*exp(iωt+iθ),加速度是a-ω*ω*Xexp(iωt+iθ)。

P之速度方向是P與桿一端點連線的垂直方向,加速度方向則為P與桿一端點的連線方向。
Q之速度方向是Q與桿一端點連線的垂直方向,加速度方向則為Q與桿一端點的連線方向。
3.
瞬時中心的畫法在課本中有說明,依照課本的說明,我寫了個function slider_center,程式碼如下:


function slider_center(R,L,e)

th1=0;
if R>L

th2=asind(L/R);
else
th2=90;
end

th=linspace(th1,th2,200 )
[d,th3]=slider_solve(th,R,L,e,1)

x=R*cosd(th),
y=R*sind(th)

for n=1:200

hold on;
line([0,x(n),d(n)],[0,y(n),e]);
line([d(n)-1,d(n)+1,d(n)+1,d(n)-1,d(n)-1],[e-3,e-3,e+3,e+3,e-3]);
ground(0,0,3,0)
anchor(-3,0,0,0)

plot(0,0,'go');
plot(x(n),y(n),'go');
plot(d(n),e,'go');
plot([0,0],[0,e-d(n)*(y(n)-e)/(x(n)-d(n))],'go:');
plot([x(n),0],[y(n),e-d(n)*(y(n)-e)/(x(n)-d(n))],'go:');
plot([x(n),d(n)],[y(n),y(n)*d(n)/x(n)],'go:');
plot([d(n),d(n)],[0,y(n)*d(n)/x(n)],'go:');

axis equal;
axis ([-30 30 -50 50]);

pause(0.001);
clf;

end

若要得到動畫,只要在螢幕上輸入
slider_center(15,6,0)
就可得到下面的動畫

2007年5月16日 星期三

作業九

B94611016 胡寅亮

本人5月3日有來上課
我是五月十號下午兩點的那組

關於滑塊驅動,我的想法如下:

先求出曲桿跟滑塊的座標並連起來,再利用for迴圈製作動畫

要知道曲桿的座標,必須先知道曲桿跟水平夾角的極限值(th1、th2)
要知道滑塊的座標,必須先知道滑塊到原點的水平距離(d)以及偏置量(e)

th1、th2可由以下的function求出:
function [s,th1,th2]=slider_limit(R,L,e)
th1=asind(e./(R+L));
th2=180+asind((L-e)/R);
s=(R+L).*cosd(th1)-abs(R-L).*cosd(th2);

d可由以下的function求出:
function [d,theta3]=slider_solve(theta2,R,L,e,mode)
if nargin<5, mode=0;end
theta=theta2*d2g;
cc=(e-R.*sind(theta))./L;
if mode>=0,
theta3=asind(cc);
else
theta3=asind(-cc)+pi;
end
d=L.*cosd(theta3)+R.*cosd(theta);

因此我寫一個slider function說明曲桿的驅動方式如下,
function slider(R,L,e)

[s,th1,th2]=slider_limit(R,L,e)
th=linspace(th1,th2,300 )
[d,th3]=slider_solve(th,R,L,e,1)

x=R*cosd(th),
y=R*sind(th)
for n=1:300

line([0,x(n),d(n)],[0,y(n),e]);
line([d(n)-1,d(n)+1,d(n)+1,d(n)-1,d(n)-1],[e-3,e-3,e+3,e+3,e-3]);
ground(0,0,3,0)
anchor(-3,0,0,0)
pause(0.01);
axis ([-100 100 -100 100]);
axis equal;
clf;

end

關於滑塊驅動,我的想法如下:
建立一個function slider2
function slider2(R,L,e)

[s,th1,th2]=slider_limit(R,L,e)
th=linspace(th1,th2,300 )
[d,th3]=slider_solve(th,R,L,e,1)

x=R*cosd(th)
y=R*sind(th)
for n=1:300

line([0,x(n),d(n)],[0,y(n),e]);
line([d(n)-1,d(n)+1,d(n)+1,d(n)-1,d(n)-1],[e-3,e-3,e+3,e+3,e-3]);
ground(0,0,3,0)
anchor(-3,0,0,0)
pause(0.01);
axis ([-100 100 -100 100]);
axis equal;
clf;

end

th=linspace(th2,180-th1,300)
[d,th3]=slider_solve(th,R,L,e,-1)

x=R*cosd(th),
y=R*sind(th)
for n=1:300

line([0,x(n),d(n)],[0,y(n),e]);
line([d(n)-1,d(n)+1,d(n)+1,d(n)-1,d(n)-1],[e-3,e-3,e+3,e+3,e-3]);
ground(0,0,3,0)
anchor(-3,0,0,0)
pause(0.01);
axis ([-100 100 -100 100]);
axis equal;
clf;

end

因為滑塊驅動會滑到第二象限,所以mode輸入包括1和-1。
所以角度要從th2跑到180-th1,其他的跟前面一樣


輸入slider (26,31,10)可得曲桿驅動的情形


而輸入slider2(26,31,10)可得到滑塊驅動的情形

2007年5月9日 星期三

作業八

8-1

參考老師上課講義

並輸入f4bar([4 3 3 5],0,45,10,0,-1,0)後

得到以下資料:
0.0040 0 0 0 0.0212+0.0212i 0.0021+0.0021i
0.0021+0.0021i 0.0450 0.0100 0 0.0041-0.0245i 0.0032+0.0049i
0.0011+0.0028i 0.0695 -0.0163 0.4914 -0.2121-0.2121i 0
-0.0008+0.0049i 0.0995 -0.0050 0.3836 -1.8712-0.4391i 0

由於結果為向量而非點

經由計算的結果,各點之位置、速度與加速度為:
[位置] / [速度] / 加速度
O:[0 0] /[0 0] /[0 0]
P:[2.1 2.1] /[4.1 -24.5] /[-187.2 -439.1]
Q:[3.2 4.9] /[21.2 21.2] /[-212.1 -212.1]
R:[4 0] /[0 0] /[0 0]

8-2

如圖,其中灰色代表速度且縮小十倍,桃紅色代表加速度且縮小一百倍

8-3

參考範例程式

輸入指令fb_angle_limits([4 3 3 5],0,0)

得到對限制角度為28.955跟360-28.955

如右圖



8-4

因為4+3,3+5且|4-3|<|3-5|為一個雙搖桿連桿,而有值的範圍是[29,331]

如右圖







8-5