/*Pov-Ray : 3.8 Scene File : lsys.pov Author : Ingo Janssen Date : 2023-06-04 */ #version 3.8; global_settings{ assumed_gamma 1.0 } #default{ finish{ ambient 0.1 diffuse 0.9 }} #declare A_F = 4; //build rules #declare BuildRules = dictionary; #macro F(Pos) // #end #declare BuildRules["F"] = 70; //chr(70) = F #macro Plus(Pos) #end #declare BuildRules["+"] = 43; #macro Min(Pos) #end #declare BuildRules["-"] = 45; // #macro Ltransform(Axiom, Rules, Iterations) #local Result = Axiom; #for (i, 1, Iterations) #local NewResult = ""; #local N = strlen(Result); #local j = 1; #while (j <= N) #local CurrentSymbol = substr(Result, j, 1); #ifdef(Rules[CurrentSymbol]) #local NewResult = concat(NewResult, Rules[CurrentSymbol]); #else #local NewResult = concat(NewResult, CurrentSymbol); #end #local j = j + 1; #end #local Result = NewResult; //#debug concat(Result, "\n") #end Result #end #macro Lvertices(Lstr) #local Pos = <0, 0, 0>; // #local Return = array{}; #for (i, 0, strlen(Lstr)-1) #local CurrentSymbol = substr(Lstr, i, 1); #ifdef (BuildRules[CurrentSymbol]) #switch (BuildRules[CurrentSymbol]) #case(70) #local Pos = F(Pos); #break #case(43) #local Pos = Plus(Pos); #break #case(45) #local Pos = Min(Pos); #break #end #local InArr = Return[dimension_size(Return,1)-1]; #if (Pos.x != InArr.x | Pos.y != InArr.y) #local Return[dimension_size(Return,1)] = ; #end #end #end Return #end #declare Axiom = "X"; #declare Rules = dictionary{ ["X"] : "-YF+XFX+FY-", ["Y"] : "+XF-YFY-FX+" } #declare Iterations = 5; #declare Lstr = Ltransform(Axiom, Rules, Iterations); #declare Vertices = Lvertices(Lstr); #for(i, 0, dimension_size(Vertices,1)-2) cylinder{ Vertices[i],Vertices[i+1],0.1 texture{pigment{rgb 1}} translate <-15, 15, 0> } #end camera{ location <0,0,-20> look_at <0,0,0> angle 120 right x*image_width/image_height } light_source{ <3000,3000,-3000> color rgb 1 } //---%<------%<------%<---