欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > python实现动态数字的显示和变化

python实现动态数字的显示和变化

2025/9/20 10:40:27 来源:https://blog.csdn.net/qq_45449625/article/details/141224289  浏览:    关键词:python实现动态数字的显示和变化

Numbers 是一个用于表示和处理数值的基础类,通常在数学可视化和动画中使用。它包含以下功能:

  1. 数值表示: 可以表示整数、小数等基本数值类型。
  2. 动态更新: 允许数值随时间变化,通常结合动画效果使用。
  3. 格式化输出: 支持自定义输出格式,如指定小数位数、文本颜色和字体大小。

应用场景:

  • 在数学动画中展示计算结果。
  • 创建动态交互式模拟,实时更新数值。
  • 可视化数据分析结果,增强观众理解。

Numbers 类的使用 在数学、物理等领域的教学和演示中尤为重要,可以帮助直观地传达抽象概念。

1.DecimalNumber: 用于显示小数值,支持自定义小数位数、颜色和字体大小。

 DecimalNumber 用于在动画中显示一个小数值,支持多种配置选项。构造函数如下:

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对象并配置其属性:

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:

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 中用于显示整数的类,通常用来创建动态展示数字的对象。

Integer(number=0, num_decimal_places=0, **kwargs)

以下是对 Integer 类及其参数的解释:

构造函数

Integer(number=0, num_decimal_places=0, **kwargs) 
参数解释
  1. number:

    • 类型:int
    • 默认值:0
    • 描述:初始化时显示的整数值。可以传入任何整数作为起始值。
  2. num_decimal_places:

    • 类型:int
    • 默认值:0
    • 描述:用于设置数字显示的小数位数。虽然这个参数在 Integer 中通常设置为 0,但它的存在可用于格式化目的,确保对呈现效果的控制。
  3. kwargs:

    • 描述:用于传递额外的关键字参数。例如,这些参数可以控制数字的颜色、大小、位置等视觉属性,具体取决于使用中支持的其他参数。
用法示例

当你使用 Integer 类时,可以创建一个简单的整数对象,例如:

number_display = Integer(number=5, num_decimal_places=0) 

这样你就得到了一个显示数字 5 的 Integer 对象,且不会显示任何小数部分。

示例: 
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) 

参数解释

  1. var:

    • 类型:float 或 int
    • 描述:要展示的变量的数值。这个值可以在动画中动态更新,反映变量的当前状态。
  2. label:

    • 类型:str
    • 描述:与变量关联的标签,用于在显示时标识变量的名称。例如,如果 var 是速度,可以将 label 设置为 "v",以更好地理解它所代表的物理量。
  3. var_type:

    • 类型:类(默认为 DecimalNumber
    • 描述:指定要用于显示变量的类型。DecimalNumber 用于显示浮点数,可以使用其他类型(如 Integer)进行替换,以符合具体需求。
  4. num_decimal_places:

    • 类型:int
    • 默认值:2
    • 描述:设置显示的数字的小数位数。这是一个格式化参数,可以根据需要调整,以控制数字的呈现格式。
  5. kwargs:

    • 描述:用于传递额外的关键字参数,类似于 Integer 的用法。可用于控制变量的颜色、字体、大小等视觉属性。

用法示例

创建一个变量显示的实例:

speed = Variable(var=10, label="v",var_type=DecimalNumber, num_decimal_places=2) 

这段代码创建了一个名为 speed 的 Variable 对象,显示的初始值为 10,标签为 $v$(速度),使用浮点数格式,并显示两个小数位。

from manim import *class VariablesWithValueTracker(Scene):def construct(self):var = 0.5on_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.trackervar = 10.5self.play(var_tracker.animate.set_value(var))self.wait()int_var = 0on_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.trackervar = 10.5self.play(var_tracker.animate.set_value(var))self.wait()subscript_label_var = 10on_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: 

class VariableExample(Scene):def construct(self):start = 2.0x_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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词