// MC930 - Trabalho prĂ¡tico 6 - 2s2003
// Fernando Kenji Iwai

#include "colors.inc"

background{ SummerSky }

camera {
  location  <  50, 50, 120.00 >
  right     <  1.0, 0.00, 0.00 >
  up        <  0.00, 0.00, 1.0 >
  sky       <  0.00, 1.00, 0.00 >
  look_at   <  50, 50, 0.00 >
} 

light_source {
  1*< 30.00, 50.00, 50.00 >
  color rgb 0.5*< 1,1,1 >
}


light_source {
  1*< 0.00, 0.00, 50.00 >
  color rgb 0.5*< 1,1,1 >
}


light_source {
  1*< 100.00, 100.00, 50.00 >
  color rgb 0.5*< 1,1,1 >
}


light_source {
  1*< 0, 100.00, 50.00 >
  color rgb 0.5*< 1,1,1 >
}


light_source {
  1*< 100.00, 0.00, 50.00 >
  color rgb 0.5*< 1,1,1 >
}

light_source {
  100*< 5.00, 15.00, -15.00 >
  color rgb 1.3*< 1,1,1 >
}

light_source {
  100*< -5.00, 15.00, -20.00 >
  color rgb 1.1*< 1,1,1 >
}

#declare tx1 =
  texture {
    pigment { Pink }
    finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.2 }
  }

#declare i = 0;         //Gera os nos

#declare gerador = seed(1234517);


 #while (i < 11)
  #declare j = 0;

     #while( j < 11 )

       #declare R = rand(gerador); 					// Tom do vermelho
       #declare G = rand(gerador); 					// Tom do verde
       #declare B = rand(gerador); 					// Tom do azul   
      sphere{ <10*i,10*j,0>, 1  pigment { rgb <R,G,B>} }
      
     #declare j= j+1;  
  
     #end	
  
     #declare i=i+1;

 #end

#declare cilindro = 
    cylinder{ <0,0,0>,<-1.2,1.2,1.2>, 0.6  pigment{ color Red }}

#declare caixa = 
    box{ <0,0,0> , <1,1,1> pigment {color Blue } }
 
#declare toros = torus { 0.5, 0.4 pigment { color Green} rotate 90*x}


#declare i = 0;  // Gera os arcos horizontais

#declare gerador = seed(34234798);

  #declare probh = 0.2; //define a probabilidade de um arco aparecer esparsidade

 #while (i < 10)

  #declare j = 0;

     #while( j < 10 )
   
     
      #if (rand(gerador)<probh)
 
      cylinder{ <10*i,10*j,0>,<10*(i+1),10*j,0> , 0.5 texture{ tx1}}	
     
      #declare k = 1;
     
       #while(k<4)
      
       #declare p = rand(gerador);
      
       #declare R = rand(gerador); 					// Tom do vermelho
       #declare G = rand(gerador); 					// Tom do verde
       #declare B = rand(gerador); 					// Tom do azul   

	#if(p<0.3)
	   object{ cilindro   translate<10*i+3*k, 10*j+1.2,0>  }
      #else
          #if(p<0.7)
           object{ caixa   translate<10*i+3*k, 10*j+1.2,0>  }  	    
          #else
       object{ toros   translate<10*i+3*k, 10*j+1.2,0>  }  	    	
          #end
      #end
       
      #declare k=k+1;
      #end	

     #else
    
    #end
      
     #declare j= j+1;  
  
     #end	
  
     #declare i=i+1;

 #end



#declare i = 0;  // Gera os arcos verticais

#declare gerador = seed(34234798);

  #declare probv = 0.3; //define a probabilidade de um arco aparecer esparsidade

 #while (i < 10)

  #declare j = 0;

     #while( j < 10 )
   
     
      #if (rand(gerador)<probv)
 
      cylinder{ <10*i,10*j,0>,<10*i,10*(j+1),0> , 0.5 texture{ tx1}}	
    

      #declare k = 1;
     
       #while(k<4)
      
       #declare p = rand(gerador);
      
       #declare R = rand(gerador); 					// Tom do vermelho
       #declare G = rand(gerador); 					// Tom do verde
       #declare B = rand(gerador); 					// Tom do azul   

	#if(p<0.3)
	   object{ cilindro   translate<10*i-1.2, 10*j+3*k,0>  }
      #else
          #if(p<0.7)
           object{ caixa   translate<10*i-1.2, 10*j+3*k,0>  }  	    
          #else
       object{ toros   translate<10*i-1.2, 10*j+3*k,0>  }  	    	
          #end
      #end
       
      #declare k=k+1;
      #end	
   	

     #else
    
    #end
      
     #declare j= j+1;  
  
     #end	
  
     #declare i=i+1;

 #end


#declare i = 0;  // Gera os arcos transversais

#declare gerador = seed(80809342);

  #declare probt = 0.35; //define a probabilidade de um arco aparecer esparsidade

 #while (i < 10)

  #declare j = 0;

     #while( j < 10 )
   
     
      #if (rand(gerador)<probt)
 
      cylinder{ <10*i,10*j,0>,<10*(i+1),10*(j+1),0> , 0.5 texture{ tx1}}	
       	


      #declare k = 1;
     
       #while(k<4)
      
       #declare p = rand(gerador);
      
       #declare R = rand(gerador); 					// Tom do vermelho
       #declare G = rand(gerador); 					// Tom do verde
       #declare B = rand(gerador); 					// Tom do azul   

	#if(p<0.3)
	   object{ cilindro   translate<10*i+3*k+-1.2, 10*j+3*k,0>  }
        #else
          #if(p<0.7)
           object{ caixa   translate<10*i+3*k+-1.2, 10*j+3*k+1.2,0>  }  	    
          #else
       object{ toros   translate<10*i-1.2+3*k, 10*j+3*k+1.2,0>  }  	    	
          #end
      #end
       
      #declare k=k+1;
  
    #end	
   	

     #else
    
    #end
    
        
     #declare j= j+1;  
  
     #end	
  
     #declare i=i+1;

 #end



plane {
 z, -1
pigment {color Gray}
 }