// Exercício de Laboratório 4
// Aluno: Gustavo Fernandez da Costa
// RA: 169296

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

background{ color rgb < 0.8, 0.7, 0.5 > }

#declare tx_corda =
    texture{
     pigment{ color rgb < 0.3, 0.2, 0.2 > }
     finish{ diffuse 0.9 ambient 0.1 }
}

// ======================================================================
// DESCRICAO DA CENA

#include "eixos.inc"

#macro corda_circular(raio, n_elos)
	union{

		#declare i=0;
		#while ( i <= 1 )
      #declare pos = i*2*pi;
      #declare centro = < 5*sin(pos), 5*cos(pos), 0 >;
			object{ sphere { <centro.x, centro.y, centro.z>, raio texture {tx_corda}}}
			#declare i = i + 1/n_elos;
		#end
  }
#end

#macro corda_quadrada(raio, n_elos)
	union{

		#declare i=0;
		#while ( i <= 1 )
      #declare pos = i*2*pi;
      #if (i <= 0.25)
        #declare centro = < 20*sin(pos) - 10, 0, 0 >;
			#else
				#if (i <= 0.5)
					#declare centro = < 10, 0, -20*cos(pos) >;
				#else
          #if (i <= 0.75)
            #declare centro = < -20*cos(pos) - 10, 0, 20 >;
          #else
            #declare centro = < -10, 0, -20*sin(pos) >;
          #end
				#end
			#end
			object{ sphere { <centro.x, centro.y, centro.z>, raio texture {tx_corda}}}
			#declare i = i + 1/n_elos;
		#end
  }
#end

#macro corda_pista(raio, n_elos)
	union{

		#declare i=0;
		#while ( i <= 1 )
      #declare pos = i*2*pi;
      #if (i <= 0.125)  //pos de 0 a pi/4
        #declare centro = < 0, 0, 18*sin(2*pos) >;
			#else
				#if (i <= 0.25) // pos de pi/4 a pi/2
					#declare centro = < -2 + 2*sin(2*pos), 0, 18 - 2*cos(2*pos) >;
				#else
          #if (i <= 0.375)  //pos de pi/2 a 3pi/4
            #declare centro = < -2 + 18*sin(2*pos), 0, 20 >;
          #else
            #if (i <= 0.5)  //pos de 3pi/4 a pi
              #declare centro = < -20 + 4*sin(4*pos), 0, 16 - 4*cos(4*pos) >;
            #else
              #if (i <= 0.625)  //pos de 0 a pi/4
                #declare centro = < -20 + 4*sin(2*pos), 0, 12 >;
              #else
                #if (i <= 0.75)  //pos de pi/4 a pi/2
                  #declare centro = < -16 - 6*cos(2*pos), 0, 6 + 6*sin(2*pos) >;
                #else
                  #if (i <= 0.875)  //pos de pi/2 a 3pi/4
                    #declare centro = < -10, 0, 6 + 6*sin(2*pos) >;
                  #else //pos de 3pi/4 a pi
                    #declare centro = < -5 + 5*cos(4*pos) , 0, 5*sin(4*pos) >;
                  #end
                #end
              #end
            #end
          #end
				#end
			#end
			object{ sphere { <centro.x, 0, centro.z>, raio texture {tx_corda}}}
			#declare i = i + 1/n_elos;
		#end
  }
#end

// CENA

union{
	object{ eixos(3.00) }
	object{ corda_pista(0.5, 700) }
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0.00 >;
#declare raio_cena = 50.0;
#declare dir_camera = < 1.0, 1.0, 1.0 >;
#declare dist_camera = 10*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)