#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
usingnamespace std;
class ifstree
{
public:
float minfactor;
float maxfactor;
float bend;
float angle;
float initlen;
int fdim;
ifstree();
void turnleft(float ang)
{
printf("lt %4.2f\n", ang);
};
void turnright(float ang)
{
printf("rt %4.2f\n", ang);
};
void movefw(float value)
{
printf("fw %4.2f\n", value);
};
void movebw(float value)
{
printf("bw %4.2f\n", value);
};
float randfactor();
void draw();
void draw(float linelen,int depth);
};
ifstree::ifstree()
{
minfactor =(float)1/3;
maxfactor =(float)2/3;
bend =8.0;
angle =40.0;
fdim =8;
srand( time(NULL));
initlen =100.0;
}
void ifstree::draw()
{
draw(initlen, fdim);
}
float ifstree::randfactor()
{
float rnd =(float) rand()/RAND_MAX;
return(float) rnd;
}
void ifstree::draw(float linelen,int depth)
{
if(depth>0)
{
float minlength = linelen * minfactor;
float maxlength = linelen * maxfactor;
float difflength = maxlength - minlength;
movefw(linelen);
turnleft(angle+bend);
draw(minlength+(randfactor()*difflength), depth-1);
turnright(angle);
draw(minlength+(randfactor()*difflength), depth-1);
turnright(angle);
draw(minlength+(randfactor()*difflength), depth-1);
turnleft(angle-bend);
movebw(linelen);
}
}
int main(int argc,char*argv[])
{
ifstree T;
if(argc>1)
{
string svalue(argv[1]);
float fv =(float)atof(svalue.c_str());
T.initlen = fv;
}
T.draw();
return0;
}
