%----------------------------------------------------------------  
%       This program is nonlinear system
%         
%      
%       
%       Notice!
%       call furiko3_eq.m
%
%            2011.11.18                          produced by kizawa
%--------------------------------------------------------------------------

clc
clf
close all  %すべての Figure を削除
clear all
format long e


%---phisical parameter---%
m=0.5;
c=0.05;
L=0.3;
%----setup---%

sampling=0.01;%サンプリング時間[sec]
kaisu=1000;
timespan=sampling*kaisu;% シミュレーション時間
%--- initial state ----
x0=[pi/6    %角度の初期値[rad]
    0   ];  %角速度の初期値

%---微分方程式を解くメインプログラム----%
ni=1;
while(ni<1000)
[Tn,Yn]=ode45(@furiko1_eq,[0 sampling],x0,[],m,c,L);%微分を数値的に解く関数,分割数はMTALABまかせ
                                                    %微分方程式はサブルーチン化furiko3_eq.m
           if ni==1
              YY(1,:)=Yn(1,1:2);     %初期値の角度と角速度
              TT(1,:)=Tn(1,1);       %初期値の時間
           else    
             YY(ni,:)=Yn(size(Yn,1),1:2);   %計算後の角度と角速度(分割数の最大値を割り出す)
             TT(ni,1)=sampling*ni;          %計算後の時間
           end
           %---- Up data------
           x0=Yn(size(Yn,1),1:2);    %初期値の入れ替え
           ni=ni+1;                  %次のステップへ
end  
%-----グラフを描く-----%
figure(1)
plot(TT,YY(:,1),'-')
xlabel('Time[sec]');
ylabel('Angle[rad]')
%----Animation---%
figure(2)
xx=L*sin(YY(:,1));
yy=-L*cos(YY(:,1));

h=plot([0;0],[xx(1),yy(1)],'linewidth',2,'Marker','o');
axis([-L-0.1 L+0.1 -L-0.1 L+0.1]);
for i=1 : size(TT)
    set(h,'xdata',[0,xx(i)],'ydata',[0,yy(i)],'Erasemode','xor');
    drawnow         % drawnowを入れるとアニメーションになる
    pause(0.01);     % ゆっくりにするためにpauseで少し停止
    grid on
    
    movmov(i) = getframe;           % アニメーションのフレームをゲットする
end   

% movie.aviという、ファイルができあがる
movie2avi(movmov,'movie.avi');

%あとは、できあがったmovie.aviファイルを、パワポに貼り付けるだけ！

