%% Simulación de móvil sujeto a y=f(x)
% debe ejecutarse MountainCarModelling.mlx antes de ejecutarse este
% archivo.
% Vídeo: http://personales.upv.es/asala/YT/V/mcm5sim.html

if(~caso_concreto) %no podemos simular "numéricamente" en simbólico
    return %tampoco podemos resolver las ecuaciones diferenciales no-lineales
end
opts=odeset('AbsTol',1e-5,'RelTol',1e-4);
F_ext_parasimular=@(t) 0*sin(4*t)^3;
Tfinal=15;
d2xdt=matlabFunction(aceleracionx,'Vars',{x, v_x, F_externa})
dEstadodt=@(t,estado) [estado(2);d2xdt(estado(1),estado(2),F_ext_parasimular(t))];
EstadoInicial=[1.9;0];
[TiemposEL,EstadosEL]=ode45(dEstadodt,[0 Tfinal],EstadoInicial,opts);
figure(1)
plot(TiemposEL,EstadosEL(:,1)), grid on, xlabel('Tiempo'), ylabel('Posición horizontal');
pause
figure(2)
Tfin=TiemposEL(end);
dT_anim=0.04;
T_anim=0:dT_anim:Tfin;
PosicionX=EstadosEL(:,1);
PosicionXAnim=interp1(TiemposEL,PosicionX,T_anim);
Nmuestras=length(T_anim);
MF=matlabFunction(f); %forma de la curva, compilada.
PosVerticalAnim=MF(PosicionXAnim); %altura y en cada frame (sólo simulamos x)
mx=min(PosicionX);Mx=max(PosicionX);
LineaX=(mx-.1):0.04:(Mx+.1);
LineaY=MF(LineaX);MY=max(LineaY);
for k=1:Nmuestras
    plot(LineaX,LineaY,'LineWidth',2), hold on
    plot(PosicionXAnim(k),PosVerticalAnim(k),'or','MarkerSize',10,'LineWidth',5)
    hold off
    axis([mx Mx 0 MY]), 
    axis equal, grid on
    drawnow
    pause(0.005)
end
