對乒乓球回滾的分析與MATLAB模擬

乒乓球 體育 MATLAB 物理 馬琳 動畫 中科院物理所 2019-07-05

經常看球類比賽的同志們一定知道一句話,叫做“國足誰都贏不了,國乒誰都贏不了!”,這句話內涵相當豐富(笑ing)。曾有過這樣一名國乒隊員,憑一手“魔鬼迴旋球”,成就“發球一次得一分,一直髮球一直得分”的神話,他便是曾在2008年北京奧運會上過五關斬六將,贏得男子乒乓球單打金牌的老球員——馬琳

對乒乓球回滾的分析與MATLAB模擬

所謂“魔鬼迴旋球”,也叫“零式發球”,是讓乒乓球在發出後“不出臺”,反而向球網回滾的急下旋發球。這種球過網高度低,前衝性小,下旋強烈,一般的反膠選手很容易“扎網吃球”。

來來來,我們來看看馬琳的“魔鬼迴旋球”!

對乒乓球回滾的分析與MATLAB模擬對乒乓球回滾的分析與MATLAB模擬

我們看到,乒乓球被髮出後,竟然奇蹟般地跑了一個“U”形的路線!

對乒乓球回滾的分析與MATLAB模擬

這個“U”形“魔鬼迴旋球”究竟是如何做到的?乒乓球被髮出後又是如何形成“U”形軌跡的呢?這樣的問題激發了很多物理學者的好奇心。但是,這些問題研究起來有一定的難度。我們看到,乒乓球在運動過程中會與球檯發生碰撞,並且在碰撞時還會受到摩擦力的作用,運動情況相當複雜。而物理學力求“簡單美”,我們也希望所研究的物理模型更加簡單但不失嚴格性。我們就不妨先不去研究乒乓球與球檯的那十分複雜的碰撞過程,轉而去研究一種類似的但同樣十分奇妙的運動——乒乓球在水平面內的“回滾”運動,這個運動就相對地簡單了許多。

乒乓球的“回滾”運動很容易就能實現: 我們把乒乓球放在桌子上,按壓乒乓球的中後部,把乒乓球“搓”出去。只要我們“搓”的力度足夠大,乒乓球就會發生“回滾”現象。就像這樣:

對乒乓球回滾的分析與MATLAB模擬

是不是很簡單但又有趣呢?此刻的你想不想對它大肆研究一番呢?

對乒乓球回滾的分析與MATLAB模擬

乒乓球的回滾問題是理論力學中的一個典型應用題。 現在,我們就來仔細研究一下。

乒乓球回滾的理論分析

我們假設乒乓球被按壓出去後能夠迅速恢復形變,並把乒乓球在之後的運動看做平面剛體的運動。假設乒乓球初始時刻質心的速度為

對乒乓球回滾的分析與MATLAB模擬

,其繞中心軸逆時針旋轉的角速度為

對乒乓球回滾的分析與MATLAB模擬

. 以質心初速度方向為

對乒乓球回滾的分析與MATLAB模擬

軸正向,豎直向上為

對乒乓球回滾的分析與MATLAB模擬

軸正向,建立本徵座標系

對乒乓球回滾的分析與MATLAB模擬

,如下圖所示:

對乒乓球回滾的分析與MATLAB模擬

在這個階段,乒乓球是一直在“打滑”的,也就是不滿足無滑條件。我們對乒乓球進行受力分析並列出方程:

對乒乓球回滾的分析與MATLAB模擬

(1)

其中

對乒乓球回滾的分析與MATLAB模擬

是乒乓球相對於初始時刻的轉角,

對乒乓球回滾的分析與MATLAB模擬

是乒乓球的質量,

對乒乓球回滾的分析與MATLAB模擬

是乒乓球的半徑。我們看到,這些方程中未知數有5個,分別是:

對乒乓球回滾的分析與MATLAB模擬

. 很明顯,光靠這三個方程是解不出來的,還需要補充下面這兩個方程:

對乒乓球回滾的分析與MATLAB模擬

(2)

聯合(1)、(2)兩式,很容易地解出

對乒乓球回滾的分析與MATLAB模擬

(3)

如果再加上初始條件

對乒乓球回滾的分析與MATLAB模擬

對乒乓球回滾的分析與MATLAB模擬

的話,就可以得到質心位置和轉角關於時間的解

對乒乓球回滾的分析與MATLAB模擬

(4)

我們清楚地看到:質心位置和轉角都是關於時間的二次函數,並且二次項係數都是負值。這就說明,乒乓球在運動到一定時刻後,就會“掉頭回轉”,跑回來。但是……

對乒乓球回滾的分析與MATLAB模擬

我們需要明確一個問題——微分方程解的“有效性”,像式(4)這樣的解,不是一直都成立的。當乒乓球達到無滑滾動的狀態時,我們的最原始的受力分析就出現問題了:無滑滾動時地面對乒乓球的摩擦力可不等於動摩擦因數與正壓力的乘積啊!而這一式子應當換成無滑條件:

對乒乓球回滾的分析與MATLAB模擬

問題複雜了……

對乒乓球回滾的分析與MATLAB模擬

我們不妨來想一個簡單的問題:對於任意給定的初速度和初始角速度,乒乓球都能回滾嗎?答案是否定的。我們來繼續研究乒乓球達到無滑滾動後的運動。我們將無滑條件代入(3)式,求出達到無滑滾動的時刻

對乒乓球回滾的分析與MATLAB模擬

,此時質心的速度和乒乓球轉動的角速度分別為

對乒乓球回滾的分析與MATLAB模擬

從這兩個式子中我們就可以看到,乒乓球並不是總能滾回來的,它還有可能停止滾動或者繼續向前滾動,這些都取決於初始時刻的轉動角速度和質心速度。

實際上,這樣的圖像很好理解:當球的質心初速度很大的時候,乒乓球就不能回滾,而是達到純滾動後繼續向前滾動;若是條件控制得當的話,乒乓球也能停下來,靜止在質心速度和乒乓球轉動角速度同時減小至零的位置。

於是,一個判定條件就來了:當

對乒乓球回滾的分析與MATLAB模擬

時,我們令

對乒乓球回滾的分析與MATLAB模擬

,則有:

對乒乓球回滾的分析與MATLAB模擬

以上便是未達到純滾動時乒乓球的運動狀態。達到純滾動後的運動很容易理解,若乒乓球質心速度不為零,則質心作勻速直線運動,乒乓球相對質心轉動的角速度

對乒乓球回滾的分析與MATLAB模擬

則為定值

對乒乓球回滾的分析與MATLAB模擬

.

至此 ,乒乓球“回滾”的物理圖像就已經十分清晰了。我們看到:乒乓球“回滾”只是其中的一種運動,它達到純滾後還有可能繼續向前運動,或者原地“站住”,靜止不動。

如果哪位同志有幸參加了2016年北京師範大學第十五屆青年教師基本功大賽,就會看到這樣的一個畫面。物理學系教師塗展春以“乒乓球回滾”為核心問題講授了《剛體平面平行運動動力學》一課,詳細講述了剛體平面平行運動的知識,並深入淺出地分析了乒乓球“回滾”的過程。

對乒乓球回滾的分析與MATLAB模擬

咦?這個示意圖怎麼有點奇怪呢?完整的動畫是這樣的:

對乒乓球回滾的分析與MATLAB模擬

怎麼感覺跟我們平常見到的乒乓球不太一樣呢?

對乒乓球回滾的分析與MATLAB模擬

當然,這裡呈現的是一個動畫模擬圖。如果各位真的打算去拍攝乒乓球的回滾的視頻,就會發現,由於乒乓球運動太快,手機或者普通的攝影機根本捕捉不到清晰的圖像,必須使用高速攝影機才能將過程拍攝下來。高速攝影機不是一般的貴。於是,參賽選手就利用了強大的多媒體技術,將221張圖片疊成一副1/8倍速動畫,展示在了大家面前。為了能夠區分“乒乓球”在旋轉,選手還特意在繪製的圓上添加了一些幾何圖形,這樣就顯得很直觀了。

對乒乓球回滾的分析與MATLAB模擬

這確實有點難度。除了技術上存在困難,這個模擬圖上還存在一個不大又不小的問題,也是平面動畫的“通病”——少了些必要的“立體感”。這就使得動畫看上去不像是乒乓球在“回滾”,而是一個類似圓柱體的物體在“回滾”。於是,筆者決定,用強大的工具——MATLAB,通過編程來重製乒乓球回滾的模擬圖!

對乒乓球回滾的分析與MATLAB模擬

MATLAB繪製乒乓球靜態圖

要想讓圖動起來,就需要一個容易操控的靜態圖,之後,改變其中的參數,使之伴隨時間變化,就可以達到動畫的效果,比如這樣:

[ps,ts]=meshgrid(linspace(0,2*pi,100),linspace(0,pi,100));
xs=cos(ts);
ys=sin(ts).*cos(ps);
zs=sin(ts).*sin(ps);
l=xs.^2+ys.^2-zs.^2;
surf(xs,ys,zs,l);
axis equal
shading interp;

我們就畫出了一個球體:

對乒乓球回滾的分析與MATLAB模擬

這裡面用到了MATLAB四維作圖,當然,第四維度沒法直接畫出來,MATLAB就用顏色來表示了,這也正好為我們觀察乒乓球的旋轉提供了方便。剩下的事情,便是做運算,而後控制動畫的繪製,運算的方程在這裡就不陳述了,大家可以翻前文來看哈!有一些難度的是動畫的繪製。比如,我們想讓這個球體轉起來,怎麼實現呢?我們能夠直接想到的是用rotate命令。但是,這個命令有一個致命的缺點,就是要先畫出原圖形,再進行旋轉。當使用循環畫圖的時候,圖形窗口沒有時間來相應rotate命令,就會出現圖形顫動或者“看上去不旋轉”的問題。

陷入麻煩之中……

對乒乓球回滾的分析與MATLAB模擬

但是,車到山前必有路。其實,我們完全可以不用MATLAB裡面內置的指令,而是自己去寫一個函數,讓這個函數先將座標“旋轉”好,再用surf指令繪圖。

就這麼幹!

MATLAB繪製乒乓球動態圖

大家一定學過線性代數,知道若將一個點對乒乓球回滾的分析與MATLAB模擬繞著某個軸旋轉,可以由一個線性變換矩陣來實現,比如令其繞著對乒乓球回滾的分析與MATLAB模擬軸旋轉,就是這樣:

對乒乓球回滾的分析與MATLAB模擬

那麼,令其繞著一條直線旋轉呢?我們假設這條直線平行於對乒乓球回滾的分析與MATLAB模擬軸,那麼,決定這個直線的參數只有兩個,便是這條直線的對乒乓球回滾的分析與MATLAB模擬座標和對乒乓球回滾的分析與MATLAB模擬座標。此時,旋轉後的點就可以這樣表示:

對乒乓球回滾的分析與MATLAB模擬

大家應該會發現,

對乒乓球回滾的分析與MATLAB模擬

,這也能看出直線的縱座標對旋轉沒有影響,我們也就不需要傳入直線的縱座標參數了。考慮到要計算的數據是矩陣形式,我們把上面的矩陣等式寫成三個數量等式,並使其返回值為旋轉後的座標。根據這個原理,我們就能做出乒乓球繞其瞬時軸旋轉的動畫啦!就像這樣:

[ps,ts]=meshgrid(linspace(0,2*pi,100),linspace(0,pi,100));
xs=cos(ts);
ys=sin(ts).*cos(ps);
zs=sin(ts).*sin(ps);
for t=1:1:180
[xl,yl,zl]=rotter(0,0,xs,ys,zs,t*3*pi/180);
l=xs.^2+ys.^2-zs.^2;
surf(xl,yl,zl,l);
axis equal;
shading interp;
pause(0.1)
drawnow;
end
function [xs,ys,zs]=rotter(xc,zc,x,y,z,th)
xs=xc+cos(th)*(x-xc)+sin(th)*(z-zc);
ys=y;
zs=zc-sin(th)*(x-xc)+cos(th)*(z-zc);
end

↓~效果還不錯~↓

對乒乓球回滾的分析與MATLAB模擬

就差把計算加入進去啦!只需要經歷一段嚴謹的邏輯性的書寫過程,程序就會大功告成!我們來看看最後的結果!

~回滾~

對乒乓球回滾的分析與MATLAB模擬

~繼續向前滾動~

對乒乓球回滾的分析與MATLAB模擬

~停止滾動~

對乒乓球回滾的分析與MATLAB模擬

大功告成!效果還是很好的~

最後是彩蛋時間!這裡有塗展春老師的比賽現場視頻喲!還不來看?

↓ ↓ ↓ ↓ ↓

來源:京師物理

編輯:Quanta Yuan

近期熱門文章Top10

↓ 點擊標題即可查看 ↓

1. 首屆黑洞PS大賽來襲!為了這張「高糊」的圖,中國科學家做出了啥貢獻?

2. 物理學四大神獸,除了“薛定諤的貓”還有誰?

3. 地下多大的金礦才能影響到單擺實驗?| No.149

4. 為什麼用木棍打衣服就可以洗乾淨衣服?| No.150

5. 為了替你出氣,我們給討厭的楊柳絮來個「以暴制暴」

6. 玩掃雷還有什麼技巧?科學家的玩遊戲方法你絕對想不到

7. 在我國,沒有任何一張地圖能告訴你你的真實位置

8. 在客戶魚嘴裡提供服務的小清潔蝦、清潔魚,是怎麼知道自己不會被吃掉的呢?

9. 你以為土撥鼠只會尖叫?其實它可能正在罵你

10. 你知道為了測博爾特的速度,我們有多努力嘛?

相關推薦

推薦中...