Numbers 是一个用于表示和处理数值的基础类,通常在数学可视化和动画中使用。它包含以下功能:
- 数值表示: 可以表示整数、小数等基本数值类型。
- 动态更新: 允许数值随时间变化,通常结合动画效果使用。
- 格式化输出: 支持自定义输出格式,如指定小数位数、文本颜色和字体大小。
应用场景:
- 在数学动画中展示计算结果。
- 创建动态交互式模拟,实时更新数值。
- 可视化数据分析结果,增强观众理解。
Numbers 类的使用 在数学、物理等领域的教学和演示中尤为重要,可以帮助直观地传达抽象概念。
1.DecimalNumber: 用于显示小数值,支持自定义小数位数、颜色和字体大小。
DecimalNumber
用于在动画中显示一个小数值,支持多种配置选项。构造函数如下:
python
DecimalNumber(number=0, num_decimal_places=2, mob_class=<class
'manim.mobject.text.tex_mobject.MathTex'>, include_sign=False, group_with_commas=True,
digit_buff_per_font_unit=0.001, show_ellipsis=False, unit=None, unit_buff_per_font_unit=0,
include_background_rectangle=False, edge_to_fix=array([-1., 0., 0.]), font_size=48,
stroke_width=0, fill_opacity=1.0, **kwargs)
以下是各参数的简要说明:
各参数的解释
- number: 要显示的小数值,默认为0。
- num_decimal_places: 小数位数,默认为2。
- mob_class : 使用的对象类,默认为
MathTex
,用于显示数学文本。 - include_sign: 是否包括正负号,默认为False。
- group_with_commas: 是否以逗号分隔大数字部分,默认为True。
- digit_buff_per_font_unit: 字符间距的缓冲量,默认为0.001。
- show_ellipsis: 是否显示省略号,默认为False。
- unit: 可选的单位,默认为None。
- unit_buff_per_font_unit: 单位与数字之间的缓冲量,默认为0。
- include_background_rectangle: 是否包含背景矩形,默认为False。
- edge_to_fix : 修正边缘,默认为
array([-1., 0., 0.])
,用于调整位置。 - font_size: 字体大小,默认为48。
- stroke_width: 边框宽度,默认为0(无边框)。
- fill_opacity: 填充不透明度,默认为1.0(完全不透明)。
- kwargs: 其他可选参数。
示例代码
以下是一个使用所有参数的代码示例,展示如何创建一个DecimalNumber
对象并配置其属性:
python
from manim import *
class DecimalNumberExample(Scene):
def construct(self):
# 创建一个DecimalNumber对象,初始值为12345.678
decimal_number = DecimalNumber(
number=12345.678, # 显示的小数值
num_decimal_places=5, # 保留3位小数
mob_class=MathTex, # 使用MathTex显示数字
include_sign=True, # 包含正负号
group_with_commas=True, # 使用逗号分隔大数字
digit_buff_per_font_unit=0.005, # 字符间距的缓冲量
show_ellipsis=False, # 不显示省略号
unit="m/s", # 设置单位为米每秒
unit_buff_per_font_unit=0.02, # 单位与数字之间的缓冲量
include_background_rectangle=True, # 包含背景矩形
edge_to_fix=np.array([-1., 0., 0.]), # 修正边缘位置
font_size=48, # 设置字体大小
stroke_width=2, # 设置边框宽度
fill_opacity=0.7, # 设置填充不透明度
)
# 添加到场景
self.add(decimal_number)
# 设置背景矩形的颜色和透明度
background_rectangle = SurroundingRectangle(decimal_number, buff=0.1)
background_rectangle.set_fill(BLUE, opacity=0.3) # 设置背景颜色为蓝色,透明度为0.3
self.add(background_rectangle) # 将背景矩形添加到场景
# 动画将数值移动到原点位置
self.play(decimal_number.animate.move_to(ORIGIN))
示例2:
python
class MovingSquareWithUpdaters(Scene):
def construct(self):
self.add(NumberPlane())
decimal = DecimalNumber(
number=2.678, # 显示的小数值
num_decimal_places=5, # 保留3位小数
mob_class=MathTex, # 使用MathTex显示数字
include_sign=True, # 包含正负号
group_with_commas=True, # 使用逗号分隔大数字
digit_buff_per_font_unit=0.005, # 字符间距的缓冲量
show_ellipsis=False, # 不显示省略号
unit="m/s", # 设置单位为米每秒
unit_buff_per_font_unit=0.002, # 单位与数字之间的缓冲量
include_background_rectangle=True, # 包含背景矩形
edge_to_fix=np.array([-1., 0., 0.]), # 修正边缘位置
font_size=48, # 设置字体大小
stroke_width=2, # 设置边框宽度
fill_opacity=0.25, # 设置填充不透明度
)
square = Dot(radius=0.1,color=RED).to_edge(UP+LEFT)#创建一个方形并将其移动到画面的顶部边缘 (UP)。
decimal.add_updater(lambda d: d.next_to(square, RIGHT))
decimal.add_updater(lambda d: d.set_value(square.get_center()[1]))
#第一个更新器使得数字总是显示在方形的右侧。
#第二个更新器将数字设置为方形的 Y 坐标值(方形当前位置的高度)。这意味着方形的高度变化时,数字的值会随之更新。
self.add(square, decimal)#将方形和数字添加到场景中。
self.play(
square.animate.to_edge(DOWN),
rate_func=there_and_back,
run_time=5,
#将方形动画移动到画面的底部边缘 (DOWN),动画持续时间为 5 秒。
#rate_func=there_and_back 指定动画先向下运动再回到原处。
)
self.wait()
MovingSquareWithUpdaters
2.动态更新: 允许数值随时间变化
Integer: 用于显示整数值,支持自定义颜色和字体大小。动态更新:,允许数值随时间变化,通常结合动画效果使用。Integer
是 Manim 中用于显示整数的类,通常用来创建动态展示数字的对象。
python
Integer(number=0, num_decimal_places=0, **kwargs)
以下是对 Integer
类及其参数的解释:
构造函数
Integer(number=0, num_decimal_places=0, **kwargs)
参数解释
-
number:
- 类型:
int
- 默认值:
0
- 描述:初始化时显示的整数值。可以传入任何整数作为起始值。
- 类型:
-
num_decimal_places:
- 类型:
int
- 默认值:
0
- 描述:用于设置数字显示的小数位数。虽然这个参数在
Integer
中通常设置为0
,但它的存在可用于格式化目的,确保对呈现效果的控制。
- 类型:
-
kwargs:
- 描述:用于传递额外的关键字参数。例如,这些参数可以控制数字的颜色、大小、位置等视觉属性,具体取决于使用中支持的其他参数。
用法示例
当你使用 Integer
类时,可以创建一个简单的整数对象,例如:
number_display = Integer(number=5, num_decimal_places=0)
这样你就得到了一个显示数字 5 的 Integer
对象,且不会显示任何小数部分。
示例:
python
class IntegerExample(Scene):
def construct(self):
self.add(Integer(number=2.5).set_color(ORANGE).scale(2.5).set_x(-0.5).set_y(0.8))
self.add(Integer(number=3.14159, show_ellipsis=True).set_x(3).set_y(3.3).scale(3.14159))
self.add(Integer(number=42).set_x(2.5).set_y(-2.3).set_color_by_gradient(BLUE, TEAL).scale(1.7))
self.add(Integer(number=6.28).set_x(-1.5).set_y(-2).set_color(YELLOW).scale(1.4))
3.创建和展示变量
Variable
是 Manim 中用于创建和展示变量的类,能够动态显示数值并与动画中的其他对象互动。以下是对 Variable
函数及其参数的详细解释:
构造函数
Variable(var, label,
var_type=<class 'manim.mobject.text.numbers.DecimalNumber'>,
num_decimal_places=2, **kwargs)
参数解释
-
var:
- 类型:
float
或int
- 描述:要展示的变量的数值。这个值可以在动画中动态更新,反映变量的当前状态。
- 类型:
-
label:
- 类型:
str
- 描述:与变量关联的标签,用于在显示时标识变量的名称。例如,如果
var
是速度,可以将label
设置为"v"
,以更好地理解它所代表的物理量。
- 类型:
-
var_type:
- 类型:类(默认为
DecimalNumber
) - 描述:指定要用于显示变量的类型。
DecimalNumber
用于显示浮点数,可以使用其他类型(如Integer
)进行替换,以符合具体需求。
- 类型:类(默认为
-
num_decimal_places:
- 类型:
int
- 默认值:
2
- 描述:设置显示的数字的小数位数。这是一个格式化参数,可以根据需要调整,以控制数字的呈现格式。
- 类型:
-
kwargs:
- 描述:用于传递额外的关键字参数,类似于
Integer
的用法。可用于控制变量的颜色、字体、大小等视觉属性。
- 描述:用于传递额外的关键字参数,类似于
用法示例
创建一个变量显示的实例:
speed = Variable(var=10, label="v",
var_type=DecimalNumber, num_decimal_places=2)
这段代码创建了一个名为 speed
的 Variable
对象,显示的初始值为 10
,标签为 $v$
(速度),使用浮点数格式,并显示两个小数位。
python
from manim import *
class VariablesWithValueTracker(Scene):
def construct(self):
var = 0.5
on_screen_var = Variable(var, Text("var"), num_decimal_places=3)
on_screen_var.label.set_color(RED)
on_screen_var.value.set_color(GREEN)
self.play(Write(on_screen_var))
self.wait()
var_tracker = on_screen_var.tracker
var = 10.5
self.play(var_tracker.animate.set_value(var))
self.wait()
int_var = 0
on_screen_int_var = Variable(
int_var, Text("int_var"), var_type=Integer
).next_to(on_screen_var, DOWN)
on_screen_int_var.label.set_color(RED)
on_screen_int_var.value.set_color(GREEN)
self.play(Write(on_screen_int_var))
self.wait()
var_tracker = on_screen_int_var.tracker
var = 10.5
self.play(var_tracker.animate.set_value(var))
self.wait()
subscript_label_var = 10
on_screen_subscript_var = Variable(subscript_label_var, "{a}_{i}").next_to(
on_screen_int_var, DOWN
)
self.play(Write(on_screen_subscript_var))
self.wait()
示例2:
python
class VariableExample(Scene):
def construct(self):
start = 2.0
x_var = Variable(start, 'x', num_decimal_places=3)
sqr_var = Variable(start**2, 'x^4', num_decimal_places=3)
Group(x_var, sqr_var).arrange(DOWN)
sqr_var.add_updater(lambda v: v.tracker.set_value(x_var.tracker.get_value()**4))
self.add(x_var, sqr_var)
self.play(x_var.tracker.animate.set_value(5), run_time=2, rate_func=linear)
self.wait(0.1)
|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |
| | |