// Prog: Lindenmayer.cpp
#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); // w_{i-1}^F
f(i-1); // w_{i-1}^F
ifm::left(40); // -
ifm::save(); // [ stores current position and direction
ifm::left(40); // -
f(i-1); // w_{i-1}^F
ifm::right(15); // +
f(i-1); // w_{i-1}^F
ifm::right(15); // +
f(i-1); // w_{i-1}^F
ifm::restore(); // ] goes back to last stored position / direction
ifm::right(40); // +
ifm::save(); // [
ifm::right(40); // +
f(i-1); // w_{i-1}^F
ifm::left(15); // -
f(i-1); // w_{i-1}^F
ifm::left(15); // -
f(i-1); // w_{i-1}^F
ifm::restore(); // ]
}
}
int main () {
std::cout << "Number of iterations =? ";
unsigned int n;
std::cin>>n;
// draw w_n = w_n^F
ifm::left(90); // loook up
f(n); // w_n^F
ifm::right(12);
f(n);
ifm::right(78);
f(n);
ifm::right(50);
f(n);
ifm::forward(0.5);
ifm::right(101);
f(n);
ifm::left(60);
f(n);
ifm::forward(80);
f(n);
ifm::left(101);
f(n);
ifm::forward(80);
f(n);
return 0;
}