diff --git a/2022/python/anim.py b/2022/python/anim.py new file mode 100644 index 0000000..041e43f --- /dev/null +++ b/2022/python/anim.py @@ -0,0 +1,49 @@ +from matrix import get_size, pmx +import imageio +import matplotlib.pyplot as plt +import numpy as np +from copy import deepcopy + + +class Animate: + def __init__(self, mx, day="CHANGEME"): + self.mx= mx + _size = get_size(mx) + self.height = _size[0] + self.width = _size[1] + self.day = day + self.frames = [deepcopy(mx)] + + def add_frame(self, frame): + self.frames.append(deepcopy(frame)) + + def print(self): + for f in self.frames: + pmx(f) + print("-") + + + def animate(self, save=False, or_frames=False): + last_file = 0 + for f_idx, frame in enumerate(self.frames): + current = np.zeros_like(self.mx) + for y, row in enumerate(frame): + for x, col in enumerate(row): + current[y][x] = frame[y][x] + pmx(current) + + fig, ax = plt.subplots() + ax.imshow(current, cmap=plt.cm.gray) + ax.axis("off") + if save: + plt.savefig(f"{self.day}/{f_idx:03}.png") + plt.close() + + with imageio.get_writer(f"{self.day}/day{self.day}.gif", mode="I") as writer: + names = [f"{self.day}/{x:03}.png" for x in range(len(self.frames))] + for filename in names: + try: + image = imageio.imread(filename) + writer.append_data(image) + except FileNotFoundError: + pass