【问题标题】:stopping animation - Conway's game of life停止动画——康威的人生游戏
【发布时间】:2018-01-21 01:18:33
【问题描述】:

这是康威生命游戏的代码,我在两种相互协作的细胞之间制作。 我想在 10 代之后停止动画。 我尝试使用动画的“帧”,但动画并没有停止。 我如何在 10 个基因后停止它? 代码如下:

import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.animation as animation
import random

N = 100
OnTypeOne = 10
OnTypeTwo= -10
OFF = 0
vals = [OnTypeOne , OnTypeTwo, OFF]


# populate grid with random on/off - more off than on
grid = np.random.choice(vals, N*N, p=[0.2,0.2, 0.6]).reshape(N, N)

def update(data):
  global grid
  x=0
  # copy grid since we require 8 neighbors for calculation
  # and we go line by line 
  newGrid = grid.copy()
  for i in range(N):
    for j in range(N):
      # compute 8-neghbor sum 
      # using toroidal boundary conditions - x and y wrap around 
      # so that the simulaton takes place on a toroidal surface.
      total = (abs (grid[i, (j-1)%N])+ abs (grid[i, (j+1)%N]) + 
           abs (grid[(i-1)%N, j]) + abs (grid[(i+1)%N, j]) + 
           abs (grid[(i-1)%N, (j-1)%N]) + abs (grid[(i-1)%N, (j+1)%N]) + 
           abs (grid[(i+1)%N, (j-1)%N]) + abs (grid[(i+1)%N, (j+1)%N]))/10
      # apply Conway's rules
      if grid[i, j]  == OnTypeOne:
        if (total < 2) or (total > 3):
          newGrid[i, j] = OFF
        if (total==3):
           newGrid[i, j] = OnTypeOne
      if  grid[i, j]  == OnTypeTwo:
          if (total < 2) or (total > 3):
              newGrid[i, j] = OFF
          if (total==3):
              newGrid[i, j] = OnTypeTwo
      if grid[i, j]  == OFF:
          if total==3:
              x=random.random()
              if x<=0.5:
                  newGrid[i,j]=OnTypeOne
              elif x>0.5:
                  newGrid[i,j]=OnTypeTwo
          if total!=3:
              newGrid[i,j]=OFF




  # update data
  mat.set_data(newGrid)
  grid = newGrid
  return [mat]

# set up animation
fig, ax = plt.subplots()
mat = ax.matshow(grid)

ani = animation.FuncAnimation(fig, update, frames=10, 
interval=50,save_count=50
                         , blit=True )

 plt.show()

【问题讨论】:

    标签: python numpy animation matplotlib


    【解决方案1】:

    你需要添加参数repeat=False来告诉动画不要在10帧后重新开始,

    ani = animation.FuncAnimation(fig, update, frames=10, 
                                  interval=50, save_count=50, blit=True, repeat=False )
    

    【讨论】:

      猜你喜欢
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多