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_value、max_color_scheme_value 和 colors 定义的颜色渐变中的位置。
min_color_scheme_value (*float*) – 要映射到 colors 中第一个颜色的 color_scheme 函数的值。较低的值也会导致渐变显示第一个颜色。
max_color_scheme_value (*float*) – 要映射到 colors 中最后一个颜色的 color_scheme 函数的值。较高的值也会导致渐变显示最后一个颜色。
colors (*Sequence*[[ParsableManimColor]]) – 定义向量场颜色渐变的颜色列表。
kwargs – 传递给
VGroup
构造函数的额外参数。
方法
缩放向量场以适应坐标系。
生成显示向量场的图像。
获取一个更新函数,用于沿向量场移动
Mobject
。生成一个 numpy 数组形式的 RGBA 渐变
沿向量场微推一个
Mobject
。将沿向量场的微推应用于所有子对象。
缩放向量场函数。
平移向量场函数。
开始沿向量场连续移动所有子对象。
停止使用
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 将沿向量场移动,其速度由向量场的大小决定。
- get_vectorized_rgba_gradient_function(start, end, colors)[source]¶
生成一个 numpy 数组形式的 RGBA 渐变
- 参数:
start (*float*) – 用于
inverse_interpolate()
处反向插值的起始值end (*float*) – 用于
inverse_interpolate()
处反向插值的结束值colors (*Iterable*[[ParsableManimColor]]) – 用于生成渐变的颜色列表
- 返回类型:
将渐变生成为表示 RGBA 值的 numpy 数组的函数
- nudge(mob, dt=1, substeps=1, pointwise=False)[source]¶
沿向量场微推一个
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)
- 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()
开始的连续移动。- 返回:
此向量场。
- 返回类型: