// Informatik - Serie 11 - Skriptaufgabe 125
// Prog: HuthmacherLukas.cpp
// Autor: Lukas Huthmacher
// Iterations: try 10
// Draw turtle graphics for the Lindenmayer system with
// production F -> F+F+ and initial word F.
#include
#include
unsigned int r=0;
// POST: the word w_i^F is drawn
void f (const unsigned int i) {
if (i == 0)
ifm::forward(2); // F
else {
f(i-1); // w_{i-1}^F
ifm::left(60);
// ifm::forward();
f(i-1);
ifm::left(60);
}
}
// POST: the word w_i^F is drawn
void g (const unsigned int i) {
if (i == 0)
ifm::forward(); // F
else {
f(i-1); // w_{i-1}^F
ifm::left(60);
ifm::forward(2);
ifm::right(60);
ifm::forward(2);
ifm::left(60);
ifm::forward(2);
ifm::right(60);
ifm::forward(2);
ifm::left(30);
f(i-1); // w_{i-1}^F
ifm::left(84);
}
}
// POST: the word w_i^F is drawn
void h (const unsigned int i) {
if (i == 0)
{
ifm::forward(2);
if(r%6==0)
f(7);
r=2; // F
}
else {
ifm::forward();
ifm::left(80);
ifm::forward();
ifm::left(180);
ifm::forward();
ifm::left(20);
ifm::forward();
ifm::left(180);
ifm::forward();
ifm::right(100);
++r;
h(i-1);
}
}
// POST: the word w_i^F is drawn
void j (const unsigned int i) {
if (i == 0)
{
ifm::forward(4); // F
f(7);
}
else {
ifm::forward(2);
ifm::save();
ifm::left(80);
h(i-1);
ifm::restore();
ifm::save();
ifm::right(80);
r=5;
h(i-1);
ifm::restore();
ifm::forward(2);
j(i-1);
}
}
int main () {
std::cout << "Number of iterations =? ";
unsigned int n;
std::cin >> n;
// draw w_n = w_n(F)
ifm::save();
ifm::left(27);
for(int i=1;i<61;++i)
g(10);
f(7);
ifm::restore();
ifm::left(90);
ifm::forward(4);
if (n>28)n=28;
else
if(n<20) n=20;
j(n);
return 0;
}