[关闭]
@SuperMan 2016-06-14T04:33:41.000000Z 字数 2331 阅读 886

计算物理第七次作业

作者:夏海峰 学号:2013301020094

摘要

  • 本次主要解决棒球的运动问题。由于棒球质量较小,因此空气阻力对棒球的运动会产生巨大影响。
  • 棒球运动,出了做三维的平动外,还会有让自身的旋转,产生Magus力对自身运动产生影响。

正文

  • 一、基本原理
    (1)棒球的运动方程:


    (2)Magus力的计算公式:

    (3)Euler法具体计算步骤::






    由上述公式可知,只要知道了前一步棒球的状态,那么棒球的下一个状态就可以由上述欧拉法的计算公式得到。
    计算得到棒球的平面内飞行轨迹如图所示:
    Photo
    3D
    程序
  1. import numpy as np
  2. import pylab as plt
  3. import matplotlib as mpl
  4. from mpl_toolkits.mplot3d import Axes3D
  5. g=[0,0,-9.8]
  6. a=1e-5
  7. dt=0.1
  8. w=2000/60
  9. mpl.rcParams['legend.fontsize'] = 10
  10. fig = plt.figure()
  11. ax = fig.gca(projection='3d')
  12. class Cannon:
  13. def __init__(self,v):
  14. self.v=np.array(v,dtype=float)
  15. self.g=np.array(g)
  16. self.w=np.array([0,0,w],dtype=float)
  17. self.F_Magus=np.array([0,0,0],dtype=float)
  18. self.pos=np.array([0,0,0],dtype=float)
  19. self.x=[]
  20. self.y=[]
  21. self.z=[]
  22. self.w=np.array([0,0,w])
  23. def update(self):
  24. #frac=np.sqrt(self.v**2)
  25. self.F_Magus=-np.cross(self.v,self.w)*4.1e-4
  26. self.f=self.g +self.v**2*a/np.sqrt(self.v**2)+self.F_Magus
  27. self.v+=self.f*dt
  28. self.pos+=self.v*dt
  29. #print self.F_Magus
  30. def fire(self):
  31. while (self.pos[2]>=0):
  32. self.update()
  33. self.x.append(self.pos[0])
  34. self.y.append(self.pos[1])
  35. self.z.append(self.pos[2])
  36. if (self.pos[2]<0):
  37. break
  38. plt.plot(self.x,self.y,self.z,label="With Spin")
  39. class free_Cannon:
  40. def __init__(self,v):
  41. self.v=np.array(v,dtype=float)
  42. self.g=np.array(g)
  43. self.w=np.array([0,0,w],dtype=float)
  44. self.F_Magus=np.array([0,0,0],dtype=float)
  45. self.pos=np.array([0,0,0],dtype=float)
  46. self.x=[]
  47. self.y=[]
  48. self.z=[]
  49. self.w=np.array([0,0,w])
  50. def update(self):
  51. #frac=np.sqrt(self.v**2)
  52. #self.F_Magus=-np.cross(self.v,self.w)*4.1e-4
  53. self.f=self.g +self.v**2*a/np.sqrt(self.v**2)#+self.F_Magus
  54. self.v+=self.f*dt
  55. self.pos+=self.v*dt
  56. #print self.F_Magus
  57. def fire(self):
  58. while (self.pos[2]>=0):
  59. self.update()
  60. self.x.append(self.pos[0])
  61. self.y.append(self.pos[1])
  62. self.z.append(self.pos[2])
  63. if (self.pos[2]<0):
  64. break
  65. plt.plot(self.x,self.y,self.z,label="Without spin")
  66. O=Cannon([100,200,300])
  67. O.fire()
  68. CD=free_Cannon([100,200,300])
  69. CD.fire()
  70. plt.legend(loc="upper right")
  71. plt.show()

Photo2
photo

  • 由上图的轨迹可以清晰地看出:在考虑棒球受到的Magus力作用下,棒球会产生一个“回旋”运动,类似于“香蕉球”。
    *由此可知棒球运动中,棒球的旋转运动会对棒球的轨迹产生巨大影响。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注