manim中的连分数

2 投票
1 回答
48 浏览
提问于 2025-04-13 13:12

我刚开始使用manim,想做一个简单的动画,展示一个分数的连分数展开。到目前为止,我的代码是这样的:

from manim import *

class Eq(Scene):
    def construct(self):
        f1=MathTex(
            r"{75 \over ",
            r"33",
            "}"
            )
        f2=MathTex(
            r"{66+9 \over ",
            "33",
            "}"
            )
        f3=MathTex(
            r"{2+}",r"{9 \over ",
            "33",
            "}"
            )
        f4=MathTex(
            r"{2+}",r"{1 \over ",
            r"{33 \over",
            "9",
            "}","}"
            )
        self.add(f1)
        self.wait(2)
        self.play(ReplacementTransform(f1[0],f2[0]))
        self.wait(2)
        self.play(ReplacementTransform(f1,f3))
        self.wait(2)
        self.play(ReplacementTransform(f3,f4))
        self.wait(2)
        

可能效率不是最高的,但这不是我关心的问题。当我把分数放到分母时,\over 生成的分数看起来比原来的分数小,这让它看起来有点奇怪。有没有办法避免这种情况呢?

我看到过一些视频,里面的连分数展开保持了相同的大小,所以这应该是可行的。可惜我找不到针对这个具体问题的指南。如果有人能帮忙就太好了。

编辑:这里有一张情况的图片 在这里输入图片描述

如你所见,分母中的分数比较小。我希望它和原来的分数大小一样。

1 个回答

1

一般来说,这个问题更像是关于“LaTeX”的,而不是“manim/python”的。Manim 只是把 LaTeX 方程渲染成一个 *.svg 文件,然后把这个文件添加到场景中。所以真正的问题是,如何以你想要的方式渲染 LaTeX 方程。在这里你可以找到一些可能的解决方案。

把第一个解决方案应用到你的例子中,可以得到这样的结果:

...
f4=MathTex(
    r"{2+}",r"\begin{array}{@{\,}c@{\,}} 1\\ \hline 33\\ \hline 9\end{array}"
)
...

看起来是这样的:

示例结果

撰写回答