matplolib/함수그래프

리사주도형 그래프를 그려보자!

JackSmith 2023. 3. 20. 23:52

이번시간에는 numpy와 pylab을 이용하여 리사주도형 그래프를 4개 그려보도록 하겠습니다.

 

일단 그래프를 그려보기에 앞서 리사주도형에 대해 간략히 설명을 드리곘습니다.

리사주도형이란?

리사주도형(Lissajous Curve)은 두개의 조화운동이 서로 다른 주파수로 진동하면서 만들어지는 곡선을 말합니다.

이 곡선은 수학적으로는 매우 복잡하지만, 의외로 단순하고 우아한 모양으로 눈에 잘 띄어서 다양한 분야에 활용이 되는데요, 이 곡선은 보통 X축과 Y축으로 이루어진 second dimensions, catesian 좌표계에서 그려지게 됩니다.

조화운동의 주기, 진폭, 위상 등의 속성에 따라 곡선의 모양이 달라지게 됩니다.

예를 들어, 두 개의 운동이 같은 주파수로 진동하면 직선이 되고, 한 운동이 다른 운동보다 1/2 주기 늦게 시작하면 타원형이 됩니다. 이와 같이 여러 속성을 조합하여 다양한 모양의 리사주도형을 만들어낼 수 있습니다.

위 곡선에 대한 식은 아래와 같습니다.

저희는 위 식에서 a와b의 값 4가지를 배열에 넣어놓고, 델타의 값을 상수로 고정시킨뒤,

네개의 그래프가 어떻게 그려지는 확인해보도록 할 것입니다.

 

(리사주도형을 좀더 와닿게 이해하고 싶다, 또는  이 곡선으로 이것저걱 다뤄보고 싶다, 하는 분들은 아래 링로

들어가셔서, 12방향에서 두 힘이 시작될때, 3시방향에서 두 힘이 시작될때, 그리고 두 힘이 속도가 서로 같아서 동기적으로 움직일때와, 두 힘이 속도가 달라서 비동기적으로 움직일때에 대해 관찰해보시는 것을 추천드립니다.)

 

https://javalab.org/lissajous_figures/

 

리사주 도형 - 자바실험실

리사주 도형 리사주 도형은 매개 변수 t에 의해 x = A cos(Bt + C)y = D sin(Et + F) 의...

javalab.org

 

이제 본격적으로 파이썬으로 그래프그리기 작업에 들어가보겠습니다.

 

from numpy import sin,pi,linspace
from pylab import plot,show,subplot

a = [1,3,5,3] #plotting the curves of
b = [1,5,7,4] #different values of a/b


delta = pi/2
t = linspace(-pi,pi,300)

for i in range(0,4):
    x = sin(a[i] * t + delta)
    y = sin(b[i] * t)
    subplot(2, 2, i+1)
    plot(x,y)

show()

위 코드를 돌려보면 아래와 같은 창이 뜨게 될것입니다.

현재 위 그래프는 delta값을 pi/2로 설정했을때의 그래프들입니다.

이번에는 delta의 값을 변경해보도록 하겠습니다.

 

i) delta = pi/1

ii) delta = pi/3

 

iii) delta = pi/4

 

iiii) delta = pi/5

 

 

 

이번에는 배열 a, b의; 값을 바꿔보도록 하겠습니다.

만약, a=[1,2,2,1], b=[5,8,1,2], 그리고 델타값을 pi/4로 설정하다면,

from numpy import sin,pi,linspace
from pylab import plot,show,subplot

a = [1,2,2,1] #plotting the curves of
b = [5,8,1,2] #different values of a/b


delta = pi/4
t = linspace(-pi,pi,300)

for i in range(0,4): #0보다 크거나 같고 4보다 작다.(i=0,1,2,3)
    x = sin(a[i] * t + delta)
    y = sin(b[i] * t)
    subplot(2, 2, i+1) #2행2열
    plot(x,y)

show()

 

 

저도 이제 막 이부분에 대해서 이해하는 중이라;;ㅎㅎ;;

좀 더 이해를 하게 되고 나서, 상세하게 기술하도록 하겠습니다. 감사합니다ㅎㅎ

참고 및 출처:

https://glowingpython.blogspot.com/2011/12/lissajous-curves.html