// Este código realiza a animação dos dados gerados na integração numérica das equações para a
// coreografia. As variáveis utilizadas são as mesmas definidas no arquivo coreografias.sce



///////////////////////////////////////////////////////////////////////////////////////////////////////
// Leitura e processamento dos dados contidos nas variáveis "sol".                                   //
///////////////////////////////////////////////////////////////////////////////////////////////////////
skip = 5              // cada quadro pula skip*h unidades de tempo.
an_x1=sol(1,1:skip:$)
an_y1=sol(3,1:skip:$)
an_x2=sol(5,1:skip:$)
an_y2=sol(7,1:skip:$)
an_x3=sol(9,1:skip:$)
an_y3=sol(11,1:skip:$)

// a matriz dados guarda as coordenadas cartesianas utilizadas na animação. 
dados=[an_x1;an_y1;an_x2;an_y2;an_x3;an_y3]' 

// limpeza dos dados desnecessários.
clear an_x1; clear an_y1
clear an_x2; clear an_y2
clear an_x3; clear an_y3

num_q=size(dados,1) // quantidade de quadros na animação.

// intervalo na coordenada x para animação.
int_coord_x=[min([dados(:,1);dados(:,3);dados(:,5)]);max([dados(:,1);dados(:,3);dados(:,5)])]
// intervalo na coordenada y para animação.
int_coord_y=[min([dados(:,2);dados(:,4);dados(:,6)]);max([dados(:,2);dados(:,4);dados(:,6)])]
///////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////
// Abertura da janela gráfica e animação //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////

// A animação é formada pela exibição de duas composições gráficas (dois gráficos distintos).
// O 1º gráfico é formada pelo ponto com as coordenadas do corpo 1.
// O 2º gráfico é formado pelo ponto com as coordenadas do corpo 2.
// O 3º gráfico é formado pelo ponto com as coordenadas do corpo 3.
// As posições são atualizadas a cada instante da integração.
// Como não são criadas novas janelas gráficas, o resultado dos comandos "plot" são enviados
// à mesma janela gráfica. 


// Abre janela gráfica e atribui manipuladores à janela e às propriedades dos eixos coordenados.
fig=scf()
eixos=gca()

eixos.isoview="on"                          // mantêm as proporções 1:1.
eixos.data_bounds=[int_coord_x,int_coord_y] // altera as dimensões da janela.
xgrid                                       // desenha um reticulado.

drawlater // Suspende a exibição das alterações na janela gráfica.                           


// Desenha o ponto do corpo 1 e define as propriedades gráficas para os demais pontos:
// pontos na cor vermelha de tamanho 5pt
plot(dados(1,1),dados(1,2),'r.')  // Adiciona a primeira composição gráfica à janela. Pontos em cor vermelha.
eixo=fig.children                 // Define o manipulador do eixo.
compos1=eixo.children             // Define o manipulador da composição.
ponto1=compos1.children            // Define o manipulador do 1º gráfico.
ponto1.mark_size_unit="point"
ponto1.mark_size=5
ponto1.foreground=5              // 5 é o índice da cor verm. no colormap padrão.

// Desenha o ponto do corpo 2 e define as propriedades gráficas para os demais pontos:
// pontos na cor verde de tamanho 5pt
plot(dados(1,3),dados(1,4),'g.') // Adiciona a primeira composição gráfica à janela. Pontos em cor verde.
compos2=eixo.children(1)         // Define o manipulador da composição. Segunda composição (obs.: ordem decres.)
ponto2=compos2.children          // Define o manipulador do 2º gráfico.
ponto2.mark_size_unit="point"
ponto2.mark_size=5
ponto2.foreground=3              // 3 é o índice da cor verde no colormap padrão.

// Desenha o ponto do corpo 3 e define as propriedades gráficas para os demais pontos:
// pontos na cor verde de tamanho 5pt
plot(dados(1,5),dados(1,6),'b.') // Adiciona a primeira composição gráfica à janela. Pontos em cor azul.
compos3=eixo.children(1)         // Define o manipulador da composição. Segunda composição (obs.: ordem decres.)
ponto3=compos3.children          // Define o manipulador do 3º gráfico.
ponto3.mark_size_unit="point"
ponto3.mark_size=5
ponto3.foreground=2              // 2 é o índice da cor azul no colormap padrão.

drawnow                          // Exibe a janela gráfica com as alterações.

// Animação

for i=2:num_q
  drawlater                         // Suspende a exibição das alterações na janela gráfica.
  ponto1.data=dados(i,1:2)          // Atualiza o ponto do 1º gráfico.
  ponto2.data=dados(i,3:4)          // Atualiza o ponto do 2º gráfico.
  ponto3.data=dados(i,5:6)          // Atualiza o ponto do 3º gráfico.
  drawnow                           // Exibe a janela gráfica com as alterações.
end

  
