/*
* 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;
}