VectorField

限定名称: 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)[source]

基类: VGroup

一个向量场。

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

参数:
  • 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*) – 要映射到 colors 中第一个颜色的 color_scheme 函数的值。较低的值也会导致渐变显示第一个颜色。

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

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

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

方法

fit_to_coordinate_system

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

get_colored_background_image

生成显示向量场的图像。

get_nudge_updater

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

get_vectorized_rgba_gradient_function

生成一个 numpy 数组形式的 RGBA 渐变

nudge

沿向量场微推一个 Mobject

nudge_submobjects

将沿向量场的微推应用于所有子对象。

scale_func

缩放向量场函数。

shift_func

平移向量场函数。

start_submobject_movement

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

stop_submobject_movement

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

属性

animate (动画)

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

animation_overrides (动画覆盖)

颜色

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))。

参数:
  • func (*Callable*[[*np.ndarray*], *np.ndarray*])

  • color (ParsableManimColor *|* *None*)

  • color_scheme (*Callable*[[*np.ndarray*], *float*] *|* *None*)

  • min_color_scheme_value (*float*)

  • max_color_scheme_value (*float*)

  • colors (*Sequence*[[ParsableManimColor]])

fit_to_coordinate_system(coordinate_system)[source]

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

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

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

参数:

coordinate_system (CoordinateSystem) – 要使向量场适应的坐标系。

get_colored_background_image(sampling_rate=5)[source]

生成显示向量场的图像。

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

参数:

sampling_rate (*int*) – 像素包含在图像中的步长。值越低,结果越准确,但计算时间可能较长。

返回:

向量场图像。

返回类型:

Image.Image

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

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

add_updater() 一起使用时,Mobject 将沿向量场移动,其速度由向量场的大小决定。

参数:
  • speed (*float*) – 当 speed=1 时,Mobject 每秒移动的距离等于其路径上向量场的大小。该速度值将缩放 Mobject 的速度。

  • pointwise (*bool*) – 是否沿向量场移动 Mobject。详见 nudge()

返回:

更新函数。

返回类型:

Callable[[Mobject, float], Mobject]

get_vectorized_rgba_gradient_function(start, end, colors)[source]

生成一个 numpy 数组形式的 RGBA 渐变

参数:
返回类型:

将渐变生成为表示 RGBA 值的 numpy 数组的函数

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

沿向量场微推一个 Mobject

参数:
  • mob (Mobject) – 沿向量场移动的 Mobject

  • dt (*float*) – Mobject 沿向量场移动量的标量。实际距离基于向量场的大小。

  • substeps (*int*) – 整个微推被分割成的步数。值越高,近似值越准确。

  • pointwise (*bool*) – 是否沿向量场移动 Mobject。如果为 False,向量场将作用于给定 Mobject 的中心。如果为 True,向量场将作用于 Mobject 各个点的点上,可能会使其变形。

返回:

此向量场。

返回类型:

向量场

示例

示例: 微推

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)[source]

将沿向量场的微推应用于所有子对象。

参数:
  • dt (*float*) – Mobject 沿向量场移动量的标量。实际距离基于向量场的大小。

  • substeps (*int*) – 整个微推被分割成的步数。值越高,近似值越准确。

  • pointwise (*bool*) – 是否沿向量场移动 Mobject。详见 nudge()

返回:

此向量场。

返回类型:

向量场

static scale_func(func, scalar)[source]

缩放向量场函数。

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

  • scalar (*float*) – 应用于向量场的标量。

返回类型:

*Callable*[[*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()

返回:

缩放后的向量场函数。

返回类型:

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

参数:
  • func (*Callable*[[*ndarray*], *ndarray*])

  • scalar (*float*)

static shift_func(func, shift_vector)[source]

平移向量场函数。

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

  • shift_vector (*ndarray*) – 应用于向量场的平移量。

返回:

平移后的向量场函数。

返回类型:

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

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

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

多次调用此方法将导致移除此方法创建的先前更新器。

参数:
  • speed (*float*) – 移动子对象的速度。详见 get_nudge_updater()

  • pointwise (*bool*) – 是否沿向量场移动 Mobject。详见 nudge()

返回:

此向量场。

返回类型:

向量场

stop_submobject_movement()[source]

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

返回:

此向量场。

返回类型:

向量场