// Desenho do contagio POV-ray
// Last edited on 2020-12-08 11:03:33 by jstolfi
#version 3.6;
// ======================================================================
// CORES E TEXTURAS
background{ color rgb < 0.75, 0.80, 0.85 > }
#declare tx_plastico =
texture{
pigment{ color rgb < 0.80, 0.80, 0.80 > }
finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
}
#declare tx_fosca =
texture{
pigment{ color rgb < 1.00, 0.30, 0.10 > }
finish{ diffuse 0.9 ambient 0.1 }
}
// ======================================================================
// DESCRICAO
// Partes da cena:
#declare pessoa =
cylinder{
<0.00, 0.00, -1.5>,
<0.00, 0.00, +1.5>,
0.75
texture{ tx_fosca }
}
#macro linha(P, newP)
union{
cylinder{
,
,
0.15
texture {tx_plastico}
}
}
#end
#declare roleta = seed(12345);
#declare larg_diag = 60.0;
#macro arvore(P,S,A,B,T)
union{
object {pessoa translate }
#if (T > 0)
// n = numero de pessoas contagiadas a partir deste no
#local n = S/(S + 1);
#while (rand(roleta) < n)
#local difx = (rand(roleta)*0.2 - 0.1)*larg_diag;
#local dify = (rand(roleta)*0.2 - 0.1)*larg_diag;
#local difz = rand(roleta)*(B-A)+A;
// newP = posicao da proxima pessoa contagiada
#local newP = ;
object {linha(P, newP)}
object {arvore(newP, S, A, B, T-1)}
#end
#end
}
#end
#macro diagrama(N,S,A,B,T)
union{
#local i = 0;
#while(i < N)
#local newx = (rand(roleta) - 0.5) * larg_diag;
#local newy = (rand(roleta) - 0.5) * larg_diag;
#local P = ;
object{arvore(P, S, A, B, T-1)}
#local i = i + 1;
#end
box{ 0.5*larg_diag*< -1, -1, 0 >, 0.5*larg_diag*< +1, +1, -0.01> texture{ tx_fosca } }
}
#end
#include "eixos.inc"
// Aqui esta a cena, finalmente:
#declare Tmax = 15;
#declare AA = 7;
#declare BB= 14;
union{
//object{ eixos(larg_diag/2.0) }
object{diagrama(20, 0.80, AA,BB, Tmax) translate < +0.7*larg_diag, -1.2*larg_diag, 0 > }
object{diagrama(20, 1.00, AA,BB, Tmax) }
object{diagrama(20, 1.25, AA,BB, Tmax) translate < -0.7*larg_diag, +1.2*larg_diag, 0 > }
}
#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, Tmax*(AA+BB)/4 >;
#declare raio_cena = 3*larg_diag;
#declare dir_camera = < 7.00, 4.00, 3.50 >;
#declare dist_camera = 15*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)