向量场

限定名称: manim.mobject.vector\_field.VectorField

class VectorField(func, color=None, color_scheme=None, min_color_scheme_value=0, max_color_scheme_value=2, colors=[ManimColor('#236B8E'), ManimColor('#83C167'), ManimColor('#FFFF00'), ManimColor('#FC6255')], **kwargs)[来源]

基础类: VGroup

一个向量场。

矢量场基于一个定义每个位置矢量的函数。默认情况下,此类不包含任何可见元素,但提供了沿矢量场移动其他Mobject的方法。

Parameters:
  • func (Callable[[np.ndarray], np.ndarray]) – 定义VectorField中每个位置变化速率的函数。

  • color (ParsableManimColor | None) – 矢量场的颜色。如果设置,则禁用基于位置的着色。

  • color_scheme (Callable[[np.ndarray], float] | None) – 一个将向量映射到单个值的函数。该值给出了使用min_color_scheme_valuemax_color_scheme_valuecolors定义的颜色渐变中的位置。

  • min_color_scheme_value (float) – color_scheme 函数的值将被映射到 colors 中的第一个颜色。较低的值也会导致渐变的第一个颜色。

  • max_color_scheme_value (float) – color_scheme 函数的值,将被映射到 colors 中的最后一个颜色。较高的值也会导致渐变的最后一个颜色。

  • colors (Sequence[ParsableManimColor]) – 定义向量场颜色渐变的颜色。

  • kwargs – 传递给VGroup构造函数的额外参数

方法

fit_to_coordinate_system

缩放向量场以适应坐标系。

get_colored_background_image

生成一个显示矢量场的图像。

get_nudge_updater

获取一个更新函数,用于沿着向量场移动Mobject

get_vectorized_rgba_gradient_function

生成一个rgba的渐变作为numpy数组

nudge

沿着向量场轻轻推动一个Mobject

nudge_submobjects

沿着向量场对所有子对象施加一个微调。

scale_func

缩放一个向量场函数。

shift_func

平移一个向量场函数。

start_submobject_movement

开始沿着矢量场连续移动所有子对象。

stop_submobject_movement

停止使用start_submobject_movement()开始的连续移动。

属性

animate

用于动画化self的任何方法的应用。

animation_overrides

color

depth

mobject的深度。

fill_color

如果有多种颜色(用于渐变),则返回第一个颜色

height

mobject的高度。

n_points_per_curve

sheen_factor

stroke_color

width

mobject的宽度。

_original__init__(func, color=None, color_scheme=None, min_color_scheme_value=0, max_color_scheme_value=2, colors=[ManimColor('#236B8E'), ManimColor('#83C167'), ManimColor('#FFFF00'), ManimColor('#FC6255')], **kwargs)

初始化自身。有关准确的签名,请参阅 help(type(self))。

Parameters:
  • func (Callable[[np.ndarray], np.ndarray])

  • 颜色 (ParsableManimColor | )

  • color_scheme (可调用[[np.ndarray], float] | )

  • min_color_scheme_value (float)

  • max_color_scheme_value (float)

  • 颜色 (序列[可解析的Manim颜色])

fit_to_coordinate_system(coordinate_system)[来源]

缩放向量场以适应坐标系。

当向量场定义在不同于用于显示向量场的坐标系中时,此方法很有用。

此方法只能使用一次,因为它会转换每个向量的原点。

Parameters:

coordinate_system (CoordinateSystem) – 用于拟合矢量场的坐标系。

get_colored_background_image(sampling_rate=5)[source]

生成一个显示矢量场的图像。

每个位置的颜色是通过将该位置通过一系列步骤计算得出的: 计算该位置的向量场函数,使用self.color_scheme将该向量映射为单个值,最后使用颜色梯度从该值生成颜色。

Parameters:

sampling_rate (int) – 像素被包含在图像中的步长。较低的值会给出更准确的结果,但可能需要很长时间来计算。

Returns:

矢量场图像。

Return type:

图像.图像

get_nudge_updater(speed=1, pointwise=False)[source]

获取一个更新函数,用于沿着向量场移动Mobject

当与add_updater()一起使用时,mobject将沿着矢量场移动,其速度由矢量场的大小决定。

Parameters:
  • 速度 (float) – 在speed=1时,一个mobject每秒移动的距离等于其路径上向量场的大小。速度值会缩放此类mobject的速度。

  • 逐点 (布尔值) – 是否沿着矢量场移动对象。详情请参见 nudge()

Returns:

更新函数。

Return type:

可调用的[[Mobject, float], Mobject]

get_vectorized_rgba_gradient_function(start, end, colors)[source]

生成一个rgba的渐变作为numpy数组

Parameters:
Return type:

生成梯度的函数,表示为表示rgba值的numpy数组

nudge(mob, dt=1, substeps=1, pointwise=False)[来源]

沿着向量场轻轻推动一个Mobject

Parameters:
  • mob (Mobject) – 沿着矢量场移动的mobject

  • dt (float) – 一个标量,表示物体沿矢量场移动的量。 实际距离基于矢量场的大小。

  • substeps (int) – 整个微调被分成的步骤数量。较高的值会提供更精确的近似值。

  • 逐点 (布尔值) – 是否沿着矢量场移动对象。如果为False,矢量场将作用于给定Mobject的中心。如果为True,矢量场将作用于Mobject的各个点,可能会使其变形。

Returns:

这个向量场。

Return type:

VectorField

示例

示例:推动

from manim import *

class Nudging(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[1] / 2) * RIGHT + np.cos(pos[0] / 2) * UP
        vector_field = ArrowVectorField(
            func, x_range=[-7, 7, 1], y_range=[-4, 4, 1], length_func=lambda x: x / 2
        )
        self.add(vector_field)
        circle = Circle(radius=2).shift(LEFT)
        self.add(circle.copy().set_color(GRAY))
        dot = Dot().move_to(circle)

        vector_field.nudge(circle, -2, 60, True)
        vector_field.nudge(dot, -2, 60)

        circle.add_updater(vector_field.get_nudge_updater(pointwise=True))
        dot.add_updater(vector_field.get_nudge_updater())
        self.add(circle, dot)
        self.wait(6)
class Nudging(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[1] / 2) * RIGHT + np.cos(pos[0] / 2) * UP
        vector_field = ArrowVectorField(
            func, x_range=[-7, 7, 1], y_range=[-4, 4, 1], length_func=lambda x: x / 2
        )
        self.add(vector_field)
        circle = Circle(radius=2).shift(LEFT)
        self.add(circle.copy().set_color(GRAY))
        dot = Dot().move_to(circle)

        vector_field.nudge(circle, -2, 60, True)
        vector_field.nudge(dot, -2, 60)

        circle.add_updater(vector_field.get_nudge_updater(pointwise=True))
        dot.add_updater(vector_field.get_nudge_updater())
        self.add(circle, dot)
        self.wait(6)

nudge_submobjects(dt=1, substeps=1, pointwise=False)[来源]

沿着向量场对所有子对象施加一个微调。

Parameters:
  • dt (float) – 一个标量,表示物体沿矢量场移动的量。 实际距离基于矢量场的大小。

  • substeps (int) – 整个微调被分成的步骤数量。较高的值会提供更精确的近似值。

  • 逐点 (布尔值) – 是否沿着矢量场移动对象。详情请参见 nudge()

Returns:

这个向量场。

Return type:

VectorField

static scale_func(func, scalar)[source]

缩放一个向量场函数。

Parameters:
  • func (Callable[[ndarray], ndarray]) – 定义向量场的函数。

  • 标量 (浮点数) – 应用于向量场的标量。

Return type:

可调用[[ndarray], ndarray]

示例

示例:ScaleVectorFieldFunction

from manim import *

class ScaleVectorFieldFunction(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[1]) * RIGHT + np.cos(pos[0]) * UP
        vector_field = ArrowVectorField(func)
        self.add(vector_field)
        self.wait()

        func = VectorField.scale_func(func, 0.5)
        self.play(vector_field.animate.become(ArrowVectorField(func)))
        self.wait()
class ScaleVectorFieldFunction(Scene):
    def construct(self):
        func = lambda pos: np.sin(pos[1]) * RIGHT + np.cos(pos[0]) * UP
        vector_field = ArrowVectorField(func)
        self.add(vector_field)
        self.wait()

        func = VectorField.scale_func(func, 0.5)
        self.play(vector_field.animate.become(ArrowVectorField(func)))
        self.wait()

Returns:

缩放向量场函数。

Return type:

Callable[[np.ndarray], np.ndarray]

Parameters:
  • func (Callable[[ndarray], ndarray])

  • 标量 (浮点数)

static shift_func(func, shift_vector)[来源]

平移一个向量场函数。

Parameters:
  • func (Callable[[ndarray], ndarray]) – 定义向量场的函数。

  • shift_vector (ndarray) – 应用于矢量场的位移。

Returns:

平移向量场函数。

Return type:

Callable[[np.ndarray], np.ndarray]

start_submobject_movement(speed=1, pointwise=False)[source]

开始沿着矢量场连续移动所有子对象。

多次调用此方法将导致删除此方法创建的先前更新程序。

Parameters:
  • 速度 (浮点数) – 移动子对象的速度。详情请参见 get_nudge_updater()

  • 逐点 (布尔值) – 是否沿着矢量场移动对象。详情请参见 nudge()

Returns:

这个向量场。

Return type:

VectorField

stop_submobject_movement()[来源]

停止使用start_submobject_movement()开始的连续移动。

Returns:

这个向量场。

Return type:

VectorField