4.2.12 Script life

Utilisation : Les liens ne sont pas apparents. Pour obtenir des informations sur un mot clé, cliquez-le dans le script !

Le fichier d'initialisation :

; Persistence Of Vision raytracer version 3.5 sample file.

Antialias = Off

Antialias_Threshold = 0.1
Antialias_Depth = 2
Input_File_Name = life.pov

Initial_Frame = 1
Final_Frame = 500
Initial_Clock = 0
Final_Clock = 1

Cyclic_Animation = on
Pause_when_Done = off

Le script :

// Persistence Of Vision raytracer version 3.5 sample file.
// Life.Pov Celular autotomata life animation for POV-Ray 3.0
// by JIm WIlliamson 100041,2563
// using a character string to simulate arrays.
// Adapted for POV-Ray 3.1 using arrays by Chris Young

camera {location 100*y direction z*2.1 look_at <0, 0, 0>}
light_source {<10, 100, 5> color rgb 1}

#declare LifeObject = sphere {<0, 0, 0>, 0.49 no_shadow}
#declare LifeTex = texture {pigment {rgb 1}}

#if (frame_number != 0 & frame_number != 1)
	#include "lifedata.inc"
#else
	#declare NumCols = 60;
	#declare NumRows = 40;
	#declare Gen = 0;
	#declare Ratio = 0.75;
	#declare LifeGrid = array[NumRows][NumCols]
	#declare LR = seed(554);
	// Initialize grid with random values
	#declare Row = 0;
	#while (Row < NumRows)
		#declare Column = 0;
		#while (Column < NumCols)
			#if (rand(LR) > Ratio)
				#declare LifeGrid[Row][Column] = 1;
			#else
				#declare LifeGrid[Row][Column] = 0;
			#end
			#declare Column = Column+1;
		#end
		#declare Row = Row+1;
	#end
#end

#declare NC2 = -NumCols/2;
#declare NR2 = -NumRows/2;

// Display results
#declare Row = 0;
#while (Row < NumRows)
	#declare Column = 0;
	#while (Column < NumCols)
		object {
			LifeObject
			#if (LifeGrid[Row][Column])
				texture {LifeTex}
			#else
				pigment {rgb <1, 0, 0>}
				scale .5
			#end
			translate <Column, 0, Row>
			translate <NC2, 0, NR2>
		}
		#declare Column = Column + 1;
	#end
	#declare Row = Row + 1;
#end

#debug concat("Generation ", str(Gen, 3, 0), "\n")
#declare Gen = Gen+1;

// Compute next generation
#fopen LifeNext "lifedata.inc" write
#write (LifeNext, "#declare Gen=", str(Gen, 4, 0), ";\n")
#write (LifeNext, "#declare NumCols=", str(NumCols, 4, 0), ";\n")
#write (LifeNext, "#declare NumRows=", str(NumRows, 4, 0), ";\n")
#write (LifeNext, "#declare LifeGrid=array[NumRows][NumCols]\n")
#write (LifeNext, "{")
#declare Row = 0;
#while (Row < NumRows)
	#if (Row)
		#write (LifeNext, ",\n")
	#end
	#write (LifeNext, "{")
	#declare Column = 0;
	#while (Column < NumCols)
		#if (Column)
			#write (LifeNext, ",")
		#end
		#declare Near = 0;
		#declare YY = Row - 1;
		#while (YY <= Row + 1)
			#declare Y3 = mod(YY+NumRows, NumRows);
			#declare XX = Column - 1;
			#while (XX <= Column + 1)
				#declare X3 = mod(XX+NumCols, NumCols);
				#if ((XX=Column) & (YY=Row))
				#else
					#declare Near = Near+LifeGrid[Y3][X3];
				#end
				#declare XX = XX + 1;
			#end
			#declare YY = YY + 1;
		#end
		#if (LifeGrid[Row][Column])
			#if ((Near=2) | (Near=3))
				#write (LifeNext, "1")
			#else
				#write (LifeNext, "0")
			#end
		#else
			#if (Near = 3)
				#write (LifeNext, "1")
			#else
				#write (LifeNext, "0")
			#end
		#end
		#declare Column = Column + 1;
	#end
	#declare Row = Row + 1;
	#write (LifeNext, "}")
#end
#write (LifeNext, "}\n")
#fclose LifeNext

Et voici ce que nous obtenons, selon trois variantes (cliquez la première image fixe pour télécharger l'animation) :


animations_life.zip - 1812 Ko
Life

Blink4

Walker

Retour Retour