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

Theory of Combinatorial Algorithms

Prof. Emo Welzl and Prof. Bernd Gärtner

/* * Name: Mosaic * Author: Andreas J. Weiss * Date: 15.11.2013 * Description: * Lindenmayer system with 3 words, mappings are depth dependent. * If the iterations are dividable by 3 you get a nice square mosaic. * If you don't plan on cooking with your PC, use < 25 iterations. * 21 or 24 is Optimal. */ #include #include #include #define FORWARD ifm::forward(); #define LEFT(A) ifm::left(A); #define RIGHT(A) ifm::right(A); #define LCOUNT 3 #define MAP Word[i % LCOUNT](i - 1); // Words void A(unsigned int i); void B(unsigned int i); void C(unsigned int i); // Dictionary void (*Word[LCOUNT])(unsigned int) = {A, B, C} ; void A(unsigned int i) { if( i <= 0) return; MAP FORWARD FORWARD MAP FORWARD } void B(unsigned int i) { if( i <= 0) return; MAP FORWARD LEFT(90) MAP } void C(unsigned int i) { if( i <= 0) return; RIGHT(90) MAP FORWARD MAP } int main (int argc, char **argv) { // Allow the iteration count to be passed as an argument if(argc == 2) { std::cout << "Number of iterations = " << atoi(argv[1]) << "\n"; Word[0](atoi(argv[1])); } else { std::cout << "Number of iterations =? "; unsigned int n; std::cin >> n; Word[0](n); } return 0; }