天天看點

空氣阻力對乒乓球運動軌迹的影響技術背景空氣阻力的模拟加轉弧圈帶來的影響削球弧線總結概要版權聲明

技術背景

乒乓球作為國球,不僅僅是在奧運等衆多賽場上為中國收納了多枚獎牌,更是在民間廣為大家所好。在上一篇部落格中主要講述了馬格努斯力在乒乓球的運動過程中的應用,并且從俯視圖的角度看到了乒乓球的各種旋轉下的弧圈軌迹。本文主要講述的是空氣阻力對乒乓球的運動過程的影響。

空氣阻力的模拟

我們所了解到的空氣阻力的表達式為:

F=C\rho Sv^2

其中C是一個常數,對于不同的物質參數有可能不同,這個需要在實驗中進行測定,而這裡我們就簡單取一個假設值即可。\rho 表示空氣密度,S表示迎風面積,對于一個乒乓球而言,迎風面積其實就是乒乓球的投影面積,v表示速度,空氣阻力與速度的平方成正比。至于阻力的方向,那肯定是跟乒乓球的運動方向相反的,來拒去留。相關的模拟測試代碼如下:

import numpy as np
from tqdm import trange
import matplotlib.pyplot as plt

vel = np.array([4.,4.])
vel0 = vel.copy()
steps = 100
r = 0.02
rho = 1.29
mass_min = 2.53e-03
mass_max = 2.70e-03
dt = 0.01
g = 9.8
C = 0.1
s0 = np.array([0.,0.])
s00 = np.array([0.,0.])

s1 = [s0.copy()]
for step in trange(steps):
    s0 += vel*dt
    s1.append(s0.copy())
    # print (vel)
    vel += np.array([0.,-g])*dt
s1 = np.array(s1)

s2 = [s00.copy()]
for step in trange(steps):
    s00 += vel0*dt
    s2.append(s00.copy())
    vel_norm = np.linalg.norm(vel0)
    DampF = C*rho*np.pi*r**2*vel_norm**2
    DampA = DampF/mass_min
    # print (vel)
    vel0 -= np.array([DampA*vel0[0]/vel_norm, DampA*vel0[1]/vel_norm])*dt
    vel0 += np.array([0.,-g])*dt
s2 = np.array(s2)

plt.figure()
plt.plot(s1[:,0], s1[:,1], 'o', color='orange')
plt.plot(s2[:,0], s2[:,1], 'o', color='black')
plt.savefig('damping.png')           

複制

代碼的運作結果如下圖所示,其中橙色軌迹表示未添加阻力的曲線,黑色軌迹表示考慮了空氣阻力:

空氣阻力對乒乓球運動軌迹的影響技術背景空氣阻力的模拟加轉弧圈帶來的影響削球弧線總結概要版權聲明

可以看到,在加了空氣阻力之後,乒乓球的速度逐漸降低,就不再是一個漂亮的抛物線形式了。需要注意的是,這裡我們的軌迹是從y-z平面來觀察的側視圖。

加轉弧圈帶來的影響

我們在上一個章節中主要考慮的是空氣阻力對乒乓球運動軌迹的影響,其中并未考慮到乒乓球本身的旋轉。這裡我們考慮一個弧圈球的場景:加轉弧圈或者叫高吊弧圈球的軌迹,在這個乒乓球活動的軌迹中需要加入上旋的旋轉,上旋會給乒乓球帶來一個向下壓的馬格努斯力,使得乒乓球運動軌迹的弧線更小。具體的馬格努斯力的形式參考如下Nasa提供的Kutta-Joukowski理論:

空氣阻力對乒乓球運動軌迹的影響技術背景空氣阻力的模拟加轉弧圈帶來的影響削球弧線總結概要版權聲明

相關的模拟代碼如下所示,這裡為了友善調用,我們把生成軌迹的子產品包裝成了一個簡單的函數:

import numpy as np
from tqdm import trange
import matplotlib.pyplot as plt

vel = np.array([4.,4.])
vel0 = vel.copy()
steps = 100
r = 0.02
rho = 1.29
mass_min = 2.53e-03
mass_max = 2.70e-03
dt = 0.01
g = 9.8
C = 0.1
f0 = 0.
f1 = 0.
omega0 = 4
s0 = np.array([0.,0.])
s00 = np.array([0.,0.])

def F(vel, omega, r, rho):
    return 4*(4*np.pi**2*r**3*omega*vel*rho)/3

def Trace(steps, s0, vel0, f0, f1, dt, mass, omega0, r, rho, damping=False, KJ=False):
    s = [s0.copy()]
    tmps = s0.copy()
    for step in trange(steps):
        tmps += vel0*dt+0.5*f0*dt**2/mass
        s.append(tmps.copy())
        vel_norm = np.linalg.norm(vel0)
        if KJ:
            vel0 += np.array([np.sqrt(vel0[1]**2*(f0*dt/mass)**2/(vel0[0]**2+vel0[1]**2)),
                             -np.sqrt(vel0[0]**2*(f0*dt/mass)**2/(vel0[0]**2+vel0[1]**2))])
        if damping:
            vel0 -= np.array([f1*vel0[0]/vel_norm, f1*vel0[1]/vel_norm])*dt/mass
        vel0 += np.array([0.,-g])*dt
        f0 = F(np.linalg.norm(vel0), np.abs(omega0), r, rho)
        f1 = C*rho*np.pi*r**2*vel_norm**2
    return np.array(s)

s1 = Trace(steps, s0, vel0.copy(), f0, f1, dt, mass_min, omega0, r, rho, damping=False, KJ=False)
s2 = Trace(steps, s0, vel0.copy(), f0, f1, dt, mass_min, omega0, r, rho, damping=True, KJ=False)
s3 = Trace(steps, s0, vel0.copy(), f0, f1, dt, mass_min, omega0, r, rho, damping=True, KJ=True)

plt.figure()
plt.plot(s1[:,0], s1[:,1], 'o', color='orange')
plt.plot(s2[:,0], s2[:,1], 'o', color='black')
plt.plot(s3[:,0], s3[:,1], 'o', color='red')
plt.savefig('damping.png')           

複制

運作結果如下,其中黃色的軌迹表示不考慮空氣阻力和馬格努斯力的效果,而黑色的軌迹表示考慮空氣阻力不考慮馬格努斯力作用的結果,相關内容在上一個章節中已經進行了介紹,最後還有一條紅色的軌迹表示同時考慮了空氣阻力和馬格努斯力的結果,也就是正常拉出來的高吊弧圈球的效果:

空氣阻力對乒乓球運動軌迹的影響技術背景空氣阻力的模拟加轉弧圈帶來的影響削球弧線總結概要版權聲明

從這個結果中我們可以了解到,高吊弧圈球不僅旋轉強烈,在軌迹上也會更加的低平,在賽場上具有很強的威脅性。

削球弧線

在上一個章節中我們模拟的是高吊弧圈球的結果,也就是上旋轉的球,而在賽場上還有另外一種非弧圈的打法:削攻結合。其中的削球技術,能夠給球帶來一個強烈的下旋轉,也就是改變了馬格努力的方向,相關的模拟代碼如下:

import numpy as np
from tqdm import trange
import matplotlib.pyplot as plt

vel = np.array([4.,4.])
vel0 = vel.copy()
steps = 100
r = 0.02
rho = 1.29
mass_min = 2.53e-03
mass_max = 2.70e-03
dt = 0.01
g = 9.8
C = 0.1
f0 = 0.
f1 = 0.
omega0 = 4
s0 = np.array([0.,0.])
s00 = np.array([0.,0.])

def F(vel, omega, r, rho):
    return 4*(4*np.pi**2*r**3*omega*vel*rho)/3

def Trace(steps, s0, vel0, f0, f1, dt, mass, omega0, r, rho, damping=False, KJ=False, down_spin=False):
    s = [s0.copy()]
    tmps = s0.copy()
    for step in trange(steps):
        tmps += vel0*dt+0.5*f0*dt**2/mass
        s.append(tmps.copy())
        vel_norm = np.linalg.norm(vel0)
        if KJ and not down_spin:
            vel0 += np.array([np.sqrt(vel0[1]**2*(f0*dt/mass)**2/(vel0[0]**2+vel0[1]**2)),
                              -np.sqrt(vel0[0]**2*(f0*dt/mass)**2/(vel0[0]**2+vel0[1]**2))])
        if KJ and down_spin:
            vel0 += np.array([-np.sqrt(vel0[1]**2*(f0*dt/mass)**2/(vel0[0]**2+vel0[1]**2)),
                              np.sqrt(vel0[0]**2*(f0*dt/mass)**2/(vel0[0]**2+vel0[1]**2))])
        if damping:
            vel0 -= np.array([f1*vel0[0]/vel_norm, f1*vel0[1]/vel_norm])*dt/mass
        vel0 += np.array([0.,-g])*dt
        f0 = F(np.linalg.norm(vel0), omega0, r, rho)
        f1 = C*rho*np.pi*r**2*vel_norm**2
    return np.array(s)

s1 = Trace(steps, s0, vel0.copy(), f0, f1, dt, mass_min, omega0, r, rho, damping=True, KJ=False)
s2 = Trace(steps, s0, vel0.copy(), f0, f1, dt, mass_min, omega0, r, rho, damping=True, KJ=True)
s3 = Trace(steps, s0, vel0.copy(), f0, f1, dt, mass_min, omega0, r, rho, damping=True, KJ=True, down_spin=True)

plt.figure()
plt.plot(s1[:,0], s1[:,1], 'o', color='orange')
plt.plot(s2[:,0], s2[:,1], 'o', color='black')
plt.plot(s3[:,0], s3[:,1], 'o', color='red')
plt.savefig('damping.png')           

複制

在這次的模拟中,我們對比了不加弧圈(橙色軌迹)、高吊弧圈(黑色軌迹)和削球弧線(紅色軌迹),如下圖所示:

空氣阻力對乒乓球運動軌迹的影響技術背景空氣阻力的模拟加轉弧圈帶來的影響削球弧線總結概要版權聲明

從結果中我們發現,由于強烈的下旋轉為乒乓球帶來了上升的馬格努斯力,是以乒乓球的弧線軌迹被拉長了,相對而言會更加容易控制弧線。比如朱世赫,還有中國隊的馬特,以及前國家隊的侯英超,都是削球名将。

總結概要

在前一篇部落格中我們介紹了加側旋的乒乓球弧圈技術的模拟,本文我們關注的是高吊弧圈和削球弧線這兩種軌迹原理,并且引入了空氣阻力對乒乓球運動軌迹的影響。通過對空氣阻力和馬格努斯力的模拟,我們可以看到不同的弧線曲線。對于乒乓球愛好者而言,可以通過這種模拟的結果,來制定比賽中有可能用到的政策,比如低長弧圈球、高短弧圈球等等。先從科學的角度出發制定戰略,再通過日常訓練和鞏固提高技術水準,最後再使用到正式的賽場上去。

版權聲明

本文首發連結為:https://www.cnblogs.com/dechinphy/p/damping.html

作者ID:DechinPhy

更多原著文章請參考:https://www.cnblogs.com/dechinphy/

打賞專用連結:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

騰訊雲專欄同步:https://cloud.tencent.com/developer/column/91958