Elteoremadebeethoven/AnimationsWithManim

Function graphs to updaters

Closed this issue · 0 comments

Hi everyone i don't know how to create this animation: add a decimal number "a", With the change of a, y also changes, y=a, and create a rectangular coordinate system with time as the horizontal axis and y as the vertical axis. Updater and ValueTracker seems to have no effect. Elteoremadebeethoven made a tutorial about updaters. (without graphs) But it's still hard to make this animation with graph. Here is my code:

class UpdaterTest9(GraphScene):
    def construct(self):
        # global number_value
        numberplane = NumberPlane()
        self.add(numberplane)
        self.setup_axes()
        line = Square()
        line2 = Circle()
        number = DecimalNumber(0, num_decimal_places=5)

        # number.add_updater(lambda m: m.set_value(get_area(line)))
        def number_updater(obj):
            obj.add_updater(lambda m: m.set_value(get_area(line)))

        # self.get_graph(lambda x: x.set_value(get_area(line)))
        number.add_updater(number_updater)
        # if number.get_value() != 0:
        number_value = number.get_value()
        graph = self.get_graph(
            x_values=[0, number_value],
            y_values=[0, number_value],
            # func=lambda x: 0
            func=number_value
        )
        graph.add_updater(number_updater)
        self.add(number, graph)
        self.play(Transform(line, line2), rate_func=linear, run_time=8)
        self.wait(2)
class UpdaterTest10(GraphScene):
    def construct(self):
        # global number_value
        numberplane = NumberPlane()
        self.add(numberplane)
        self.setup_axes()
        line = Square()
        line2 = Circle()
        vt = ValueTracker(0)
        number = DecimalNumber(0, num_decimal_places=5)

        # numberv = ChangeDecimalToValue(decimal_mob=number)
        # numberv = CountInDecimal()

        # number.add_updater(lambda m: m.set_value(get_area(line)))
        def number_updater(obj):
            obj.add_updater(lambda m: m.set_value(vt.get_value(get_area(line))))

        # self.get_graph(lambda x: x.set_value(get_area(line)))
        number.add_updater(number_updater)
        # if number.get_value() != 0:
        number_value = number

        # number_value.add_updater(lambda m: m.set_value(number))
        def number_value_updater(obj):
            obj.add_updater(lambda m: m.set_value(number))

        # graph = self.get_graph(
        #     x_values=[],
        #     y_values=[],
        #     # func=lambda x: 0
        #     func=number_value_updater(obj)
        #
        # ).add_updater(number_value_updater)
        graph = FunctionGraph(function=number_updater)

        graph.add_updater(number_updater)
        self.add(number, graph)
        self.play(Transform(line, line2), rate_func=linear, run_time=8)
        self.wait(2)