function plotSimulationPredictionInteractable(track, start, N, X, Y, predX, predY, refX, refY, colors)
w = 0.47;
figure;
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
plotRaceTrack(track);
axis equal;
eind = start+1;
plot(refX(start:eind),refY(start:eind), colors(1), 'LineWidth', 2)
plot(X(start:eind),Y(start:eind), colors(2), 'LineWidth', 2)
plot(predX((eind-1)*N+1:(eind-1)*N+N), predY((eind-1)*N+1:(eind-1)*N+N), '*g', 'MarkerSize', 1);
title('Race Track Simulation With Predictions');
xlabel('X (m)');
ylabel('Y (m)');
L(1) = plot(nan, nan, 'color', colors(1));
L(2) = plot(nan, nan, 'color', colors(2));
L(3) = plot(nan, nan, '*g');
legend(L, {'Reference track', 'NonLinear MPC', 'State Predictions'});
pb1 = uicontrol('style','push',...
'units','normalized',...
'position',[0.3 0.03 0.15 0.05],...
'fontsize',14,...
'string','Next State',...
'callback',{@(src,evnt)pb_next(track, start, eind, N, X, Y, predX, predY, refX, refY, colors, w)});
pb2 = uicontrol('style','push',...
'units','normalized',...
'position',[0.5 0.03 0.15 0.05],...
'fontsize',14,...
'string','Previous State',...
'callback',{@(src,evnt)pb_prev(track, start, eind, N, X, Y, predX, predY, refX, refY, colors, w)});
editBox = uicontrol('Style', 'Edit',...
'units','normalized',...
'String', '',...
'HorizontalAlignment', 'Center',...
'Position', [0.04 0.5 0.05 0.05]);
pb3 = uicontrol('style','push',...
'units','normalized',...
'position',[0.04 0.45 0.05 0.05],...
'fontsize',10,...
'string','Change Start',...
'callback',{@(src,evnt)pb_start(track, N, X, Y, predX, predY, refX, refY, colors, w, editBox)});
end
function pb_next(track, start, eind, N, X, Y, predX, predY, refX, refY, colors, w)
clf;
plotRaceTrack(track);
eind = min(length(X)-1,eind+1);
plot(refX(start:eind),refY(start:eind), colors(1), 'LineWidth', 2)
plot(X(start:eind),Y(start:eind), colors(2), 'LineWidth', 2)
plot(predX((eind-1)*N+1:(eind-1)*N+N), predY((eind-1)*N+1:(eind-1)*N+N), '*g', 'MarkerSize', 1);
axis equal;
title('Race Track Simulation With Predictions');
xlabel('X (m)');
ylabel('Y (m)');
xlim([min(min(X(start:eind)), min(predX((eind-1)*N+1:(eind-1)*N+N)))-w, max(max(X(start:eind)), max(predX((eind-1)*N+1:(eind-1)*N+N)))+w]);
ylim([min(min(Y(start:eind)), min(predY((eind-1)*N+1:(eind-1)*N+N)))-w, max(max(Y(start:eind)), max(predY((eind-1)*N+1:(eind-1)*N+N)))+w]);
L(1) = plot(nan, nan, 'color', colors(1));
L(2) = plot(nan, nan, 'color', colors(2));
L(3) = plot(nan, nan, '*g');
legend(L, {'Reference track', 'NonLinear MPC', 'State Predictions'});
pb1 = uicontrol('style','push',...
'units','normalized',...
'position',[0.3 0.03 0.15 0.05],...
'fontsize',14,...
'string','Next State',...
'callback',{@(src,evnt)pb_next(track, start, eind, N, X, Y, predX, predY, refX, refY, colors, w)});
pb2 = uicontrol('style','push',...
'units','normalized',...
'position',[0.5 0.03 0.15 0.05],...
'fontsize',14,...
'string','Previous State',...
'callback',{@(src,evnt)pb_prev(track, start, eind, N, X, Y, predX, predY, refX, refY, colors, w)});
editBox = uicontrol('Style', 'Edit',...
'units','normalized',...
'String', '',...
'HorizontalAlignment', 'Center',...
'Position', [0.04 0.5 0.05 0.05]);
pb3 = uicontrol('style','push',...
'units','normalized',...
'position',[0.04 0.45 0.05 0.05],...
'fontsize',10,...
'string','Change Start',...
'callback',{@(src,evnt)pb_start(track, N, X, Y, predX, predY, refX, refY, colors, w, editBox)});
end