//Aluno: Lucas Moreira Vidigal Infante
//RA: 073371

background{ color rgb < 1.00, 1.00, 1.00 > }

#declare valores = array[7];
#declare valores[0] = 1;
#declare valores[1] = 2;
#declare valores[2] = 3;
#declare valores[3] = 4;
#declare valores[4] =  8;
#declare valores[5] =  11;
#declare valores[6] =  6;
/*
#declare valores[7] =  0;
#declar evalores[8] =  7;
#declare valores[9] =  6;
*/


#macro bit(valor)
    union{
        object { box{ <-0.1,-0.5,0>, <0.1,0.5,1>
	              pigment { rgb < 1, 0, 0> }}
	           }
	      
    #if (valor = 0)
        object { box { <-0.05,-0.1,0>, <0.05,0.1,-0.5>
                 pigment {rgb <0,1,0>}} rotate <0,-30,0> translate <0.1,0,0.4> }
    #else
        object { box { <-0.05,-0.1,0>, <0.05,0.1,0.5>
                 pigment {rgb <0,1,0>}} rotate<0,30,0> translate <0.1,0,0.4> }
    #end
    }
    
#end

#macro fileira(quantidade, valor)
    #local i = quantidade;
    #local j = valor;
    
    union{
    	  
        #while(i > 0)
            #local resto = mod(j,2);
    	      #local j = int(j/2);
            object {bit(resto) translate<0,i*1.5,0 >}
            #local i = i - 1;
        
        #end        
    }

#end


#macro abaco(fileiras,bits,vals)
    #local k = fileiras;
    #local i = bits;
    #local j = vals;
    union{
    	box{ <-0.05,-0.5,0>, <0.05,0.5*bits*3.5,1* -fileiras *1.6>}
    	#while(k > 0)
    	  	object{ fileira(i,j[k-1]) translate <0,0, k * -1.5> }    	   
    	   #local k = k-1;
    	#end
    }


#end
 

#include "eixos.inc"
union{
	object{ eixos(3.00) }
	object{ abaco(7,7,valores) translate <0,-15,1>}
	object{ abaco(4,4,valores)}
}



#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0.00 >;
#declare raio_cena = 15.0;
#declare dir_camera = <15, 5, 5>;
#declare dist_camera = 15.0;
#declare intens_luz = 0.80;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)