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