橋平礼の電験三種合格講座

過去50年分以上の電験三種の問題を解いて分かった、電験三種は今も昔も変わりません。過去問を解きながら合格を目指しましょう。

MENU

物理の運動を視覚化するためのMATLABアニメーション作成ガイド第3章 運動量 反発係数

物理の運動を視覚化するためのMATLABアニメーション作成ガイド

反発係数

amazon kindleを出版しました。


第3章 運動量
・反発係数
 物体が壁などに衝突してはね返るとき,はね返る前後の速度を使い,次式で表すような反発係数eを使って表します。
$e=\dfrac{|v'|}{|v|}$                     ・・・(1)

$v$:衝突前の速度,$v'$:衝突後の速さ

 $e=1$・・・弾性衝突(完全弾性衝突)
 $0<e<1$・・・非弾性衝突
 $e=0$・・・完全非弾性衝突

壁が動く物体に変わっても同じように,反発係数を計算できます。
$e=\dfrac{|v_A'-v_B'|}{|v_A-v_B|}$                    ・・・(2)

$v_A,v_B$:衝突前の速度,$v_A',v_B'$:衝突後の速度

斜めに衝突した場合は横方向の速度$v_x=v_x'$より,縦方向の速度$v_y$は反発係数$e$より次式のように求まります。
$v_y'=ev_{y}$                        ・・・(3)

完全弾性衝突のときは,力学的エネルギーは保存されますが,非弾性衝突の場合はエネルギーが熱や音,物体の変形などに使われるため,力学的エネルギーは減少します。

 

反発係数$e=0.5$の場合

反発係数$e=0.7$の場合

                      <プログラム>
%反発係数
%/******************1つめのグラフ************
figure(1);
clf%グラフクリア
g=9.8;%重力加速度
m=1.0;%質量
e=0.5;%反発係数
x0=20.0;%初期位置
v0=0.0;%初期速度

g1 = animatedline('Color','r');
g2 = animatedline('Color','b');

 V= VideoWriter('反発係数11.mp4','MPEG-4');%運動の法則11.mp4というファイル名にします。
 open(V);%ビデオを描くファイルを開きます。

axis([0 10 -20 20])%グラフの範囲

t = linspace(0,10,200);%0~10を200等分


xlabel('時間[sec]')
ylabel('距離[m]、速度[m/s]')
text(3,10,'速度')
text(3,30,'位置')

t1=0;
for i=1:length(t)
        v1=v0-g*(t(i)-t1);
        x1=x0+v0*(t(i)-t1)-1.0/2.0*g*(t(i)-t1)^2;

    if x1<=0
        v0=-v1*e;
        t1=t(i);
        x0=0.0;
    end  
        addpoints(g1,t(i),v1);
        addpoints(g2,t(i),x1);   

     frame_V = getframe(gcf);% Figure のフレームのキャプチャ、gfcは現在の Figure ハンドル番号の取得
     writeVideo(V,frame_V);%Vに書き込み
    drawnow    
end
 close(V);%ビデオを描くファイルを閉じます。
%/******************2つめのグラフ************
 figure(2);
 clf%グラフクリア
  V= VideoWriter('反発係数22.mp4','MPEG-4');%運動の法則11.mp4というファイル名にします。
 open(V);%ビデオを描くファイルを開きます。

 axis([0 10 0 20])%グラフの範囲

    pause('on')
 t = linspace(0,10,401);%0~10を400等分
 
    x0=20.0;%初期位置
    x2=x0;
    v0=0.0;%初期速度
    t1=0;
    e=0.7;%反発係数
 for i=2:length(t)
        v1=v0-g*(t(i)-t1);
        x1=x0+v0*(t(i)-t1)-1.0/2.0*g*(t(i)-t1)^2;

    if x1<=0
        v0=-v1*e;
        t1=t(i);
        x0=0.0;
    end 
    if  rem(i,5)~=0  
      pos = [t(i-1) x2 0.5 1]; 
      rectangle('Position',pos,'Curvature',[1 1],'EdgeColor','w')
    end
      pos = [t(i) x1 0.5 1]; 
      rectangle('Position',pos,'Curvature',[1 1],'EdgeColor','r')
    x2=x1;
    frame_V = getframe(gcf);% Figure のフレームのキャプチャ、gfcは現在の Figure ハンドル番号の取得
    writeVideo(V,frame_V);%Vに書き込み
    pause(0.01)
    drawnow;
 end
 close(V);%ビデオを描くファイルを閉じます。