@SuperMan
2016-06-14T04:33:41.000000Z
字数 2331
阅读 886
作者:夏海峰 学号:2013301020094
- 本次主要解决棒球的运动问题。由于棒球质量较小,因此空气阻力对棒球的运动会产生巨大影响。
- 棒球运动,出了做三维的平动外,还会有让自身的旋转,产生Magus力对自身运动产生影响。
- 一、基本原理
(1)棒球的运动方程:
(2)Magus力的计算公式:
(3)Euler法具体计算步骤::
由上述公式可知,只要知道了前一步棒球的状态,那么棒球的下一个状态就可以由上述欧拉法的计算公式得到。
计算得到棒球的平面内飞行轨迹如图所示:
![]()
3D
程序
import numpy as npimport pylab as pltimport matplotlib as mplfrom mpl_toolkits.mplot3d import Axes3Dg=[0,0,-9.8]a=1e-5dt=0.1w=2000/60mpl.rcParams['legend.fontsize'] = 10fig = plt.figure()ax = fig.gca(projection='3d')class Cannon:def __init__(self,v):self.v=np.array(v,dtype=float)self.g=np.array(g)self.w=np.array([0,0,w],dtype=float)self.F_Magus=np.array([0,0,0],dtype=float)self.pos=np.array([0,0,0],dtype=float)self.x=[]self.y=[]self.z=[]self.w=np.array([0,0,w])def update(self):#frac=np.sqrt(self.v**2)self.F_Magus=-np.cross(self.v,self.w)*4.1e-4self.f=self.g +self.v**2*a/np.sqrt(self.v**2)+self.F_Magusself.v+=self.f*dtself.pos+=self.v*dt#print self.F_Magusdef fire(self):while (self.pos[2]>=0):self.update()self.x.append(self.pos[0])self.y.append(self.pos[1])self.z.append(self.pos[2])if (self.pos[2]<0):breakplt.plot(self.x,self.y,self.z,label="With Spin")class free_Cannon:def __init__(self,v):self.v=np.array(v,dtype=float)self.g=np.array(g)self.w=np.array([0,0,w],dtype=float)self.F_Magus=np.array([0,0,0],dtype=float)self.pos=np.array([0,0,0],dtype=float)self.x=[]self.y=[]self.z=[]self.w=np.array([0,0,w])def update(self):#frac=np.sqrt(self.v**2)#self.F_Magus=-np.cross(self.v,self.w)*4.1e-4self.f=self.g +self.v**2*a/np.sqrt(self.v**2)#+self.F_Magusself.v+=self.f*dtself.pos+=self.v*dt#print self.F_Magusdef fire(self):while (self.pos[2]>=0):self.update()self.x.append(self.pos[0])self.y.append(self.pos[1])self.z.append(self.pos[2])if (self.pos[2]<0):breakplt.plot(self.x,self.y,self.z,label="Without spin")O=Cannon([100,200,300])O.fire()CD=free_Cannon([100,200,300])CD.fire()plt.legend(loc="upper right")plt.show()

- 由上图的轨迹可以清晰地看出:在考虑棒球受到的Magus力作用下,棒球会产生一个“回旋”运动,类似于“香蕉球”。
*由此可知棒球运动中,棒球的旋转运动会对棒球的轨迹产生巨大影响。