File talk:Helicobacter pylori diagram.png

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

POV-Ray source file

[edit]
//H_pylori.pov for POV-Ray3.6
//by Y tambe
//You can use this source file under either GFDL or CC-by-sa (dual license)
//You can use the images you render as free.

camera {
	angle 15
	location <0.0, 0.0, 180>
	look_at <0.0, 0.0, 0.0>
	rotate 20*x
}

light_source {
	<0, 0, 1000>
	rgb <1, 1, 1>
	shadowless
}


#declare h_pylori=

difference{
	blob{
		threshold 0.1
		#declare counter = 0;

		#declare posA = <0,0,0.5>;
		#while(counter < 130)
			#declare posA = vaxis_rotate(posA,y,5) + <0,0.1,0>;
			sphere{posA,0.8,1}
			#declare counter = counter+1;
		#end
		texture{
			pigment{color rgb <1, 1, 1>}
			finish{ambient 0.3 diffuse 0.7}
			normal{bozo 5 scale 0.2}
		}
	}

	blob{
		threshold 0.1
		#declare counter = 0;
		#declare posA = <0,0,0.5>;
		#while(counter < 130)
			#declare posA = vaxis_rotate(posA,y,5) + <0,0.1,0>;
			sphere{posA,0.7,1}
			#declare counter = counter+1;
		#end
		texture{
			pigment{color rgb <1, 1, 1>}
			finish{ambient 0.3 diffuse 0.7}
		}
	}
	translate -0.5*z
}


//flagile
#macro flagile(AA)
	union{
		#declare counter = 0;
		#declare pos1 = <0.1, 0,0>; 

		#while(counter < 100)
			#declare pos2 = vaxis_rotate(pos1, y, AA)+<0,-0.15,0>;
			cylinder{pos1, pos2, 0.05}
			#declare pos1 = pos2;
			#declare counter = counter+1;
		#end
		sphere{pos2, 0.15}

		translate -0.1*x
		texture{
			pigment{color rgb 0.5}
			finish{ambient 0.3 diffuse 0.7}
		}
	}
#end



//flagile2
#macro flagile2(AA,BB)
	union{
		#declare counter = 0;
		#declare pos1 = <0,-0.5,0>; 
		#declare vect = vnormalize(<AA, BB,0>)*0.15; 

		#while(counter < 100)
			cylinder{pos1, pos1+vect, 0.05}
			#declare pos1 = pos1+vect;
			#declare vect = 0.15*vnormalize(vaxis_rotate(vaxis_rotate(vect,y,5),z,2));
			#declare counter = counter+1;
		#end
		sphere{pos1,0.15}
		texture{
			pigment{color rgb 0.5}
			finish{ambient 0.3 diffuse 0.7}
		}
	}
#end


union{
	object{h_pylori}
	union{
		object{flagile(10) rotate 20*z rotate 10*y}
		object{flagile(12) rotate 20*z rotate 95*y}
		object{flagile(10) rotate 20*z rotate 160*y}
		object{flagile(15) rotate 20*z rotate 299*y}
		rotate -26*z
	}

	object{flagile2(0.3,0.2) rotate 180*z translate posA+<0,0,0.5>}
	object{flagile2(0.2,0.2) rotate 180*z translate posA rotate 50*y}
	object{flagile2(0.2,0.1) rotate 180*z translate posA+<0,0,1> rotate 220*y}
	object{flagile2(0.1,-0.3) rotate 180*z translate posA rotate 20*y}

	translate -6*y
	rotate 120*z
}