module A(float len) extends Sphere(0.1) { {setShader(GREEN);} } int step=0; module Leaf(float l,float w) extends Parallelogram(l,w){ {setShader(GREEN);} public float getArea(){ return l*w; } } protected void init () [ { step=0; dataset("data").clear(); chart(dataset("data"),XY_PLOT); } Axiom ==> A(1); ] public void grow () [ A(x) ==> F(x) [[M(-x/2)[for(int i=0; i<6; i++)(RH(60)[RL(70)Leaf(1,0.2)])]]]RH(137)A(x*0.9); Leaf(l,w) ==>Leaf(l*1.1,w); { dataset("data").addRow() .set(0,step) .set(1,count((*F*))) .set(2,sum((*F*)[length])) .set(3,mean((*F*)[length])) .set(4,count((*Leaf*))) .set(5,sum((*Leaf*).getArea())) .set(6,mean((*Leaf*).getArea())); step++; } ] public void split()[ A(x) ==> [RL(30) A(x/2)][RL(-30) A(x/2)]; ]