mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
![]() |
from manimlib.imports import *
|
||
|
|
||
|
"""
|
||
|
A set of scenes to be used for performance testing of Manim.
|
||
|
"""
|
||
|
|
||
|
|
||
|
class Perf1(GraphScene):
|
||
|
"""
|
||
|
A simple scene of two animations from the end of a video on recursion.
|
||
|
|
||
|
- Uses a graph in 1/4 of the scene.
|
||
|
- First fades in multiple lines of text and equations, and the graph axes.
|
||
|
- Next animates creation of two graphs and the creation of their text
|
||
|
labels.
|
||
|
"""
|
||
|
CONFIG = {
|
||
|
"x_axis_label":
|
||
|
"$n$",
|
||
|
"y_axis_label":
|
||
|
"$time$",
|
||
|
"x_axis_width":
|
||
|
FRAME_HEIGHT,
|
||
|
"y_axis_height":
|
||
|
FRAME_HEIGHT / 2,
|
||
|
"y_max":
|
||
|
50,
|
||
|
"y_min":
|
||
|
0,
|
||
|
"x_max":
|
||
|
100,
|
||
|
"x_min":
|
||
|
0,
|
||
|
"x_labeled_nums": [50, 100],
|
||
|
"y_labeled_nums":
|
||
|
range(0, 51, 10),
|
||
|
"y_tick_frequency":
|
||
|
10,
|
||
|
"x_tick_frequency":
|
||
|
10,
|
||
|
"axes_color":
|
||
|
BLUE,
|
||
|
"graph_origin":
|
||
|
np.array(
|
||
|
(-FRAME_X_RADIUS + LARGE_BUFF, -FRAME_Y_RADIUS + LARGE_BUFF, 0))
|
||
|
}
|
||
|
|
||
|
def construct(self):
|
||
|
t1 = TextMobject(
|
||
|
"Dividing a problem in half over and over means\\\\"
|
||
|
"the work done is proportional to $\\log_2{n}$").to_edge(UP)
|
||
|
|
||
|
t2 = TextMobject(
|
||
|
'\\textit{This is one of our\\\\favorite things to do in CS!}')
|
||
|
t2.to_edge(RIGHT)
|
||
|
|
||
|
t3 = TextMobject(
|
||
|
'The new \\texttt{power(x,n)} is \\underline{much}\\\\better than the old!'
|
||
|
)
|
||
|
t3.scale(0.8)
|
||
|
p1f = TexMobject('x^n=x \\times x^{n-1}').set_color(ORANGE)
|
||
|
t4 = TextMobject('\\textit{vs.}').scale(0.8)
|
||
|
p2f = TexMobject(
|
||
|
'x^n=x^{\\frac{n}{2}} \\times x^{\\frac{n}{2}}').set_color(GREEN)
|
||
|
p1v2g = VGroup(t3, p1f, t4, p2f).arrange(DOWN).center().to_edge(RIGHT)
|
||
|
|
||
|
self.setup_axes()
|
||
|
o_n = self.get_graph(lambda x: x, color=ORANGE, x_min=1, x_max=50)
|
||
|
o_log2n = self.get_graph(lambda x: math.log2(x),
|
||
|
color=GREEN,
|
||
|
x_min=2,
|
||
|
x_max=90)
|
||
|
onl = TexMobject('O(n)')
|
||
|
olog2nl = TexMobject('O(\\log_2{n})')
|
||
|
onl.next_to(o_n.get_point_from_function(0.6), UL)
|
||
|
olog2nl.next_to(o_log2n.get_point_from_function(0.8), UP)
|
||
|
self.play(
|
||
|
FadeIn(t1),
|
||
|
FadeIn(self.axes),
|
||
|
# FadeInFromDown(t2),
|
||
|
FadeIn(p1v2g),
|
||
|
)
|
||
|
self.play(ShowCreation(o_n),
|
||
|
ShowCreation(o_log2n),
|
||
|
ShowCreation(onl),
|
||
|
ShowCreation(olog2nl),
|
||
|
run_time=3)
|
||
|
self.wait(duration=5)
|