# 基礎力學:一維彈性碰撞 ## 簡介 當兩質點互相接近,在他們之間的相互作用力下,產生動量和動能的變化,然後再分離的現象,稱之為兩質點的**碰撞**。在時間極短的情況下,碰撞期間所受之外力產生的動量變化可以忽略,則兩質點總動量守恆。若碰撞前後兩質點總動能不變,則稱之為**彈性碰撞**,也是我們這次要探討的主題。 ![](https://i.imgur.com/tIFXSaX.jpg) 要分別得出兩質點經過彈性碰撞後的速度需要以下兩個方程式: <br> 1. **動量守恆** ![](https://i.imgur.com/R6sQsB6.png) 2. **能量守恆** ![](https://i.imgur.com/9JTycXZ.png) <br> 將兩個方程式解連例可以得出以下關係式: <br> 1. ![](https://i.imgur.com/5Atj3Y9.png) 2. ![](https://i.imgur.com/1z8HzgH.png) <br> ## 例題 1. 現在有了兩個質點在碰撞後的速度,我們就可以來透過Matlab來模擬兩顆球經過一維彈性碰撞的運動情形。 ![](https://i.imgur.com/oT7Tu7M.png) 先輸入以下參數: * 紅球質量=1 紅球半徑=1 紅球位置=(3,1) 紅球初速度=(0.3,0) * 藍球質量=2 藍球半徑=1 藍球位置=(10,1) 藍球初速度=(-0.05,0) ``` % 第一顆球參數:質量、半徑、位置、初速度。 m1=1; r1=1; X1=[3,1]; V1=[0.3,0]; % 第二顆球參數:質量、半徑、位置、初速度。 m2=2; r2=1; X2=[10,1]; V2=[-0.05,0]; ``` <br> 2. 接著我們使用**patch**函數來設定邊界條件,調整函數裡面各個參數可以改變形狀、顏色等等。接下來**grid on**加上網格,並調整軸的比例。 ``` % 背景設定 patch([0,0,12,12],[0,2,2,0],'w','FaceAlpha',0.5); grid on; axis square equal; hold on; ``` <br> 3. 接下來我們設定**a**為一個0到2pi的一維向量,這樣才能用**sin**函數跟**cos**函數來畫出完整的圓形。最後一樣用**patch**函數來完成圖形。 ``` % 將球畫出來 a=[0:0.1:2*pi]; Xcircle=cos(a); Ycircle=sin(a); B1=patch (X1(1)+r1*Xcircle, X1(2)+r1*Ycircle,'r','FaceAlpha',1); B2=patch (X2(1)+r2*Xcircle, X2(2)+r2*Ycircle,'b','FaceAlpha',1); ``` <br> 4. 然後我們設定一個**for**迴圈,並在裡面加入碰撞的條件以及速度改變的關係式就可以模擬兩顆球每一次的運動情形,並用**set**函數來進行物件性質的存取。記得在迴圈裡面使用**getframe**函數才能記錄下來以方便做圖。 ``` %跑for迴圈 for i=1:5000 % 更新位置 X1=X1+V1; X2=X2+V2; % 第一顆球跟邊界碰撞 if (X1(1)<=r1) X1(1)=r1; V1(1)=-V1(1); end if (X1(1)>=12-r1) X1(1)=12-r1; V1(1)=-V1(1); end % 第二顆球跟邊界碰撞 if (X2(1)<=r2) X2(1)=r2; V2(1)=-V2(1); end if (X2(1)>=12-r2) X2(1)=12-r2; V2(1)=-V2(1); end % 兩顆球碰撞條件 if (norm (X1-X2)<=r1+r2) %拷貝速度向量 u1=V1; u2=V2; % 一維碰撞後速度計算 M=m1+m2; V1=((m1-m2)/M)*u1+(2*m2/M)*u2; V2=((2*m1)/M)*u1+((m2-m1)/M)*u2; end % 更新畫面 set(B1,'XData',X1(1)+r1*Xcircle); set(B2,'XData',X2(1)+r2*Xcircle); drawnow; F(i) = getframe(gcf); end ``` <br> 5. 最後使用**VideoWriter**來完成動圖,可以自行調整影格率和畫質。 ``` %作圖 writerObj = VideoWriter('elasticCollision.avi'); writerObj.FrameRate = 60; writerObj.Quality = 100; for i=1:length(F) % convert the image to a frame frame = F(i) ; writeVideo(writerObj, frame); end ``` <br> 6. 最後的圖片會長這樣,完整的動圖請點選下方的網址觀看。 ![](https://i.imgur.com/J2358EG.png) https://www.youtube.com/watch?v=1WUmvljknL8 ## 習題 請下載附件的程式碼並加以修改來模擬以下情況: 一紅球以速度v=1向右撞擊靜止的綠球,接著綠球撞擊靜止的藍球.......持續下去。 ![](https://i.imgur.com/U51DcV2.png) 參數: * 紅球質量=1 紅球半徑=1 紅球位置=(2,1) 紅球初速度=(1,0) * 綠球質量=3 綠球半徑=1 綠球位置=(6,1) 綠球初速度=(0,0) * 藍球質量=2 藍球半徑=1 藍球位置=(10,1) 藍球初速度=(0,0)