#include "Logger.hpp" #include #include #include #include #include "Attractor.hpp" #include "Canvas.hpp" #include "Projector.hpp" #include "defines.hpp" int verbose; /* char filename[50]; time_t t = time(0); struct tm* lt = localtime(&t); int r = rand() % 10; sprintf(filename, "render/attractor_%04d-%02d-%02d_%02d-%02d-%02d-%01d.png", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec, r); */ void showHelpText(){ std::cout << "Awesome Attractor, version " << __DATE__ << std::endl; std::cout << "Usage: AwesomeAttractor [OPTION]... FILE" << std::endl << std::endl; std::cout << "Optons:" << std::endl; std::cout << " --help Shows this help" << std::endl; std::cout << " -q quiet mode" << std::endl; std::cout << " -v verbose mode" << std::endl; std::cout << " -V loud mode" << std::endl; std::cout << " -w N Sets width of output image to N" << std::endl; std::cout << " -h N Sets height of output image to N" << std::endl; std::cout << " -i N Sets number of iterations to N" << std::endl; exit(0); } int main(int argc, char *argv[]) { verbose = 0; std::string attractorFile = DEFAULT_ATTRACTOR_FILE; unsigned int iterations = DEFAULT_ITERATIONS; unsigned int width = DEFAULT_WIDTH; unsigned int height = DEFAULT_HEIGHT; if ( argc <= 1 ) { showHelpText(); } for ( int i = 1; i < argc; ++i ) { if ( strcmp(argv[i], "-v") == 0 ) { verbose = 1; } else if ( strcmp(argv[i], "-q") == 0 ) { verbose = -1; } else if ( strcmp(argv[i], "--help") == 0 ) { showHelpText(); } else if ( strcmp(argv[i], "-V") == 0 ) { verbose = 3; } else if ( strcmp(argv[i], "-w") == 0 ) { width = atoi(argv[++i]); } else if ( strcmp(argv[i], "-h") == 0 ) { height = atoi(argv[++i]); } else if ( strcmp(argv[i], "-i") == 0 ) { iterations = atoi(argv[++i]); } else { attractorFile = argv[i]; } } LogInfo("Awesome Attractor, version %s\n", __DATE__); // initialising stuff Attractor myAttractor(attractorFile); Projector projection; unsigned int sizes[] = {128, 128, 128}; Canvas* canvas = new Raw(3, sizes); projection.canvas = &canvas; myAttractor.projectors.push_back(&projection); myAttractor.init_range(); projection.output(); LogInfo("\nRendering\n"); clock_t start, end; start = clock(); for ( unsigned int j = 1; j <= 100; ++j ) { for ( unsigned int i = 0; i <= iterations; i++ ) { myAttractor.iterate(); myAttractor.plot(); } if ( verbose >= 0 ) { std::cout << "\r" << j << "% done" << std::flush; } } end = clock(); double totalIterations = 100.0*iterations; double totalTime = ((double)(end-start)/(double)(CLOCKS_PER_SEC)); LogInfo("\nTotal clock time: %f\n", totalTime); LogMoreInfo("Average iterations per second: %f\n\n", totalIterations/totalTime); // saving output start = clock(); canvas.output_file(); end = clock(); totalTime = ((double)(end-start)/(double)(CLOCKS_PER_SEC)); LogInfo("Total clock time for writing png: %f\n", totalTime); return 0; }