You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Manim中用Circumscribe仅圈选MathTex中的单个数字?

解决方案

要给表格中每个实数的指定数字添加Circumscribe动画,核心是利用MathTex的特性:它会将每个字符拆分为独立的子对象(submob),通过索引就能定位到目标数字,再对其应用动画即可。

步骤说明

  • 定位表格目标单元格:通过table.get_cell((行号, 列号))获取对应位置的单元格,行号从1开始(第一行为表头),所有实数都在第2列。
  • 提取单元格内的MathTex对象:用get_mobject()方法取出单元格里的内容。
  • 定位目标数字的子对象:根据字符串的字符顺序,用索引获取对应位置的submob(索引从0开始)。
  • 应用Circumscribe动画:对目标submob调用动画方法即可。

修改后的完整代码

class SimpleAnimation(Scene):
    def construct(self):
        table = MobjectTable([
            [MathTex(r"\mathbb{N}"), MathTex(r"\mathbb{R}")],
            [MathTex(r"1"), MathTex(r"0,156739345...")],
            [MathTex(r"2"), MathTex(r"0,823478901...")],
            [MathTex(r"3"), MathTex(r"0,465809217...")],
            [MathTex(r"4"), MathTex(r"0,156439345...")],
            [MathTex(r"5"), MathTex(r"0,823478903...")],
            [MathTex(r"\vdots"), MathTex(r"\vdots")]
        ],
            v_buff=0.2,
            h_buff=1.2)
        self.add(table)
        
        # 定义每行要高亮的数字索引(对应MathTex的submob索引)
        target_indices = [
            (2, 2),   # 第二行:0,1... 中的1对应索引2
            (3, 3),   # 第三行:0,82... 中的2对应索引3
            (4, 4),   # 第四行:0,465... 中的5对应索引4
            (5, 5),   # 第五行:0,1564... 中的4对应索引5
            (6, 6)    # 第六行:0,82347... 中的7对应索引6
        ]
        
        # 逐个播放高亮动画,也可用self.play(*[...])实现同时播放
        for row_idx, char_idx in target_indices:
            real_num_mob = table.get_cell((row_idx, 2)).get_mobject()
            self.play(Circumscribe(real_num_mob[char_idx], color=RED, fade_out=True))

关键细节

  • 索引计算:以"0,156739345..."为例,字符顺序对应的索引是:0(0)、,(1)、1(2)、5(3)...,按此规律对应目标数字的索引即可。
  • 动画自定义:可通过Circumscribe的参数调整样式,比如color设置边框颜色,fade_out控制动画结束后边框是否淡出。

内容的提问来源于stack exchange,提问作者Eric Mairene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:01:35