向量场¶
限定名称: 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_value、max_color_scheme_value和colors定义的颜色渐变中的位置。
min_color_scheme_value (float) – color_scheme 函数的值将被映射到 colors 中的第一个颜色。较低的值也会导致渐变的第一个颜色。
max_color_scheme_value (float) – color_scheme 函数的值,将被映射到 colors 中的最后一个颜色。较高的值也会导致渐变的最后一个颜色。
colors (Sequence[ParsableManimColor]) – 定义向量场颜色渐变的颜色。
kwargs – 传递给
VGroup构造函数的额外参数
方法
缩放向量场以适应坐标系。
生成一个显示矢量场的图像。
获取一个更新函数,用于沿着向量场移动
Mobject。生成一个rgba的渐变作为numpy数组
沿着向量场轻轻推动一个
Mobject。沿着向量场对所有子对象施加一个微调。
缩放一个向量场函数。
平移一个向量场函数。
开始沿着矢量场连续移动所有子对象。
停止使用
start_submobject_movement()开始的连续移动。属性
animate用于动画化
self的任何方法的应用。animation_overridescolordepthmobject的深度。
fill_color如果有多种颜色(用于渐变),则返回第一个颜色
heightmobject的高度。
n_points_per_curvesheen_factorstroke_colorwidthmobject的宽度。
- _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将沿着矢量场移动,其速度由矢量场的大小决定。
- get_vectorized_rgba_gradient_function(start, end, colors)[source]¶
生成一个rgba的渐变作为numpy数组
- Parameters:
开始 (浮点数) – 用于在
inverse_interpolate()中进行逆插值的起始值end (float) – 用于在
inverse_interpolate()中进行逆插值的结束值colors (Iterable[ParsableManimColor]) – 用于生成渐变的颜色列表
- Return type:
生成梯度的函数,表示为表示rgba值的numpy数组
- nudge(mob, dt=1, substeps=1, pointwise=False)[来源]¶
沿着向量场轻轻推动一个
Mobject。- Parameters:
- Returns:
这个向量场。
- Return type:
示例
示例:推动 ¶
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:
- 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:
- stop_submobject_movement()[来源]¶
停止使用
start_submobject_movement()开始的连续移动。- Returns:
这个向量场。
- Return type: