使用 Manim 同时向不同方向移动 N 个对象

Shifting N objects with Manim at the same time in different directions

我有一个可变随机长度的点列表,我希望能够独立但同时对这些对象应用变换(在本例中为移位)。

list = [Dot(), Dot() ...] # Variable length

我正在使用 3blue1brown https://github.com/3b1b/manim 的 Manim 库。 请注意,其他相关帖子无法解决我的问题,因为它们只能处理固定数量的对象(点)。

不要用list,它是保留字,用VGroup来包含对象:

list_dots = VGroup(*[Dot() for _ in range(5)]) # 5 dots vgroup
# this is the same as:
# list_dots = VGroup(Dot(),Dot(),Dot(),Dot(),Dot())
# See 'list comprehension python' in google
list_dots.arrange(RIGHT)
list_dots.set_color(RED)
list_dots.shift(UP)

作为示例,此 reddit post 中的以下代码解决了问题:

import numpy as np

class DotsMoving(Scene):
    def construct(self):
        dots = [Dot() for i in range(5)]
        directions = [np.random.randn(3) for dot in dots]
        self.add(*dots) # It isn't absolutely necessary
        animations = [ApplyMethod(dot.shift,direction) for dot,direction in zip(dots,directions)]
        self.play(*animations) # * -> unpacks the list animations

特别感谢u/Xorlium