본문 바로가기

Programming

(165)
Draw waves by several moving circles Code from manimlib.imports import * class Rotate_Circles(Scene): def construct(self): self.draw_axis() self.rotate_dots() self.wait() def draw_axis(self): #1. axis x_start = np.array([-6.5,0,0]) x_axis = Line(x_start, np.array([6, 0, 0]), color=BLUE, ) y_axis = Line(np.array([-4, 2, 0]), np.array([-4, -2, 0]), color=BLUE) self.add(x_axis, y_axis) #2. circles circles_radius = [1, 0.5, 0.3, 0.2, 0..
Draw elbow-line between two dots code from manimlib.imports import * class ConnectObjects_ByLine(Scene): def construct(self): #1. Creates dots and display them dot1, dot2 = Dot(), Dot() dot1.shift(UP) connected_line = VGroup(Line(dot1.get_center(), dot2.get_center())) self.add(dot1, dot2, connected_line) #2. makes update function to draw the line between the dots def update_line(mob): x1, y1 = dot1.get_center()[0], dot1.get_cen..
Draw summed Sine-wave (Two Circles) code from manimlib.imports import * class TwoCircle_RightSide(Scene): def construct(self): self.show_axis() self.show_circle_dot() self.draw_cycle() self.wait() def show_axis(self): self.x_start = np.array([-6.5,2,0]) x_axis = Line(self.x_start, np.array([6, 2, 0])) y_axis = Line(np.array([-5, 0, 0]), np.array([-5, 0, 0])) self.add(x_axis, y_axis) self.circle1_origin = np.array([-5, 2, 0]) self...
Draw moving sine-wave changing the amplitude Code from manimlib.imports import * class ChangeAmp_SineCurve(Scene): def construct(self): self.show_axis() self.show_circle_dot() self.draw_several_cycle() self.wait() def show_axis(self): self.x_start = np.array([-6,0,0]) x_axis = Line(self.x_start, np.array([6, 0, 0])) y_axis = Line(np.array([-4, -2, 0]), np.array([-4, 2, 0])) self.add(x_axis, y_axis) self.origin_point = np.array([-4, 0, 0]) ..
Draw moving wave by the rotating dots Code from manimlib.imports import * class LongSineCurve(Scene): def construct(self): self.show_axis() self.show_circle_dot() self.draw_several_cycle() self.wait() def show_axis(self): self.x_start = np.array([-6,0,0]) x_axis = Line(self.x_start, np.array([6, 0, 0])) y_axis = Line(np.array([-4, -2, 0]), np.array([-4, 2, 0])) self.add(x_axis, y_axis) self.origin_point = np.array([-4, 0, 0]) self.c..
Moving Sine-Wave Code from manimlib.imports import * class MovingWave(Scene): def construct(self): self.draw_axis() self.draw_sine_wave() def draw_axis(self): x_axis = Line(np.array([-4,0,0]), np.array([4,0,0])) y_axis = Line(np.array([-4,2,0]), np.array([-4,-2,0])) self.add(x_axis, y_axis) self.x_min = -4 self.x_max = 4 def draw_sine_wave(self): sine_wave = self.get_sine_wave() vt = ValueTracker(0) def update_w..
Sine/Cosine curve by rotating the dot around the circle Code from manimlib.imports import * class SineCosine_Curve(Scene): def construct(self): self.show_axis() self.show_circle() self.move_dot_and_draw_curve() self.wait() def show_axis(self): x_start = np.array([-6,2,0]) x_end = np.array([3,2,0]) y_start = np.array([-4,-3,0]) y_end = np.array([-4,3.5,0]) x_axis = Line(x_start, x_end) y_axis = Line(y_start, y_end) self.add(x_axis, y_axis) self.add_xy..
Sine-curve by rotating dot around the circle Code from manimlib.imports import * class Sine_Curve(Scene): def construct(self): self.show_axis() self.show_circle() self.move_dot_and_draw_curve() self.wait() def show_axis(self): x_start = np.array([-6,0,0]) x_end = np.array([6,0,0]) y_start = np.array([-4,-2,0]) y_end = np.array([-4,2,0]) x_axis = Line(x_start, x_end) y_axis = Line(y_start, y_end) self.add(x_axis, y_axis) self.add_x_labels()..
사인 파의 진폭을 변형시키면서 사인파 이동시키기 만들려는 것은, 이동하는 사인파를 애니메이션 하는 것인데, 동시에 사인파의 진폭(높낮이)을 바꿔가면서 이동하는 것을 애니메이션 해보고자 한다. 진폭 변동없이 그냥 이동시키는 애니메이션에 대한 코딩은 여기 참조. 핵심 구상 사인파를 화면에 그리고 이동하는 듯한 애니메이션을 구현하는 것은 여기 설명한 것과 동일. 사인파의 진폭을 변화시키는 것이 다른 것인데, 시간의 흐름에 따라 변화되게 하자 0~1초 : 진폭 1로 진행 1~2초: 진폭 1에서 2로 서서히 커지게 2~3초: 진폭 2에서 1로 서서히 작아지게 3~ : 진폭 1로 진행 진폭은, 사인 곡선을 만들어내는 원의 반지름에 비례한다. 원의 반지름이 1이면 진폭이 1이고, 원이 반지름이 커지면 진폭이 증가하고, 반지름이 작아지면 진폭도 감소한다. 따라서, ..
계속해서 흘러가는 사인 파형 만들기 만들려는 것은, 원둘레까지의 막대를 이용해서, 사인파가 계속해서 그려지면서 왼쪽 편으로 흐르듯이 진행되는 애니메이션이다. 그냥 0 ~ 2 $\pi$까지 등 일정 범위에 대해 사인 파형을 그리는 것은 여기 코드를 참조. 원 막대 없이 그냥 사인파가 흐르는 애니메이션은 여기 참조. 기본 구상 먼저 일정 구간에 대한 사인파를 그리고, 그 사인파의 끝 지점을 원 막대에서 연장된 라인이 가리키게 한 후, 막대가 회전함에 따라 사인파를 계속 업데이트해서 마치 흐르는 것처럼 만든다. 코딩 1. 축 라인과 원을 그린다. 가로축과 세로축, 그리고 원이 놓이게 되는 좌표를 구상하자. 위 그림을 코드로 짠다. 클래스 이름은 LongSineCurve로 하자. class LongSineCurve(Scene): def const..