如何使用 Manim 为在数轴上移动的点设置动画?

How to use Manim to animate a point moving on a number line?

我想使用 Manim 为数字轴上参数的位置设置动画。我想出了如何使用 ParametricFunction:

将参数的结束位置动画化为一条线
from manim import *
import numpy as np
import math

class line( Scene ):
    def construct( self ):

        tline = NumberLine(
            x_range=[ 0, 1 ],
            length=4,
            color=BLUE,
            include_numbers=False )

        t1 = ParametricFunction( lambda t: tline.number_to_point(np.sin(t * PI)),
                                 t_range=[0, 1],
                                 scaling=tline.scaling, color=YELLOW )

        self.play( DrawBorderThenFill( VGroup( tline ) ), run_time = 2 )
        self.play( AnimationGroup(Create(t1)), run_time = 6 )

这适用于单调递增的值,但如果结束点自身翻倍,则效果不佳,因为动画在该阶段变得不可见。

有没有办法更改线图以动画移动点而不是描绘一条线?

如果您的参数只是在某些固定值之间移动,您可以采用 this example in the documentation 中的简单方法。

如果您想更好地控制标记在数字线上移动的确切方式,我建议使用 ValueTrackerUpdateFromAlphaFunc 动画复制类似的内容,如下所示:

from manim import *

class Example(Scene):
    def construct(self):
        tline = NumberLine(
            x_range=[ 0, 1 ],
            length=4,
            color=BLUE,
            include_numbers=False )

        t_parameter = ValueTracker(0)
        t_marker = Dot(color=YELLOW).add_updater(
            lambda mob: mob.move_to(tline.number_to_point(t_parameter.get_value())),
        ).update()
        self.play( DrawBorderThenFill( VGroup( tline ) ), run_time = 2 )
        self.add(t_marker)
        self.play(
            UpdateFromAlphaFunc(
                t_parameter, 
                lambda mob, alpha: mob.set_value(np.sin(alpha * PI)),
                run_time=6
            )
        )