티스토리 뷰
Computer/3B1B 따라잡기 with ManimLibrary
[3B1B따라잡기 with Manim!][1일 1마님] 7. Animation : GrowFromPoint / Transform / LaggedStart
벼랑끝과학자 2023. 6. 2. 13:051일 1마님 시리즈는 예제 코드를 하루에 하나씩 따라하면서 마님 라이브러리 사용에 익숙해지기 위해 만든 시리즈입니다! 간단하게 코드 + 코드 리뷰 + 실행 결과만 작성합니다!
from manim import *
class MoveToRectangle(Scene):
def construct(self):
plane = NumberPlane(x_range=[-5,5,1], x_length=8,
y_range=[-4,4,1], y_length=6).add_coordinates()
plane.shift(RIGHT * 2)
vec1 = Line(start=plane.c2p(0, 0), end = plane.c2p(3, 2), stroke_color=YELLOW).add_tip(tip_width=0.2)
vec1_name = MathTex('\\vec{v}').next_to(vec1, RIGHT, buff=0.1).set_color(YELLOW)
vec2 = Line(start=plane.c2p(0, 0), end=plane.c2p(-2, 1), stroke_color=RED).add_tip(tip_width=0.2)
vec2_name = MathTex('\\vec{u}').next_to(vec2, LEFT, buff=0.1).set_color(RED)
vec3 = Line(start = plane.c2p(3,2),
end = plane.c2p(1,3),
stroke_color=RED).add_tip(tip_width=0.2)
vec4 = Line(start = plane.c2p(0, 0),
end = plane.c2p(1, 3),
stroke_color=WHITE).add_tip(tip_width=0.2)
vec4_name = MathTex('\\vec{u}+\\vec{v}').next_to(vec4, LEFT, buff=0.1).set_color(WHITE)
stuff = VGroup(plane, vec1, vec1_name, vec2, vec2_name, vec3, vec4, vec4_name)
box = RoundedRectangle(height =1.5, width =1.5, corner_radius=0.1, stroke_color=PINK).to_edge(DL)
T1 = Tex('DrawBorderThenFill').to_edge(UL)
T2 = Tex('GrowFromPoint').to_edge(UL)
T3 = Tex('Transform').to_edge(UL)
T4 = Tex('LaggedStart').to_edge(UL)
T5 = Tex('FadeIn').to_edge(UL)
self.play(DrawBorderThenFill(plane), Write(T1), run_time=2)
self.wait()
self.play(Unwrite(T1))
self.play(GrowFromPoint(vec1, point=vec1.get_start()),
Write(vec1_name),
Write(T2),
run_time=2)
self.wait()
self.play(GrowFromPoint(vec2, point=vec2.get_start()),
Write(vec2_name),
run_time=2)
self.wait()
self.play(Unwrite(T2))
self.play(Transform(vec2, vec3),
vec2_name.animate.next_to(vec3, UP, buff=0.1),
Write(T3), run_time=2)
self.wait()
self.play(Unwrite(T3))
self.play(LaggedStart(GrowFromPoint(vec4, point=vec4.get_start())),
Write(vec4_name),
Write(T4),
run_time=3, lag_ratio=1)
self.wait(2)
self.play(Unwrite(T4))
self.play(FadeIn(box), Write(T5))
self.wait()
self.play(Unwrite(T5))
self.play(stuff.animate.move_to(box.get_center()).set(width=1.2), run_time=3)
self.wait(3)
오늘의 버그 : Write() 함수에는 여러가지 Tex를 전달하면 안된다. VGroup으로 묶어서 전달하던지 해야지 하나의 Write()함수에는 하나의 Tex만 넣도록 하자.
- 오늘 코드는 그냥 Scene class를 상속하므로 def construct(self):로 시작한다.
- NumberPlane() class는 앞선 포스팅들에서 다룬 적 있기 때문에 생략한다.
- Line() class를 이용해 만든 Line Mobject에 .add_tip() 메서드를 이용해서 마치 vector인 것 처럼 표현 할 수 있다.
- NumberPlane.c2p(좌표)는 NumberPlane coordinate상의 좌표로부터 BackGround에 깔린 좌표의 point를 얻는다.
- 수식을 표현하는 MathTex() class에 .set_color() 메서드를 이용해서 색깔을 입힐 수 있다.
- RoundedRectangle() class를 이용해서 모서리가 둥근 사각형을 그릴 수 있다.
- GrowFromPoint(Your Mobject, point = point where you want to start from) class는 Your Mobject를 point로부터 Grow시키는 animation이다. (실행 결과 참고)
- Transform(Source Mobject, Target Mobject) class는 src를 tgt 형태로 변형시키는 class이다 (실행결과 참고)
- LaggedStart() class는 애니메이션에 약간씩의 딜레이를 추가하는 기능이다. lag_ratio 값을 변화시키면서 직접 실행해보는 편이 이해가 더 빠를 것이다.
- 마지막줄에서 VGroup으로 그룹화한 stuff변수에 animate을 줘서 box.get_center() 위치로 move_to 시켰다. 동시에 width를 1.2로 set()하면 결과가 어떻게 되는지 실행 결과를 통해 확인해보자
'Computer > 3B1B 따라잡기 with ManimLibrary' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 선형대수
- vae
- manim
- kl divergence
- ai신약개발
- 백준
- 파이썬
- manim library
- 최대우도추정
- Matrix algebra
- manimtutorial
- ai인공지능
- eigenvector
- 제한볼츠만머신
- marginal likelihood
- Manimlibrary
- variational autoencoder
- MLE
- 이왜안
- 베이즈정리
- elementry matrix
- 3b1b
- 인공지능
- eigenvalue
- MatrixAlgebra
- 3B1B따라잡기
- 기계학습
- kld
- 오일석기계학습
- MorganCircularfingerprint
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함