[关闭]
@MitoY 2016-05-07T10:48:01.000000Z 字数 1877 阅读 813

第七次作业

作者:敬雷

L1

2.19题


代码在这里

空气阻力为:


其中各参数为,

为:


对棒球的速度范围(50 - 110),

注意:以上所有公式中的 均表示球的速度而非风相对于球的速度,并且假定空气静止。

程序的伪代码为:

  1. def update(dt):
  2. pos += vel * dt
  3. vel += (F_drag / m + F_M / m + gravity) * dt
  4. dt = 1 #s
  5. for i in range(1000):
  6. update(dt) # +1s

其中posvel等用numpy中的array表示,好处是各种矢量运算很方便。


取棒球出射速度为;自转角速度应该与出射方向垂直,取为;出射位置。对分别为0,2000,4000 作计算得到轨迹,作出轨迹图和在坐标面的投影如下:
hw7_1
hw7_2

可以看出,球偏转得相当厉害。


如果取自转角速度为,其他条件不变,那么得到轨迹图如下:
hw7_3

可以看出,球没有往侧面偏转,而是飞得更高或更矮了。

L2

使用vpython可视化炮弹发射或者棒球运动


并没有录制动态图的条件,那就放代码好了。
示例代码如下:(其中Cannon就是本文开头所放的那个代码)

  1. import Cannon
  2. import visual as vp
  3. import math
  4. ground = vp.box(pos = (0,0,0), size = (60, 140, 1), color = (.2,.3,.2))
  5. init_vel = [0,40,30]
  6. omega = 2000 / 60.0 * 2 * math.pi
  7. saki = Cannon.Cannon(init_vel, Cannon.force, pos = (0, -70, 0), spin = [0, -omega*3/5, omega*4/5])
  8. saki_ball = vp.sphere(pos = saki.get_pos(), radius = 0.5, color = vp.color.cyan)
  9. saki_ball.trail = vp.curve(color=saki_ball.color)
  10. vscale = 0.115
  11. varr = vp.arrow(pos=saki_ball.pos, axis=vscale * saki.get_vel(), color=vp.color.yellow)
  12. delta_t = 0.01
  13. t = 0
  14. while t < 20:
  15. vp.rate(100) # This specifies that the while loop will not be executed more than 100 times per second
  16. saki.update(delta_t)
  17. if saki.get_pos()[2] < 0: break
  18. saki_ball.pos = saki.get_pos()
  19. t += delta_t
  20. varr.axis = vscale * saki.get_vel()
  21. varr.pos = saki_ball.pos
  22. saki_ball.trail.append(po saki_ball.pos)

效果如下:
hw7_4

嘛,勉勉强强。

致谢

.
..
.
..
.
..

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注