Department of Computer Science | Institute of Theoretical Computer Science | CADMO

Theory of Combinatorial Algorithms

Prof. Emo Welzl and Prof. Bernd Gärtner

// Prog: Serie9_3b.cpp // Draw turtle graphics for the Lindenmayer system with // productions X -> X+Y++Y-X--XX-Y+, Y -> -X+YY++Y+X--X-Y, initial word Y // and rotation angle 60 degrees #include #include // necessary: x and y call each other void x (const unsigned int i); // necessary: x and y call w and z void w (const unsigned int i); // necessary: x and y call w and z void z (const unsigned int i); // POST: w_i^Y is drawn void y (const unsigned int i) { if (i > 0) { ifm::right(60); // - ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::left(60); // + ifm::forward(); //Y y(i-1); // w_{i-1}^Y ifm::forward(); //Y y(i-1); // w_{i-1}^Y ifm::left(60); // + ifm::left(60); // + ifm::forward(); //Y y(i-1); // w_{i-1}^Y ifm::left(60); // + ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::right(60); // - ifm::right(60); // - ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::right(60); // - ifm::forward(); //Y y(i-1); // w_{i-1}^Y if(i%2!=0)w(i-1); } } // POST: w_i^X is drawn void x (const unsigned int i) { if (i > 0) { ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::left(60); // + ifm::forward(); //Y y(i-1); // w_{i-1}^Y ifm::left(60); // + ifm::left(60); // + ifm::forward(); //Y y(i-1); // w_{i-1}^Y ifm::right(60); // - ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::right(60); // - ifm::right(60); // - ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::forward(); // X x(i-1); // w_{i-1}^X ifm::right(60); // - ifm::forward(); //Y y(i-1); // w_{i-1}^Y ifm::left(60); // + if(i%2!=0) w(i-1); } } // necessary: z and w call each other void z (const unsigned int i); // POST: w_i^z is drawn void w (const unsigned int i) { if (i > 0) { w(i-1); // w_{i-1}^W ifm::left(90); // + z(i-1); // w_{i-1}^Z ifm::forward(); // F ifm::left(90); // + } } // POST: w_i^Z is drawn void z (const unsigned int i) { if (i > 0) { ifm::right(90); // - ifm::forward(); // F w(i-1); // w_{i-1}^W ifm::right(90); // - z(i-1); // w_{i-1}^Z } } int main () { std::cout << "Number of iterations =? "; unsigned int n; std::cin >> n; // draw w_n = w_n^X y(n); return 0; }