본문 바로가기

프로그램/MATLAB

【MATLAB】 발사체 운동에 대한 동영상 예제 풀이

[문제]

Q. 초기 속도 (V0)와 각도(θ0)로 발사된 발사체의 직교좌표는 다음과 같이 계산 된다. (공기 저항은 없다고 가정한다.)


여기서 g는 9.81 m/s^2이다. V0 = 5 m/s 이고, θ0 = 45˚ 인 경우, 발사체의 궤적에 대한 동영상을 만드는 스크립트를 작성하라.


[문제풀이]


우선, 문제에서 주어진 기본값들을 위처럼 입력해줍니다. 중력가속도나 초기속도, 초기 각도입니다. 그리고 1번줄에 clear, clc, clf는 스크립트가 실행될때마다 모든 것을 정리하기 위한 하나의 예의입니다.

그리고 주어진 함수는 아래와 같이 작성할 수 있습니다.


우선, 시간을 나눠줘야하기 때문에 위와같이 dt라는 변수로 시간을 나눠줄 준비를 하고 for구문을 통해서 i를 1~1000까지 (1번은 위에서 정의) 반복시켜주면서 문제에서 주어진 공식을 그대로 입력해줍니다. 이때 시간 t는 t(i)처럼 적어주어 배열로 인식하게 합니다. 그리고 마지막에 if구문으로 y값(높이)이 0보다 작아지면 for구문을 탈출하도록 만들어 주었습니다.


그리고 그래프를 만들어주기 위해서 위와 같이 작성해주었고 10번 줄에서 위에서 적었던 t(1) =0; 뒤에 x와 y의 초기위치를 대입해줍니다. plot 보다 초기위치 대입해주는 것을 먼저해주어야합니다. 이유는 plot 명령에 x,y가 있기 때문입니다.


그리고 axis 명령을 통해서 x와 y의 범위를 지정해줍니다. 이 값은 원래 그래프를 한번이상 그려본 후에 값을 지정해서 편리하게 볼 수 있게 하는 것인데, 쉬운 설명을 위해서 바로 좋게 볼수있는 값을 지정했습니다. [0 3 0 0.8]의 의미는 [xmin xmax ymin ymax] 입니다. 그리고 getframe 함수를 M 변수에 저장하는 형태로 동영상을 만들 준비를 합니다.


위에서 작성했던 for구문 안에 19~21번 줄을 입력해 줍니다. 위에서 말했던 9~11줄과 동일합니다. 단, 이때 M변수에는 M(i)처럼 i가 들어가게 됩니다. 그래야 i가 2부터 1000까지 실행되면서 getframe함수를 통해서 M에 저장됩니다.


마지막으로 결과물인 그래프를 쉽게보기 위해서 for구문 마지막에 pause 명령을 추가해서 다음 스텝으로 넘어가는 걸 일시정지하고 사용자가 아무키나 입력하게되면 다음 스텝이 표현되게 해줍니다. 그러면 사용자가 아무키나 누를때만 움직이기때문에 그래프를 이해하기 더욱 쉽습니다. 그리고 마지막 26번째줄에 movie 명령을 통해서 마지막에는 하나의 영상처럼 보이게하여 관람할 수 있게 합니다.

아래는 전체 코드와 결과입니다.






영상은 올리지 못했습니다. 위 사진 순서대로 이어지게 됩니다. 이상!