// Computer Science for Mathematicians and Physicists - Series 11 - Exercise 127
// Author: Jan Gilcher
// Program: GilcherJan.cpp
// draws turtle graphics for the Lindenmayer system with production
// F ->FFF[+FF][-FF][++FF][--FF][+++FF][---FF]F, initial word F-F-F++F++F++F---F
// ---F---F---F++F++F++F-F-F++F++F++F---F---F---F---F++F++F++F-F-F++F++F++F---F-
// --F---F---F++F++F++F-F-F++F++F++F---F---F---F---F++F++F++F-F-F++F++F++F---F--
// -F---F---F++F++F++F-F-F++F++F++F---F---F---F---F++F++F++F and rotation angle
// 30 degrees
#include
#include
// POST: the word w_i^F is drawn
void f (const unsigned int i)
{
if (i == 0)
ifm::forward (); // F
else
{
f(i-1); // F
f(i-1); // F
f(i-1); // F
ifm::save(); // [
ifm::left(30); // +
f(i-1); // F
f(i-1); // F
ifm::restore(); // ]
ifm::save(); // [
ifm::right(30); // -
f(i-1); // F
f(i-1); // F
ifm::restore(); // ]
ifm::save(); // [
ifm::left(60); // ++
f(i-1); // F
f(i-1); // F
ifm::restore(); // ]
ifm::save(); // [
ifm::right(60); // --
f(i-1); // F
f(i-1); // F
ifm::restore(); // ]
ifm::save(); // [
ifm::left(90); // +++
f(i-1); // F
f(i-1); // F
ifm::restore(); // ]
ifm::save(); // [
ifm::right(90); // ---
f(i-1); // F
f(i-1); // F
ifm::restore(); // ]
f(i-1); // F
}
}
int main()
{
std::cout << "number of iterations n= ?" << std::endl;
unsigned int n;
std::cin >> n;
f(n);
ifm::right(30);
f(n);
ifm::right(30);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(30);
f(n);
ifm::right(30);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(30);
f(n);
ifm::right(30);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(30);
f(n);
ifm::right(30);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(30);
f(n);
ifm::right(30);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(30);
f(n);
ifm::right(30);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::right(90);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
ifm::left(60);
f(n);
return 0;
}