Exercise_09 :chapt 3: 台球的混沌问题

2016-11-21  本文已影响0人  XVVUII

Abstract


  • I have a ball.
    ~~I have a table. ~~
    Ahhh...
    Billi-ard!
  • ~~I have a Python. ~~
    ~~I have a H.Cai. ~~
    Ahhhhhhh...
    Chaoooooooos!
  • ~Billi-ard~~
    Chaoooooooos
    Ahhhhhhh.........
    Ahhhhhhhhhh.........
    Ahhhhhhhhhhhhhhhh.........

Background


What a Weird Shape!

入射与反射角相等

...
    x_next = self.x[-1] + self.vx * self.dt
    y_next = self.y[-1] + self.vy * self.dt
# 下一个点没有越界
if x_next ** 2 + (abs(y_next) - self.alpha) ** 2 < 1:
    self.x.append(x_next)
    self.y.append(y_next)
if abs(self.y[-1]) < 0.001:
    self.ps_vx.append(self.vx)
    self.ps_x.append(self.x[-1])
# 下个点成功越界,计算碰撞点并计算碰撞后速度
else:
    divisor = 2
# 往回走一点点
while divisor <= 2048:
    x_next -= (self.vx * self.dt / divisor)
    y_next -= (self.vy * self.dt / divisor)
# 当下个点与边界距离在误差允许范围内时,跳出 loop
if abs(x_next ** 2 + (abs(y_next) - self.alpha) ** 2 - 1) < 0.00001:
    divisor = 10000
# 如果刚刚往回走过了,撤销那一步,下一次走得再小一点
...
我可以盯着它看上一天.gif 冲啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊.gif

Pure Code


Acknowledgements!

上一篇下一篇

猜你喜欢

热点阅读