검색결과 리스트
글
얼마전에 MATLAB m-file로 정말 허덥하게 간단한 애니메이션 구현([공학기초/MATLAB] - MATLAB에서 간단히 움직이는 그림 구현하기 (애니메이션 구현))을 이야기 했었는데요. 이걸 다시 Simulink에서 불러보는 작업을 해서, Simulink상에서도 어떤 결과를 애니메이션화해서 관찰할 수 있도록 해보겠습니다. |
| Simulink에서 주의해야할 점 ! |
일단 이전에 소개한 글([공학기초/MATLAB] - MATLAB에서 간단히 움직이는 그림 구현하기 (애니메이션 구현))에서 사용한 코드를
figure('name','Animation Test','numbertitle','off');
x = [-3 -3.5 -4 -4 -3];
y = [1 1.5 1 -1 -1];
box = fill(x,y, 'r','EraseMode','normal');
grid on
hold on
axis([-5 5 -5 5]);
t = 0:0.01:2*pi;
plot(3*cos(t), 3*sin(t))
plot(17^0.5*cos(t), 17^0.5*sin(t))
plot((3.5^2+1.5^2)^0.5*cos(t), (3.5^2+1.5^2)^0.5*sin(t), 'c')
for t = 0:0.01:2*pi
updatedX = [10^0.5*cos(-(t+pi+atan(1/3))) (3.5^2+1.5^2)^0.5*cos(-(t+pi+atan(3/7))) 17^0.5*cos(-(t+pi+atan(1/4))) 17^0.5*cos(-(t+pi-atan(1/4))) 10^0.5*cos(-(t+pi-atan(1/3)))];
updatedY = [10^0.5*sin(-(t+pi+atan(1/3))) (3.5^2+1.5^2)^0.5*sin(-(t+pi+atan(3/7))) 17^0.5*sin(-(t+pi+atan(1/4))) 17^0.5*sin(-(t+pi-atan(1/4))) 10^0.5*sin(-(t+pi-atan(1/3)))];
set(box, 'Xdata', updatedX,'Ydata', updatedY);
drawnow;
for i=1:5000000
temp = i;
end
end
간단히 함수화 해서 시뮬링크의 MATLAB-Function 블럭을 사용할려고 하면 문제가 발생합니다. 원코드를 유심히 보면, 15행부터 시작되는 for문만 함수화되어야하거든요. 그럼 그 이전코드는 그냥 실행해주면 되겠지 하시면 곤란합니다. 바로 for문내에서 set 명령으로 5행의 fill 명령으로 만들어진 box라는 개체를 계속 업데이트하거든요. 시뮬링크의 fnc 블럭은 외부변수를 지정하지 않으면 workspace에서 간단히 불러오지 못합니다.
| Simulink에서 구현가능하게 변경하기 ! |
이제 시뮬링크에서 변경가능하게 바꾸도록 해보죠. 먼저
위 그림이 시뮬링크로 구현한 것입니다. Clock블럭은 시간을 인가하기 위한 것이고, "Click here before running this simulation"이라는 것은 [공학기초/MATLAB] - Simulink에서 Annotation 사용하기 에서 이야기한 Annotation입니다. 그것의 CallBack함수를 지정하는 부분에 위 코드의 for문 전까지의 내용을 넣어둡니다.
위와 같습니다. 그리고 Constant 블럭에 box가 들어가 있는 것을 볼 수 있는데요. 그것은 에초 코드에서 for문 안을 함수로 만들때 그 안에서 사용하는 set명령이 box개체를 참조할 수 있도록 해주기 위해서입니다. 이제 함수를 만들어야겠네요.^^
function y = Ani(t, boxName)
updatedX = [10^0.5*cos(-(t+pi+atan(1/3))) (3.5^2+1.5^2)^0.5*cos(-(t+pi+atan(3/7))) 17^0.5*cos(-(t+pi+atan(1/4))) 17^0.5*cos(-(t+pi-atan(1/4))) 10^0.5*cos(-(t+pi-atan(1/3)))];
updatedY = [10^0.5*sin(-(t+pi+atan(1/3))) (3.5^2+1.5^2)^0.5*sin(-(t+pi+atan(3/7))) 17^0.5*sin(-(t+pi+atan(1/4))) 17^0.5*sin(-(t+pi-atan(1/4))) 10^0.5*sin(-(t+pi-atan(1/3)))];
set(boxName, 'Xdata', updatedX,'Ydata', updatedY);
drawnow;
for i=1:5000000
temp = i;
end
y = 1;
이렇게 하면 됩니다. 뭐 너무 간단했나요^?^. 사용한 mdl화일과 m화일은 첨부해둡니다^^. 아참 실행할때, 꼭 같은 폴더에 두시고, path 지정하시고, 위 Annotation을 클릭해서 실행하시고, 그러면 시작되는 첫화면이 나와요... 그리고 play버튼을 누르세요^^
'The Robot > Prog.Lang.' 카테고리의 다른 글
| [MATLAB 연재] 1. MATLAB의 각 Window 사용법 (48) | 2010/03/03 |
|---|---|
| MATLAB Figure에서 그리스 문자나 수학기호 삽입하기 (8) | 2009/12/07 |
| Simulink에서 Mask 하기 (2) | 2009/10/25 |
| Simulink에서 간단한 애니메이션 구현하기 (14) | 2009/10/16 |
| MATLAB에서 간단히 움직이는 그림 구현하기 (애니메이션 구현) (18) | 2009/10/10 |
| MATLAB에서 컴파일, 독립 실행 파일 만들기 (16) | 2009/07/23 |
| MATLAB/Simulink Scope 창에서 데이터 축출하기 (10) | 2009/07/11 |
| Embedded Block을 이용해보자. (0) | 2009/04/15 |
Ani.m

아악! ㅎ
매틀랩.. 역시 쳐다만 보고 있어도 머리가 아프군요.
언제봐도 반가지 않은 녀석임이 분명하네요 ㅎㅎ
왜요?^^ 전 이놈이 귀여운데요..ㅋㅋㅋㅋ 제말을 잘 들을때만...ㅋㅋ
ㅎㅎㅎ 역시 대단하십니다 (뭔지는 아니? ㅋ)
ㅎㅎ.. 사실 뭔지 아시고나면 안 대단한거랍니다...
그저 블로그에 너무 업데이트를 소흘히하지 않나 하는 생각에 깨작거려본것입니다..^^
대단하세요~~이런 과정을 거처서 움직이기할수있군요~~
비가왓네요~~~추워지려나봐요~~따스하고 행복한 주말되세요^^
예... 따뜻한 겨울 당연히 저도 보내고싶지요...^^
엘고님도;... 따뜻한 주말 보내셨죠?^^
ㅠ 제 매틀랩은 annotation 이 없네요 ㅠ
그런 경우도 있나요?? 음.. annotation이 없는 경우가 ... ㅠㅠ
matlab 프로그램을 실행하면서 오피스 제품을 사용하면 키보드 자동변환기능이 제대로 작동 안하는데 그런 현상 보셨어요? 우와~정말 레포트 작성하기 정말 힘드네요. 헉헉....
저는 경험해보지 못한 현상인데요...^^
비밀댓글입니다
그냥 질문을 하시면 됩니다.
개인이 운영하는 블로그이니.. 제가 아는 것은 대답하고
잘 모르지만, 이렇게 되면 안될까.. 하는 것은 추측이라고 말씀을 드리고,
또 모르는 것은 모른다고 한답니다...^^
핑크윙크님의 블로그를 가끔 숙제를 하면서 참고하는데요, 고맙게 잘 보고 있습니다.
질문!
맨 마지막 그림의 코드 'function y ~중간내용생략~ y = 1;' 를 어디에다가 써야 되는 것인가요?
annotation을 더블클릭하셔서 들어가시면 됩니다.
annotation은 그냥 화면을 더블클릭하면 커서가 나타나는데 글자를 입력하시면 됩니다.