User:Laurier Rochon/prototyping/l-systems: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
No edit summary
 
(8 intermediate revisions by one other user not shown)
Line 1: Line 1:
[[Category:Prototyping]]
[[Category:Turtle Graphics]]
== L-Systems ==
== L-Systems ==
''An L-system or Lindenmayer system is a parallel rewriting system, namely a variant of a formal grammar, most famously used to model the growth processes of plant development, but also able to model the morphology of a variety of organisms. L-systems can also be used to generate self-similar fractals such as iterated function systems. L-systems were introduced and developed in 1968 by the Hungarian theoretical biologist and botanist from the University of Utrecht, Aristid Lindenmayer (1925–1989).''
From [http://en.wikipedia.org/wiki/L-system WikiPlagiat]
== turtle VS TurtleWorld ==
Discovery of the day : TURTLE! (not TurtleWorld, the library)
It actually appears that Python has built-in turtle graphics, meaning that we can bypass BOB (being in the 'swampy folder' etc., and just use a 'pointer' triangle, with much clearer methods. [http://docs.python.org/library/turtle.html This] is the page for it. It's well documented - for example, you can use 'setcoords(x,y)' to set the pointer at the right spot. The method 'getheading' is also tremendously useful in knowing what angle bob is oriented towards. One big problem with turtle vs turtle world : it's slowwwwwwwwwwwwww. Max speed is '10', which equates to about '1' in Turtle World terms.
== Going green with recursive algorithms ==
Takes about 20-30 minutes to generate at MAX speed (with TurtleWorld library. About 10X with native turtle lib)
Rules:
*X -> F-[[X]+X]+F[+FX]-X
*F -> FF
Interpretation:
*Start symbol = X
*F = forward 2
*+ = right 25
*- = left 25
[[File:tree1.png]]
Rule:
*F -> FF-[-F+F+F]+[+F-F-F]
Interpretation:
*Start symbol = F
*F = forward 5
*+ = right 25
*- = left 25
[[File:tree2.png]]
(the tree rules I got [http://ww2.cs.mu.oz.au/~bjpop/lsystem/lsystem.html here].)
---------------------------------


Using basic transformation rules such as :  
Using basic transformation rules such as :  
Line 10: Line 64:
'''What the symbols mean'''
'''What the symbols mean'''


F is forward by X pixels
*F is forward by X pixels
+ is turn Y degrees
*+ is turn Y degrees
- is turn -Y degrees
*- is turn -Y degrees
[ is record the current state
*[ is record the current state
] restore the matching last ] state
*] restore the matching last ] state


Will yield something like :
Will yield something like :
Line 23: Line 77:


[[File:Sss1.png]]
[[File:Sss1.png]]
== Soft (Python) ==
(with TurtleWorld)
<source lang='python'>
from TurtleWorld import *
world = TurtleWorld()
bob = Turtle()
#make it FAST!
bob.delay = 0.0001
#draw upwards, plz
lt(bob,90)
#gimme some room...we'll fullscreen the window
bob.x=200
bob.y=-300
#starting axiom
n = 'X'
#replacement rules
s1 = 'X'
s2 = 'F-[[X]+X]+F[+FX]-X'
s3 = 'F'
s4 = 'FF'
#number of steps
steps = 7
for i in range(steps):
#apply the rules, do the replacements
n = n.replace(s1,s2)
n = n.replace(s3,s4)
#angle to turn
a = 25
#declare my arrays
xx = []
yy = []
angle = []
#go through all characters of my string
for i in n:
#go forward
if i == 'F':
bob.fd(1)
#turn left
if i == '+':
bob.lt(a)
#turn right
if i == '-':
bob.rt(a)
#record current state
if i=='[':
xx.append(bob.get_x())
yy.append(bob.get_y())
angle.append(bob.get_heading())
#restore last state...
if i==']':
#we're gonna move around, put the pen up
bob.pu()
#change x and y
bob.x = xx[len(xx)-1]
bob.y = yy[len(yy)-1]
#cancel whatever angle you're in
bob.rt(bob.get_heading())
#turn to new angle
bob.heading = angle[len(angle)-1]
#pop the x,y and angle off their stacks
xx.pop()
yy.pop()
angle.pop()
#ready to draw again...
bob.pd()
wait_for_user()
</source>

Latest revision as of 10:53, 14 June 2011


L-Systems

An L-system or Lindenmayer system is a parallel rewriting system, namely a variant of a formal grammar, most famously used to model the growth processes of plant development, but also able to model the morphology of a variety of organisms. L-systems can also be used to generate self-similar fractals such as iterated function systems. L-systems were introduced and developed in 1968 by the Hungarian theoretical biologist and botanist from the University of Utrecht, Aristid Lindenmayer (1925–1989).

From WikiPlagiat

turtle VS TurtleWorld

Discovery of the day : TURTLE! (not TurtleWorld, the library)

It actually appears that Python has built-in turtle graphics, meaning that we can bypass BOB (being in the 'swampy folder' etc., and just use a 'pointer' triangle, with much clearer methods. This is the page for it. It's well documented - for example, you can use 'setcoords(x,y)' to set the pointer at the right spot. The method 'getheading' is also tremendously useful in knowing what angle bob is oriented towards. One big problem with turtle vs turtle world : it's slowwwwwwwwwwwwww. Max speed is '10', which equates to about '1' in Turtle World terms.


Going green with recursive algorithms

Takes about 20-30 minutes to generate at MAX speed (with TurtleWorld library. About 10X with native turtle lib)

Rules:

  • X -> F-[[X]+X]+F[+FX]-X
  • F -> FF

Interpretation:

  • Start symbol = X
  • F = forward 2
  • + = right 25
  • - = left 25

Tree1.png


Rule:

  • F -> FF-[-F+F+F]+[+F-F-F]

Interpretation:

  • Start symbol = F
  • F = forward 5
  • + = right 25
  • - = left 25

Tree2.png


(the tree rules I got here.)



Using basic transformation rules such as :

  • Axiom: F-F-F-F
  • Rule : F -> FF-F-F-F-FF
  • Angle: 90
  • Steps: 4

What the symbols mean

  • F is forward by X pixels
  • + is turn Y degrees
  • - is turn -Y degrees
  • [ is record the current state
  • ] restore the matching last ] state

Will yield something like :

Screenshot-3.png

Other set of rules...

Sss1.png


Soft (Python)

(with TurtleWorld)

from TurtleWorld import *

world = TurtleWorld()
bob = Turtle()
#make it FAST!
bob.delay = 0.0001

#draw upwards, plz
lt(bob,90)
#gimme some room...we'll fullscreen the window
bob.x=200
bob.y=-300

#starting axiom
n = 'X'

#replacement rules
s1 = 'X'
s2 = 'F-[[X]+X]+F[+FX]-X'
s3 = 'F'
s4 = 'FF'

#number of steps
steps = 7

for i in range(steps):
	#apply the rules, do the replacements
	n = n.replace(s1,s2)
	n = n.replace(s3,s4)

#angle to turn
a = 25

#declare my arrays
xx = []
yy = []
angle = []

#go through all characters of my string
for i in n:
	#go forward
	if i == 'F':
		bob.fd(1)
	#turn left
	if i == '+':
		bob.lt(a)
	#turn right
	if i == '-':
		bob.rt(a)
	#record current state
	if i=='[':
		xx.append(bob.get_x())
		yy.append(bob.get_y())
		angle.append(bob.get_heading())
	#restore last state...
	if i==']':
		#we're gonna move around, put the pen up
		bob.pu()
		#change x and y
		bob.x = xx[len(xx)-1]
		bob.y = yy[len(yy)-1]
		#cancel whatever angle you're in
		bob.rt(bob.get_heading())
		#turn to new angle
		bob.heading = angle[len(angle)-1]
		#pop the x,y and angle off their stacks
		xx.pop()
		yy.pop()
		angle.pop()
		#ready to draw again...
		bob.pd()


wait_for_user()