// Program: read_array.cpp
// Draw turtle graphics for the lindenmayer system with productions
// Y -> YFFF[+FFFFF][-FFFFF] + XFF + ZF
// X -> X[-FF][+FF] + Y[-FF][+FF] + ZFF
// Z -> X-F + Y-F
#include
#include
void x(const unsigned int i); // die Funktionen X, Y und Z rufen sich
void z(const unsigned int i); // gegenseitig auf
//POST: the word w_i^Y is drawn
void y(const unsigned int i) {
if(i>0) {
y(i-1); // w_{i-1}^Y
ifm::forward(3); // FFF
ifm::save();
ifm::left(45); // +
ifm::forward(5); // FFFFF
ifm::restore();
ifm::save();
ifm::right(45); // -
ifm::forward(5); // FFFFF
x(i-1); // w_{i-1}^X
ifm::forward(2); // FF
z(i-1); // w_{i-1}^Z
ifm::forward(); // F
}
}
//POST: the word w_i^X is drawn
void x(const unsigned int i) {
if(i>0) {
x(i-1); // w_{i-1}^X
ifm::save();
ifm::right(45); // -
ifm::forward(2); // FF
ifm::restore();
ifm::save();
ifm::left(45); // +
ifm::forward(2); // FF
ifm::restore();
ifm::save();
y(i-1); // w_{i-1}^Y
ifm::right(); // -
ifm::forward(2); // FF
ifm::restore();
ifm::save();
ifm::left(); // +
ifm::forward(2); // FF
z(i-1); // w_{i-1}^Z
ifm::forward(2); // FF
}
}
//POST: the word w_i^Z is drawn
void z(const unsigned int i) {
if(i>0) {
x(i-1); // w_{i-1}^X
ifm::right(); // -
ifm::forward(); // F
y(i-1); // w_{i-1}^Y
ifm::right(); // -
ifm::forward(); // F
}
}
int main() {
std::cout << "Number of iterations = ?" << "\n";
unsigned int n;
std::cin >> n;
y(n);
x(n);
return 0;
}