// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2022-01-06 23:02:28 by stolfi

// ======================================================================
// CORES E TEXTURAS

background{ color rgb < 0.75, 0.80, 0.85 > }

#declare tx_verde = 
  texture{
    pigment{ color rgb < 0.15, 1.00, 0.15 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_vermelho = 
  texture{
    pigment{ color rgb < 1.00, 0.10, 0.10 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }
  
#declare tx_azul = 
  texture{
    pigment{ color rgb < 0.10, 0.10, 1.00 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

// ======================================================================
// DESCRIÇÃO DA CENA 

// MACROS QUE CONSTITUEM OS OBJETOS DA CENA


#macro param_interpola1(tt, tt0, tt1, vv0, vv1)
  #local rr = (tt - tt0)/(tt1 - tt0);
  #local vv = (1 - rr)*vv0 + rr*vv1;
  vv
#end


#macro param_interpola3(tt, tt0,tt3, vv0,vv1,vv2,vv3)
  #local vv01 = param_interpola1(tt, tt0,tt3, vv0,vv1);
  #local vv12 = param_interpola1(tt, tt0,tt3, vv1,vv2);
  #local vv23 = param_interpola1(tt, tt0,tt3, vv2,vv3);
  #local vv012 = param_interpola1(tt, tt0,tt3, vv01,vv12);
  #local vv123 = param_interpola1(tt, tt0,tt3, vv12,vv23);
  #local vv0123 = param_interpola1(tt, tt0,tt3, vv012,vv123);
  vv0123
#end

#macro bola(posicao, raio)
  
  sphere{
    posicao,
    raio
    texture {tx_verde}
  }

#end 

#macro segtentaculo(M, P0, R0, P1, R1, P2, R2, P3, R3)
    #local i = 0;
    #local tt0 = 0;
    #local tt1 = M;
    union{
        #while(i < M)
            #local posicao = param_interpola3(i, tt0, tt1, P0, P1, P2, P3);
            #local raio = param_interpola3(i, tt0, tt1, R0, R1, R2, R3);
      
            object { bola(posicao, raio)
            }
            #local i = i + 1;
        #end
    }
#end 

#macro tentaculo(M, N, QPP, QRR)
    #local j = 0;
    union{
        #while(j < N)
            object { segtentaculo(M, QPP[j][0], QRR[j][0], QPP[j][1], QRR[j][1], QPP[j][2], QRR[j][2], QPP[j][3], QRR[j][3]) 
            }
            #local j = j + 1;
        #end
    }
#end


#macro tentaculo_animado(M, tt)
   # local N = 5;
   # local K = 4;
   # local QPP = array[K][4][N][4];
   # local QRR = array[K][4][N][4];
   
   //quadro 0
   #local QPP[0][1][0][0] = <70, 0, 20>;
   #local QPP[0][1][0][1] = <120, 0, 40>;
   #local QPP[0][1][0][2] = <150, 0, 60>;
   #local QPP[0][1][1][1] = <170, 0, 80>;
   #local QPP[0][1][1][2] = <210, 0, 100>;
   #local QPP[0][1][2][1] = <250, 0, 120>;
   #local QPP[0][1][2][2] = <280, 0, 160>;
   #local QPP[0][1][3][1] = <290, 0, 180>;
   #local QPP[0][1][3][2] = <310, 0, 210>;
   #local QPP[0][1][4][1] = <350, 0, 290>;
   #local QPP[0][1][4][2] = <370, 0, 300>;
   #local QPP[0][1][4][3] = <400, 0, 310>;
   
   #local QPP[0][1][0][3] = (QPP[0][1][0][2] + QPP[0][1][1][1])/2;
   #local QPP[0][1][1][0] = QPP[0][1][0][3];
   #local QPP[0][1][1][3] = (QPP[0][1][1][2] + QPP[0][1][2][1])/2;
   #local QPP[0][1][2][0] = QPP[0][1][1][3];
   #local QPP[0][1][2][3] = (QPP[0][1][2][2] + QPP[0][1][3][1])/2;
   #local QPP[0][1][3][0] = QPP[0][1][2][3];
   #local QPP[0][1][3][3] = (QPP[0][1][3][2] + QPP[0][1][4][1])/2;
   #local QPP[0][1][4][0] = QPP[0][1][3][3];
   
   
   #local QRR[0][1][0][0] = 10.0; // 30;
   #local QRR[0][1][0][1] =  9.7; // 29;
   #local QRR[0][1][0][2] =  9.0; // 27;
   #local QRR[0][1][1][1] =  8.5; // 25;
   #local QRR[0][1][1][2] =  8.5; // 25;
   #local QRR[0][1][2][1] =  7.0; // 20;
   #local QRR[0][1][2][2] =  7.0; // 20;
   #local QRR[0][1][3][1] =  9.8; // 20;
   #local QRR[0][1][3][2] =  8.5; // 20;
   #local QRR[0][1][4][1] =  6.0; // 14;
   #local QRR[0][1][4][2] =  4.0; // 7; 
   #local QRR[0][1][4][3] =  3.5; // 5; 
   
   #local QRR[0][1][0][3] = (QRR[0][1][0][2] + QRR[0][1][1][1])/2;
   #local QRR[0][1][1][0] = (QRR[0][1][0][2] + QRR[0][1][1][1])/2;
   #local QRR[0][1][1][3] = (QRR[0][1][1][2] + QRR[0][1][2][1])/2;
   #local QRR[0][1][2][0] = (QRR[0][1][1][2] + QRR[0][1][2][1])/2;
   #local QRR[0][1][2][3] = (QRR[0][1][2][2] + QRR[0][1][3][1])/2;
   #local QRR[0][1][3][0] = (QRR[0][1][2][2] + QRR[0][1][3][1])/2;
   #local QRR[0][1][3][3] = (QRR[0][1][3][2] + QRR[0][1][4][1])/2;
   #local QRR[0][1][4][0] = (QRR[0][1][3][2] + QRR[0][1][4][1])/2;
   
   

   //quadro 1
   #local QPP[0][2][0][0] = <70, 0, 20>;
   #local QPP[0][2][0][1] = <120, 0, 40>;
   #local QPP[0][2][0][2] = <150, 0, 60>;
   #local QPP[0][2][1][1] = <170, 0, 80>;
   #local QPP[0][2][1][2] = <210, 0, 100>;
   #local QPP[0][2][2][1] = <250, 0, 120>;
   #local QPP[0][2][2][2] = <280, 0, 160>;
   #local QPP[0][2][3][1] = <290, 0, 180>;
   #local QPP[0][2][3][2] = <310, 0, 210>;
   #local QPP[0][2][4][1] = <350, 0, 290>;
   #local QPP[0][2][4][2] = <370, 0, 310>;
   #local QPP[0][2][4][3] = <400, 0, 290>;
   
   #local QPP[0][2][0][3] = (QPP[0][2][0][2] + QPP[0][2][1][1])/2;
   #local QPP[0][2][1][0] = QPP[0][2][0][3];
   #local QPP[0][2][1][3] = (QPP[0][2][1][2] + QPP[0][2][2][1])/2;
   #local QPP[0][2][2][0] = QPP[0][2][1][3];
   #local QPP[0][2][2][3] = (QPP[0][2][2][2] + QPP[0][2][3][1])/2;
   #local QPP[0][2][3][0] = QPP[0][2][2][3];
   #local QPP[0][2][3][3] = (QPP[0][2][3][2] + QPP[0][2][4][1])/2;
   #local QPP[0][2][4][0] = QPP[0][2][3][3];
   
   
   #local QRR[0][2][0][0] = 10.0; // 30;
   #local QRR[0][2][0][1] =  9.7; // 29;
   #local QRR[0][2][0][2] =  9.0; // 27;
   #local QRR[0][2][1][1] =  8.5; // 25;
   #local QRR[0][2][1][2] =  8.5; // 25;
   #local QRR[0][2][2][1] =  7.0; // 20;
   #local QRR[0][2][2][2] =  7.0; // 20;
   #local QRR[0][2][3][1] =  9.8; // 20;
   #local QRR[0][2][3][2] =  8.5; // 20;
   #local QRR[0][2][4][1] =  6.0; // 14;
   #local QRR[0][2][4][2] =  4.0; // 7; 
   #local QRR[0][2][4][3] =  3.5; // 5; 
   
   #local QRR[0][2][0][3] = (QRR[0][2][0][2] + QRR[0][2][1][1])/2;
   #local QRR[0][2][1][0] = (QRR[0][2][0][2] + QRR[0][2][1][1])/2;
   #local QRR[0][2][1][3] = (QRR[0][2][1][2] + QRR[0][2][2][1])/2;
   #local QRR[0][2][2][0] = (QRR[0][2][1][2] + QRR[0][2][2][1])/2;
   #local QRR[0][2][2][3] = (QRR[0][2][2][2] + QRR[0][2][3][1])/2;
   #local QRR[0][2][3][0] = (QRR[0][2][2][2] + QRR[0][2][3][1])/2;
   #local QRR[0][2][3][3] = (QRR[0][2][3][2] + QRR[0][2][4][1])/2;
   #local QRR[0][2][4][0] = (QRR[0][2][3][2] + QRR[0][2][4][1])/2;
   
   
   
   //quadro 2

   #local QPP[1][1][0][0] = <70, 0, 20>;
   #local QPP[1][1][0][1] = <120, 0, 40>;
   #local QPP[1][1][0][2] = <150, 0, 60>;
   #local QPP[1][1][1][1] = <170, 0, 80>;
   #local QPP[1][1][1][2] = <210, 0, 100>;
   #local QPP[1][1][2][1] = <250, 0, 120>;
   #local QPP[1][1][2][2] = <280, 0, 160>;
   #local QPP[1][1][3][1] = <290, 0, 160>;
   #local QPP[1][1][3][2] = <310, 0, 140>;
   #local QPP[1][1][4][1] = <350, 0, 120>;
   #local QPP[1][1][4][2] = <370, 0, 100>;
   #local QPP[1][1][4][3] = <400, 0, 80>;
   
   #local QPP[1][1][0][3] = (QPP[1][1][0][2] + QPP[1][1][1][1])/2;
   #local QPP[1][1][1][0] = QPP[1][1][0][3];
   #local QPP[1][1][1][3] = (QPP[1][1][1][2] + QPP[1][1][2][1])/2;
   #local QPP[1][1][2][0] = QPP[1][1][1][3];
   #local QPP[1][1][2][3] = (QPP[1][1][2][2] + QPP[1][1][3][1])/2;
   #local QPP[1][1][3][0] = QPP[1][1][2][3];
   #local QPP[1][1][3][3] = (QPP[1][1][3][2] + QPP[1][1][4][1])/2;
   #local QPP[1][1][4][0] = QPP[1][1][3][3];
   
   
   #local QRR[1][1][0][0] = 10.0; // 30;
   #local QRR[1][1][0][1] = 17.7; // 29;
   #local QRR[1][1][0][2] = 25.0; // 27;
   #local QRR[1][1][1][1] = 17.5; // 25;
   #local QRR[1][1][1][2] = 11.5; // 25;
   #local QRR[1][1][2][1] =  7.0; // 20;
   #local QRR[1][1][2][2] =  7.0; // 20;
   #local QRR[1][1][3][1] =  9.8; // 20;
   #local QRR[1][1][3][2] =  8.5; // 20;
   #local QRR[1][1][4][1] =  6.0; // 14;
   #local QRR[1][1][4][2] =  4.0; // 7; 
   #local QRR[1][1][4][3] =  3.5; // 5; 
   
   #local QRR[1][1][0][3] = (QRR[1][1][0][2] + QRR[1][1][1][1])/2;
   #local QRR[1][1][1][0] = (QRR[1][1][0][2] + QRR[1][1][1][1])/2;
   #local QRR[1][1][1][3] = (QRR[1][1][1][2] + QRR[1][1][2][1])/2;
   #local QRR[1][1][2][0] = (QRR[1][1][1][2] + QRR[1][1][2][1])/2;
   #local QRR[1][1][2][3] = (QRR[1][1][2][2] + QRR[1][1][3][1])/2;
   #local QRR[1][1][3][0] = (QRR[1][1][2][2] + QRR[1][1][3][1])/2;
   #local QRR[1][1][3][3] = (QRR[1][1][3][2] + QRR[1][1][4][1])/2;
   #local QRR[1][1][4][0] = (QRR[1][1][3][2] + QRR[1][1][4][1])/2;
   
   
   
   //quadro 3
   #local QPP[1][2][0][0] = <70, 0, 20>;
   #local QPP[1][2][0][1] = <120, 0, 40>;
   #local QPP[1][2][0][2] = <150, 0, 60>;
   #local QPP[1][2][1][1] = <170, 0, 80>;
   #local QPP[1][2][1][2] = <210, 0, 100>;
   #local QPP[1][2][2][1] = <250, 0, 120>;
   #local QPP[1][2][2][2] = <280, 0, 160>;
   #local QPP[1][2][3][1] = <290, 0, 180>;
   #local QPP[1][2][3][2] = <310, 0, 210>;
   #local QPP[1][2][4][1] = <350, 0, 290>;
   #local QPP[1][2][4][2] = <370, 0, 300>;
   #local QPP[1][2][4][3] = <400, 0, 310>;
   
   
   #local QPP[1][2][0][3] = (QPP[1][2][0][2] + QPP[1][2][1][1])/2;
   #local QPP[1][2][1][0] = QPP[1][2][0][3];
   #local QPP[1][2][1][3] = (QPP[1][2][1][2] + QPP[1][2][2][1])/2;
   #local QPP[1][2][2][0] = QPP[1][2][1][3];
   #local QPP[1][2][2][3] = (QPP[1][2][2][2] + QPP[1][2][3][1])/2;
   #local QPP[1][2][3][0] = QPP[1][2][2][3];
   #local QPP[1][2][3][3] = (QPP[1][2][3][2] + QPP[1][2][4][1])/2;
   #local QPP[1][2][4][0] = QPP[1][2][3][3];
   
   
   #local QRR[1][2][0][0] = 10.0; // 30;
   #local QRR[1][2][0][1] =  8.7; // 29;
   #local QRR[1][2][0][2] =  6.0; // 27;
   #local QRR[1][2][1][1] = 11.5; // 25;
   #local QRR[1][2][1][2] = 18.5; // 25;
   #local QRR[1][2][2][1] = 25.0; // 20;
   #local QRR[1][2][2][2] = 12.0; // 20;
   #local QRR[1][2][3][1] =  9.8; // 20;
   #local QRR[1][2][3][2] =  8.5; // 20;
   #local QRR[1][2][4][1] =  6.0; // 14;
   #local QRR[1][2][4][2] =  4.0; // 7; 
   #local QRR[1][2][4][3] =  3.5; // 5; 
   
   #local QRR[1][2][0][3] = (QRR[1][2][0][2] + QRR[1][2][1][1])/2;
   #local QRR[1][2][1][0] = (QRR[1][2][0][2] + QRR[1][2][1][1])/2;
   #local QRR[1][2][1][3] = (QRR[1][2][1][2] + QRR[1][2][2][1])/2;
   #local QRR[1][2][2][0] = (QRR[1][2][1][2] + QRR[1][2][2][1])/2;
   #local QRR[1][2][2][3] = (QRR[1][2][2][2] + QRR[1][2][3][1])/2;
   #local QRR[1][2][3][0] = (QRR[1][2][2][2] + QRR[1][2][3][1])/2;
   #local QRR[1][2][3][3] = (QRR[1][2][3][2] + QRR[1][2][4][1])/2;
   #local QRR[1][2][4][0] = (QRR[1][2][3][2] + QRR[1][2][4][1])/2;
   
   
   //quadros calculados 
   #local i = 0;
   
   #if(tt <= 0.5)
     #local tt0 = 0;
     #local tt1 = 0.5;
      
     #while(i < N)
       #local j = 0;
       #while(j < 4)
         #local QPP[0][0][i][j] = param_interpola1(tt, tt0, tt1, QPP[1][2][i][j], QPP[0][1][i][j]);
         #local QPP[0][3][i][j] = param_interpola1(tt, tt0, tt1, QPP[0][2][i][j], QPP[1][1][i][j]); //!!!!!!!!!!!!!!!!!!
         #local j = j + 1;
       #end
       #local i = i + 1;
     #end
     
     #local QRR[0][0][0][0] = 10.0; // 30;
     #local QRR[0][0][0][1] =  9.7; // 29;
     #local QRR[0][0][0][2] =  9.0; // 27;
     #local QRR[0][0][1][1] =  8.5; // 25;
     #local QRR[0][0][1][2] =  8.5; // 25;
     #local QRR[0][0][2][1] =  7.0; // 20;
     #local QRR[0][0][2][2] =  7.0; // 20;
     #local QRR[0][0][3][1] =  6.8; // 20;
     #local QRR[0][0][3][2] =  6.5; // 20;
     #local QRR[0][0][4][1] =  6.0; // 14;
     #local QRR[0][0][4][2] =  4.0; // 7;
     #local QRR[0][0][4][3] =  3.5; // 5; 
   
     #local QRR[0][0][0][3] = (QRR[0][0][0][2] + QRR[0][0][1][1])/2;
     #local QRR[0][0][1][0] = (QRR[0][0][0][2] + QRR[0][0][1][1])/2;
     #local QRR[0][0][1][3] = (QRR[0][0][1][2] + QRR[0][0][2][1])/2;
     #local QRR[0][0][2][0] = (QRR[0][0][1][2] + QRR[0][0][2][1])/2;
     #local QRR[0][0][2][3] = (QRR[0][0][2][2] + QRR[0][0][3][1])/2;
     #local QRR[0][0][3][0] = (QRR[0][0][2][2] + QRR[0][0][3][1])/2;
     #local QRR[0][0][3][3] = (QRR[0][0][3][2] + QRR[0][0][4][1])/2;
     #local QRR[0][0][4][0] = (QRR[0][0][3][2] + QRR[0][0][4][1])/2;
     
     #local QPP[1][3][0][0] = QPP[0][0][0][0];
     #local QPP[1][3][0][1] = QPP[0][0][0][1];
     #local QPP[1][3][0][2] = QPP[0][0][0][2];
     #local QPP[1][3][1][1] = QPP[0][0][1][1]; 
     #local QPP[1][3][1][2] = QPP[0][0][1][2];
     #local QPP[1][3][2][1] = QPP[0][0][2][1];
     #local QPP[1][3][2][2] = QPP[0][0][2][2];
     #local QPP[1][3][3][1] = QPP[0][0][3][1];
     #local QPP[1][3][3][2] = QPP[0][0][3][2];
     #local QPP[1][3][4][1] = QPP[0][0][4][1];
     #local QPP[1][3][4][2] = QPP[0][0][4][2];
     #local QPP[1][3][4][3] = QPP[0][0][4][3];
   
   
     #local QPP[1][3][0][3] = QPP[0][0][0][3];
     #local QPP[1][3][1][0] = QPP[0][0][1][0];
     #local QPP[1][3][1][3] = QPP[0][0][1][3];
     #local QPP[1][3][2][0] = QPP[0][0][2][0];
     #local QPP[1][3][2][3] = QPP[0][0][2][3];
     #local QPP[1][3][3][0] = QPP[0][0][3][0];
     #local QPP[1][3][3][3] = QPP[0][0][3][3];
     #local QPP[1][3][4][0] = QPP[0][0][4][0];
   
   
     #local QRR[1][3][0][0] = 10.0; // 30;
     #local QRR[1][3][0][1] =  9.7; // 29;
     #local QRR[1][3][0][2] =  9.0; // 27;
     #local QRR[1][3][1][1] = 10.5; // 25;
     #local QRR[1][3][1][2] = 21.5; // 25;
     #local QRR[1][3][2][1] = 28.0; // 20;
     #local QRR[1][3][2][2] = 19.0; // 20;
     #local QRR[1][3][3][1] = 10.8; // 20;
     #local QRR[1][3][3][2] =  7.5; // 20;
     #local QRR[1][3][4][1] =  6.0; // 14;
     #local QRR[1][3][4][2] =  4.0; // 7; 
     #local QRR[1][3][4][3] =  3.5; // 5; 
   
     #local QRR[1][3][0][3] = (QRR[1][3][0][2] + QRR[1][3][1][1])/2;
     #local QRR[1][3][1][0] = (QRR[1][3][0][2] + QRR[1][3][1][1])/2;
     #local QRR[1][3][1][3] = (QRR[1][3][1][2] + QRR[1][3][2][1])/2;
     #local QRR[1][3][2][0] = (QRR[1][3][1][2] + QRR[1][3][2][1])/2;
     #local QRR[1][3][2][3] = (QRR[1][3][2][2] + QRR[1][3][3][1])/2;
     #local QRR[1][3][3][0] = (QRR[1][3][2][2] + QRR[1][3][3][1])/2;
     #local QRR[1][3][3][3] = (QRR[1][3][3][2] + QRR[1][3][4][1])/2;
     #local QRR[1][3][4][0] = (QRR[1][3][3][2] + QRR[1][3][4][1])/2;
     
     #local QRR[0][3][0][0] = 10.0; // 30;
     #local QRR[0][3][0][1] =  9.7; // 29;
     #local QRR[0][3][0][2] =  9.0; // 27;
     #local QRR[0][3][1][1] =  8.5; // 25;
     #local QRR[0][3][1][2] =  8.5; // 25;
     #local QRR[0][3][2][1] =  7.0; // 20;
     #local QRR[0][3][2][2] = 11.0; // 20;
     #local QRR[0][3][3][1] = 15.8; // 20;
     #local QRR[0][3][3][2] = 10.5; // 20;
     #local QRR[0][3][4][1] =  6.0; // 14;
     #local QRR[0][3][4][2] =  4.0; // 7; 
     #local QRR[0][3][4][3] =  3.5; // 5; 
   
     #local QRR[0][3][0][3] = (QRR[0][3][0][2] + QRR[0][3][1][1])/2;
     #local QRR[0][3][1][0] = (QRR[0][3][0][2] + QRR[0][3][1][1])/2;
     #local QRR[0][3][1][3] = (QRR[0][3][1][2] + QRR[0][3][2][1])/2;
     #local QRR[0][3][2][0] = (QRR[0][3][1][2] + QRR[0][3][2][1])/2;
     #local QRR[0][3][2][3] = (QRR[0][3][2][2] + QRR[0][3][3][1])/2;
     #local QRR[0][3][3][0] = (QRR[0][3][2][2] + QRR[0][3][3][1])/2;
     #local QRR[0][3][3][3] = (QRR[0][3][3][2] + QRR[0][3][4][1])/2;
     #local QRR[0][3][4][0] = (QRR[0][3][3][2] + QRR[0][3][4][1])/2;
      
   #else
     #local tt0 = 0.5;
     #local tt1 = 1;
      
     #local i = 0;
      
     #while(i < N)
       #local j = 0;
       #while(j < 4)
         #local QPP[1][0][i][j] = param_interpola1(tt, tt0, tt1, QPP[0][2][i][j], QPP[1][1][i][j]);
         #local QPP[1][3][i][j] = param_interpola1(tt, tt0, tt1, QPP[1][2][i][j], QPP[0][1][i][j]); 
         #local j = j + 1;
       #end
       #local i = i + 1;
     #end
     
    #local QRR[1][3][0][0] = 10.0; // 30;
    #local QRR[1][3][0][1] =  9.7; // 29;
    #local QRR[1][3][0][2] =  9.0; // 27;
    #local QRR[1][3][1][1] =  8.5; // 25;
    #local QRR[1][3][1][2] =  8.5; // 25;
    #local QRR[1][3][2][1] =  7.0; // 20;
    #local QRR[1][3][2][2] =  8.0; // 20;
    #local QRR[1][3][3][1] = 11.8; // 20;
    #local QRR[1][3][3][2] = 15.5; // 20;
    #local QRR[1][3][4][1] = 12.0; // 14;
    #local QRR[1][3][4][2] =  8.0; // 7; 
    #local QRR[1][3][4][3] =  3.5; // 5; 
   
    #local QRR[1][3][0][3] = (QRR[1][3][0][2] + QRR[1][3][1][1])/2;
    #local QRR[1][3][1][0] = (QRR[1][3][0][2] + QRR[1][3][1][1])/2;
    #local QRR[1][3][1][3] = (QRR[1][3][1][2] + QRR[1][3][2][1])/2;
    #local QRR[1][3][2][0] = (QRR[1][3][1][2] + QRR[1][3][2][1])/2;
    #local QRR[1][3][2][3] = (QRR[1][3][2][2] + QRR[1][3][3][1])/2;
    #local QRR[1][3][3][0] = (QRR[1][3][2][2] + QRR[1][3][3][1])/2;
    #local QRR[1][3][3][3] = (QRR[1][3][3][2] + QRR[1][3][4][1])/2;
    #local QRR[1][3][4][0] = (QRR[1][3][3][2] + QRR[1][3][4][1])/2;
    
    
    #local QRR[1][0][0][0] = 10.0; // 30;
    #local QRR[1][0][0][1] =  9.7; // 29;
    #local QRR[1][0][0][2] =  9.0; // 27;
    #local QRR[1][0][1][1] =  8.5; // 25;
    #local QRR[1][0][1][2] =  8.5; // 25;
    #local QRR[1][0][2][1] =  9.0; // 20;
    #local QRR[1][0][2][2] = 11.0; // 20;
    #local QRR[1][0][3][1] = 16.8; // 20;
    #local QRR[1][0][3][2] =  8.5; // 20;
    #local QRR[1][0][4][1] =  7.0; // 14;
    #local QRR[1][0][4][2] =  4.0; // 7; 
    #local QRR[1][0][4][3] =  3.5; // 5; 
   
    #local QRR[1][0][0][3] = (QRR[1][0][0][2] + QRR[1][0][1][1])/2;
    #local QRR[1][0][1][0] = (QRR[1][0][0][2] + QRR[1][0][1][1])/2;
    #local QRR[1][0][1][3] = (QRR[1][0][1][2] + QRR[1][0][2][1])/2;
    #local QRR[1][0][2][0] = (QRR[1][0][1][2] + QRR[1][0][2][1])/2;
    #local QRR[1][0][2][3] = (QRR[1][0][2][2] + QRR[1][0][3][1])/2;
    #local QRR[1][0][3][0] = (QRR[1][0][2][2] + QRR[1][0][3][1])/2;
    #local QRR[1][0][3][3] = (QRR[1][0][3][2] + QRR[1][0][4][1])/2;
    #local QRR[1][0][4][0] = (QRR[1][0][3][2] + QRR[1][0][4][1])/2;
      
   #end
   
   
   //********************************************************************
   
   
   
   
   
   //**********************************************************************
   
   #local framePP = array[N][4];
   #local frameRR = array[N][4];
   #local i = 0;
   
   #if(tt <= 0.5)
     #local tt0 = 0;
     #local tt1 = 0.5;
      
     #while(i < N)
       #local j = 0;
       #while(j < 4)
         #local framePP[i][j] = param_interpola3(tt, tt0, tt1, QPP[0][0][i][j], QPP[0][1][i][j], QPP[0][2][i][j], QPP[0][3][i][j]);
         #local frameRR[i][j] = param_interpola3(tt, tt0, tt1, QRR[0][0][i][j], QRR[0][1][i][j], QRR[0][2][i][j], QRR[0][3][i][j]);
         #local j = j + 1;
       #end
       #local i = i + 1;
     #end
      
   #else
     #local tt0 = 0.5;
     #local tt1 = 1;
      
     #local i = 0;
      
     #while(i < N)
       #local j = 0;
       #while(j < 4)
         #local framePP[i][j] = param_interpola3(tt, tt0, tt1, QPP[1][0][i][j], QPP[1][1][i][j], QPP[1][2][i][j], QPP[1][3][i][j]);
         #local frameRR[i][j] = param_interpola3(tt, tt0, tt1, QRR[1][0][i][j], QRR[1][1][i][j], QRR[1][2][i][j], QRR[1][3][i][j]);
         #local j = j + 1;
       #end
       #local i = i + 1;
     #end
      
   #end
   
   object{ tentaculo(M, N, framePP, frameRR)
   }
   

#end 



#include "eixos.inc"

#local M = 70;

union{
  object{  tentaculo_animado(M, clock)
  }
}
  

#include "camlight.inc"
#declare centro_cena = < 150, 300, 150>;
#declare raio_cena = 450;
#declare dir_camera = < 20, -300, 10 >;
#declare dist_camera = 5*raio_cena;
#declare intens_luz = 1.20;

camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)