티스토리 뷰
Computer/3B1B 따라잡기 with ManimLibrary
[3B1B따라잡기 with Manim!][1일 1마님] 4. ValueTracker / PolarPlane / ParametricFunction / LaggedStart / set_value
벼랑끝과학자 2023. 5. 30. 01:131일 1마님 시리즈는 예제 코드를 하루에 하나씩 따라하면서 마님 라이브러리 사용에 익숙해지기 위해 만든 시리즈입니다! 간단하게 코드 + 코드 리뷰 + 실행 결과만 작성합니다!
class Tute2(Scene):
def construct(self):
# 1. ValueTracker
e = ValueTracker(0.01)
# 2. PolarPlane
plane = PolarPlane(radius_max=3).add_coordinates().shift(LEFT * 2)
# radius_max는 int 단위로 입력
graph1 = always_redraw(lambda :
ParametricFunction(lambda t : plane.polar_to_point(2*np.sin(3*t), t),
t_range=[0, e.get_value()], color=GREEN))
dot1 = always_redraw(lambda : Dot(fill_color=GREEN,
fill_opacity=0.8).scale(0.5).move_to(graph1.get_end()))
# 3. Axes
axes = Axes(x_range=[0,4,1], x_length=4,
y_range=[-3,3,1], y_length=4).shift(RIGHT * 4)
axes.add_coordinates()
graph2 = always_redraw(lambda :
axes.plot(lambda x : 2*np.sin(3*x), x_range=[0, e.get_value()], color=GREEN))
dot2 = always_redraw(lambda : Dot(fill_color=GREEN,
fill_opacity=0.8).scale(0.5).move_to(graph2.get_end()))
# 4. MathTex
title = MathTex("f(\\theta) = 2sin(3\\theta)",
color=GREEN).next_to(axes, UP, buff=0.2)
VG = VGroup(graph1, graph2, dot1, dot2)
# 5.play : LaggedStart
self.play(LaggedStart(
Write(plane), Create(axes), Write(title), run_time=3, lag_ratio=0.5))
self.wait(1)
self.add(VG)
self.play(e.animate.set_value(PI), run_time=4, rate_func=linear)
self.wait(2)
- ValueTracker(value)는 plot이나 vector등 값의 변화에 따른 변화를 추적하며 나타내고자 할 때 그 변화시킬 값을 저장하는 class이다. 주로 always_redraw() 함수와 함께 사용된다.
- PolarPlane()은 주인장의 무지로 인해 처음보는 형태의 그래프라 잘 모르겠지만 거리와 각도를 나타내는 좌표평면 class인 것 같다.
- always_redraw(lambda : [your function & graph]) 함수는 ValueTracker class와 주로 같이 쓰이는데 lambda 함수에 plot할 graph를 적으면 매 fps마다 해당 graph를 ValueTracker의 value값에 따라 update하는 updator기능이다.
- ParametricFunctiond은 lambda t : [t를 매개변수로 하는 함수식] 형태로 사용한다. t_range 옵션을 통해 t의 범위를 설정할 수 있다.
- ValueTracker.get_value() : ValueTracker의 현재 value를 얻어서 return한다.
- ValueTracker.set_value(value) : ValueTracker의 현재 value를 set한다.
- Dot() 함수는 말 그대로 점을 plotting 할때 쓰는 class이다. plot한 graph.get_end() 메소드를 이용해서 그래프의 end point 좌표를 얻을 수 있다.
- Axes는 우리가 알고있는 보통의 x,y 좌표계를 그리는 class이다.
- Axes.plot(lambda x : x를 매개변수로 하는 함수식) 형태로 graph를 좌표계 위에 그릴 수 있다.
- MathTex는 특히 수식을 입력할 때 사용하는 class이다. LaTeX 문법을 기반으로 하기 때문에 원하는 수식을 입력하려면 Latex 문법을 알아야 한다.
- VGroup은 원하는 class들이 저장된 변수들을 하나의 그룹으로 그룹화한다. 그룹화된 변수는 하나처럼 함께 움직일 수도 있고 그룹화하였어도 따로따로 움직일 수도 있다.
- LaggedStart() 는 self.play를 시작하는 하나의 방식으로 , lag_ratio를 통해서 play를 시작할 때 약간씩 딜레이를 줄 수 있다. (이전 포스팅 Lag_ratio참고)
- e.animate.set_value(PI)를 통해서 0.01로 설정되어있던 ValueTracker의 값을 PI(3.14)까지 fps마다 변경한다. 이때 run_time을 통해서 몇초동안 변하게 할것인지를 결정할 수 있고, rate_func를 통해서 매 초당 변화하는 정도를 동일하게(linear)할 것인지 또는 다이나믹을 줄 것인지를 결정할 수 있다.
'Computer > 3B1B 따라잡기 with ManimLibrary' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- manimtutorial
- ai신약개발
- kl divergence
- marginal likelihood
- 이왜안
- 인공지능
- Matrix algebra
- manim
- MLE
- 최대우도추정
- 기계학습
- vae
- variational autoencoder
- 3B1B따라잡기
- 제한볼츠만머신
- eigenvector
- 베이즈정리
- MatrixAlgebra
- ai인공지능
- MorganCircularfingerprint
- 백준
- 3b1b
- 파이썬
- Manimlibrary
- manim library
- elementry matrix
- eigenvalue
- 선형대수
- kld
- 오일석기계학습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함