본문 바로가기

분류 전체보기

(284)
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..
흐르는 물결같은, 흐르는 사인 곡선 만들기 움직이는 사인 곡선을 만들어보자. 마치 파형이 이동하는 듯한. 기본 구상 $\sin ( \theta + \alpha )$는 $\sin \theta$인 곡선이 $\alpha$만큼 왼쪽으로 쉬프트 된 곡선이다. 위 그림은 $\sin \theta$를 $\frac {\pi} {4}$ 만큼씩 왼쪽으로 이동한 것으로, 시간 단위별로 이렇게 이동시키면, 마치 사인파가 왼쪽으로 흐르는 듯한 효과를 낼 수 있을 것이다. 코딩 축 그리기 x축과 y축을 그린다. 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_..
02. 푸리에 급수 : 주기신호, 삼각 함수(사인, 코사인 그래프) 푸리에 변환을 바로 설명하기 전에 푸리에 급수부터 파악해볼 것이다. 푸리에 변환은 주기적인 신호이건 아니건, 모든 신호에 대해 적용할 수 있는 변환 방법이다. 반면에 푸리에 급수는 주기적인 신호에만 적용될 수 있는 방법이다. 주기적인 신호가 어떻게 푸리에 급수로 표현될 수 있는 지 보고, 이를 확장해서 푸리에 변환을 알아볼 것이다. 알아보기 순서: 푸리에 급수(주기) --> 푸리에 변환(비주기로 확장) 주기적인 신호 주기적인 신호는 일정한 시간 간격으로 똑같은 값을 가지는 신호이다. 아래는 1초마다 값을 읽은 신호이다. 신호의 값이 보이는 패턴을 보면, 5초마다 같은 패턴을 보인다. 즉, 5초마다 같은 값을 가지고 있고, 이러한 것을 주기적인 신호라 한다. $$ f(t) = f(t + 5) $$ 1초마다..
원 위의 점이 돌면서 사인/코사인 곡선 그리기 사인(Sine)과 코사인(Cosine) 그래프가 왜 그렇게 그려지는지 설명할 때 많이 쓰이는 방법은 다음과 같다. 반지름이 1인 원을 그리고, 원의 중심에서 그 원둘레의 임의의 점까지의 직선을 그린 후, x축과 그 직선 간의 사잇각을 $ \theta $라 하자 이 $ \theta $에 대해 $\sin \theta = 세로 $가 되고, $ \cos \theta = 가로$가 된다. 따라서, 그 어떤 점을 원둘레로 이동시키면, $ \theta $가 커지고, 이에 따라 $\sin \theta $의 값이 변하게 되는데, 이를 원 오른편에 가로축을 그리고, 그 위를 $\theta$의 변화값으로 두고, 세로축에 '세로 길이'를 표시하면, 이게 $ \sin \theta $ 값이 된다. 즉, 사인(Sine) 그래프가 된..
원 위의 점이 이동하면서 사인 곡선 그리기 하려는 것 사인(sine)이나 코사인(cosine) 함수의 그래프가 아래와 같이 된다는 것을, 기하학적인 삼각함수의 기본 원리를 가지고 보여주는 애니메이션을 만들고자 한다. 사인 그래프를 예를 들면, 반지름의 길이가 1인 원을 그리고, 그 원둘레의 한 점 P를 잡아서, 원점에서 그 점까지의 직선을 그리고, x축과 그 직선의 사잇각을 $ \theta $라 하자. 그렇다면 $ \sin \theta $는 점 P에서 x축으로 수직으로 내린 길이가 된다. 왜냐면, $ \sin \theta = 높이/빗변$ 이기 때문. 그리고, 점 P의 높이라는 것은, 점 P의 y축 좌표값이다. 즉, $ \sin \theta = {P_y}$ $ \theta $ 값이 0(zero)이 될 때의 P는 원의 오른편 둘레가 x축과 만나는 점..
01. 푸리에 변환이란 통신 이론, 디지털 신호, 음성처리 , 영상처리 등에서 항상 나오는 이론이 푸리에 변환이고, 가장 어려워하는 것이고, 내용을 이해하려고 많은 노력을 기울이면서도 정작 잘 파악이 안 되고, 다 알았다고 생각했는데 사실은 아니고 하는 게 푸리에 변환이다. 필자도 푸리에 변환에 대해서 여러 해 동안 이리 보고 저리보고, 프로그램도 짜 보고 응용 거리를 생각도 해보고 하고 있는데, 들여다보면 볼수록 새로운 것이 보이고, 항상 뭔가를 새롭게 떠올리게 하는 것을 보면, 참으로 대단한 이론이라는 생각을 안 할 수 없다. 푸리에 변환에 대해서는 대학교에서 '통신 이론', '디지털 신호처리' 등의 이름으로 강좌가 개설되어 설명하고 있고, 수많은 책과 블로그, 유튜브에서 내용을 설명하고 있다. 그 와중에 또다시 비슷한 내..