본문 바로가기

Programming

(165)
[49] Update Animation class UpdateFromFunc class def update_from_func(self): dot = Dot().to_edge(LEFT) label = TextMobject("Hello").next_to(dot,UP) def update_func(mob): mob.next_to(dot,UP) self.play( dot.to_edge,RIGHT, UpdateFromFunc(label, update_func), run_time=5, ) def update_from_func2(self): dot = Dot().to_edge(LEFT) label = TextMobject("Hello").next_to(dot,UP) def update_func(mob): mob.next_to(dot, UP) x = dot.get_c..
[48]always_redraw class AlwaysRedraw(Scene): def construct(self): self.draw_tangent() def draw_tangent(self): x_axis = NumberLine(x_min=-5,x_max=5) def sine_func(x): return 1.5 * np.sin(x * PI) graph = FunctionGraph(sine_func, x_min=-4, x_max=4) tracker = ValueTracker(-4) def get_tangent_line(): line = Line( ORIGIN, 2 * RIGHT, color=RED, stroke_width=5, ) dx = 0.0001 x = tracker.get_value() p0 = np.array([x-dx,si..
[47] add_updater def moving_dot(self): x_axis = NumberLine(x_min=-5, x_max=5) dot = Dot(color=RED, radius=0.15).move_to(x_axis.get_left()) number = DecimalNumber(-5, color=RED).next_to(dot, UP) number.add_updater(lambda m: m.next_to(dot, UP)) number.add_updater(lambda m: m.set_value(dot.get_center()[0])) self.add(x_axis, dot, number) self.play(dot.shift, RIGHT * 10, rate_func=there_and_back, run_time=10) self.wa..
[46]Mobject moving/coloring Animation def simple(self): circle = Circle() circle.save_state() self.play(circle.to_edge, LEFT) self.play(circle.to_edge, RIGHT) self.play(circle.restore) self.play(circle.to_edge, UP) self.play(circle.to_edge, DOWN) self.play(circle.restore) self.play(circle.set_fill, RED, {"opacity": 0.5}) self.play(circle.set_color_by_gradient, YELLOW) self.play(circle.to_corner, UL) self.play(circle.to_corner, DR) s..
[45]Special Effects def broadcast(self): text = VGroup( TextMobject("Monday"), TextMobject("Tuesday"), TextMobject("Wednesday"), TextMobject("Thursday"), TextMobject("Friday"), ).arrange(DOWN) dot = Dot(color=RED).move_to(2 * RIGHT) self.add(dot) def get_broadcast(): return Broadcast(dot, big_radius=5, color=RED, run_time=5) self.play( LaggedStartMap(FadeIn, text, run_time=4, lag_ratio=0.7), Succession(*[ get_broad..
[44]AnimationGroup lag_ration test class AnimationGroupTest(Scene): def construct(self): self.animation_group() def animation_group(self): self.t1 = TextMobject("Hello").shift(UP*2).to_edge(LEFT, buff=1) self.t2 = TextMobject("Wordld").shift(UP*2).to_edge(RIGHT, buff=1) self.shape1 = Circle().to_edge(LEFT, buff=1) self.shape2 = Square().to_edge(RIGHT, buff=1) self.arrow1 = Arrow().shift(DOWN*2).to_edge(LEFT, buff=..
[43]Transform(3) ApplyMethod arrow = Arrow().to_edge(LEFT) self.add(arrow) self.play(ApplyMethod(arrow.to_edge, RIGHT)) self.wait() ApplyPointwiseFunction Class def apply_pointwise_function(self): circle = Circle(radius=0.5) circle.save_state() self.add(circle) self.wait() self.play( ApplyPointwiseFunction( lambda p: 10 * p / get_norm(p), circle ) ) self.play(Restore(circle)) circle.set_fill(color=RED, opacity=0..
[컴포넌트]VerticalBarChart 만들기 (3. 사용법) 기본 사용법 아무 파라미터 없이 VerticalBarChart를 만들면, VerticalBarChart의 CONFIG에 지정되어 있는 샘플 데이터 및 파라미터 값으로 디폴트 바 차트가 만들어집니다. 단, 이때 is_add_bars=True로 해줘야 막대가 같이 나타납니다. is_add_bars=False가 디폴트로, chart를 add하면 막대를 제외한 나머지가 화면에 표출되고, 막대는 chart.get_bar_animation()에 의해 얻어지는 애니메이션에 의해 표출됩니다. from manimlib.imports import * from src.comp.plot import VerticalBarChart class SimpleTest(Scene): def construct(self): chart = ..
[컴포넌트]VerticalBarChart 만들기 (2. 핵심코드 설명) 글로벌 객체 생성을 모듈화 함 클래스의 생성자에서 바 차트를 구성하는 요소들을 생성하고, 이 루틴들을 각 메서드로 구분해서 모듈화 했습니다. def __init__(self, data=[], **kwargs): digest_config(self, kwargs, locals()) super().__init__(**kwargs) self.read_data(data) self.setup_axes() #x, y axis self.add_lines() # background line and value text self.add_titles() self.add_bars() # draw rectangle self.add_bar_names() # name of bars below x_axis self.add_axes_t..
[컴포넌트]VerticalBarChart 만들기 (1. 설계/소스) 만들려는 것은 막대그래프를 애니메이션 하는 컴포넌트입니다. 데이터를 그래프로 나타낼 때, 가장 간단하면서도 가장 많이 쓰이는 것이 막대그래프일 겁니다. 간단하면서도 데이터의 전달 효과가 좋기 때문입니다. 근데 그렇게 간단하다는 막대그래프도, 막상 잘 그리려면 쉽지 않고 고려해야 할 것이 많습니다. (그게 뭔지는 여기 참조) 또한 애니메이션을 효과도 넣고 예쁘게 하려면, 엑셀이나 파워포인트로는 한계가 있습니다. 여기서는 방송사의 뉴스 같은데서 나오는, 전문 디자이너가 공들여서 만드는 멋진 막대그래프 애니메이션을, 데이터만 입력하면 다른 필요한 사항 없이 애니메이션이 작성되는 컴포넌트를 만들고, 그 과정도 소개하겠습니다. 설계 클래스 타입 VGroup을 상속해서 작성: 라인, 바 등 여러 객체가 사용될 것이..