bool init_map(int count) { srand(time(NULL)); int seed = rand() % 100; for(int x = 0; x < X_SQUARES; x++) { for(int y = 0; y < Y_SQUARES; y++) { Uint8 c = scaled_octave_noise_3d(1,0.5,1,0x00,0xFF,x,y,seed); map[x][y].r = c; map[x][y].g = c; map[x][y].b = c; } } mutate_map(); mutate_map(); int max_count = colour_map(); float f_count = (float)(max_count); float total = (float)(X_SQUARES * Y_SQUARES); float coverage = f_count / total; printf("Threshold %d \n", threshold); printf("Coverage: %f / %f = %f \n", f_count, total, coverage); if(coverage < 0.25 && count < 10) init_map(count + 1); return true; }
int main( int argc, char* args[] ) { //Start up SDL and create window if( !init() || !init_map(0)) { printf( "Failed to initialize!\n" ); } else { //Load media if( !loadMedia() ) { printf( "Failed to load media!\n" ); } else { //Main loop flag bool quit = false; //Event handler SDL_Event e; //While application is running while( !quit ) { //Handle events on queue while( SDL_PollEvent( &e ) != 0 ) { //User requests quit if( e.type == SDL_QUIT ) { quit = true; } if( e.type == SDL_KEYDOWN ) { switch( e.key.keysym.sym ) { case SDLK_EQUALS: threshold ++; break; case SDLK_MINUS: threshold --; break; case SDLK_F5: init_map(0); break; case SDLK_ESCAPE: quit = true; break; default: break;colour_map(); } } } //Clear screen SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); SDL_RenderClear( gRenderer ); for(int x = 0; x < X_SQUARES; x++) { for(int y = 0; y < Y_SQUARES; y++) { SDL_Rect fillRect = { SQUARE_SIZE*x, SQUARE_SIZE*y, SQUARE_SIZE, SQUARE_SIZE }; SDL_SetRenderDrawColor( gRenderer, map[x][y].r, map[x][y].g, map[x][y].b, 0x00 ); SDL_RenderFillRect( gRenderer, &fillRect ); } } //Update screen SDL_RenderPresent( gRenderer ); } } } //Free resources and close SDL close(); return 0; }
int main( int ac, char** av ) { try { comma::command_line_options options( ac, av, usage ); const std::vector< std::string >& unnamed = options.unnamed( "--verbose,-v,--have-css,--loop" , "-.*" ); if( unnamed.size() != 1 ) { std::cerr << "csv-to-svg: expected one operation name" << ( unnamed.size() ? "; got " + comma::join( unnamed, ' ' ) : "" ) << std::endl; return 1; } std::string what = unnamed[0]; comma::csv::options csv( options ); snark::render::colour_map colour_map; bool parse_colour = true; if( ( what == "point" || what == "circle" || what == "line" || what == "lines" ) && csv.has_field( "scalar" ) ) { colour_map = parse_colour_map( options.value< std::string >( "--colour,--color,-c", "" ) ); parse_colour = false; } if( options.exists( "--class" ) ) { snark::render::svg::element::DEFAULT_ATTRIBUTES += " class=\"" + options.value< std::string >( "--class" ) + "\""; } if( options.exists( "--id" ) ) { snark::render::svg::element::DEFAULT_ATTRIBUTES += " id=\"" + options.value< std::string >( "--id" ) + "\""; } if( options.exists( "--transform" ) ) { snark::render::svg::element::DEFAULT_ATTRIBUTES += " transform=\"" + options.value< std::string >( "--transform" ) + "\""; } if( options.exists( "--attributes" ) ) { snark::render::svg::element::DEFAULT_ATTRIBUTES += " " + options.value< std::string >( "--attributes" ); } snark::render::svg::element::DEFAULT_STYLE = make_style( options, what, parse_colour ); if( what == "header" ) { std::cout << snark::render::svg::header( options.value< std::string >( "--width" ) , options.value< std::string >( "--height" ) , options.value< std::string >( "--viewbox" ) , options.optional< std::string >( "--css" ) ) << std::endl; } else if( what == "footer" ) { std::cout << snark::render::svg::footer() << std::endl; } else if( what == "script" ) { std::cout << snark::render::svg::script( options.value< std::string >( "--file" ) ) << std::endl; } else if( what == "script_begin" ) { std::cout << snark::render::svg::script::begin() << std::endl; } else if( what == "script_end" ) { std::cout << snark::render::svg::script::end() << std::endl; } else if( what == "style_begin" ) { std::cout << snark::render::svg::style::begin() << std::endl; } else if( what == "style_end" ) { std::cout << snark::render::svg::style::end() << std::endl; } else if( what == "group_begin" ) { std::cout << snark::render::svg::g() << std::endl; } else if( what == "group_end" ) { std::cout << snark::render::svg::g::end() << std::endl; } else if( what == "point" || what == "circle" ) { boost::optional< double > r = options.optional< double >( "--point-size,--weight,--radius,-r" ); if( r ) { snark::render::svg::circle::DEFAULT_RADIUS = *r; } if( csv.has_field( "scalar" ) ) { if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< coloured< snark::render::svg::circle > >( csv.fields, true ) ); } comma::csv::input_stream< coloured< snark::render::svg::circle > > istream( std::cin, csv ); while( std::cin.good() ) { const coloured< snark::render::svg::circle >* c = istream.read(); if( !c ) { break; } std::cout << snark::render::svg::circle( *c, colour_map( c->scalar ).hex() ) << std::endl; } } else { if( csv.fields.empty() ) { csv.fields = what == "point" ? "x,y" : comma::join( comma::csv::names< snark::render::svg::circle >(), ',' ); } if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< snark::render::svg::circle >( csv.fields, true ) ); } comma::csv::input_stream< snark::render::svg::circle > istream( std::cin, csv ); while( std::cin.good() ) { const snark::render::svg::circle* c = istream.read(); if( !c ) { break; } std::cout << *c << std::endl; } } } else if( what == "line" ) { if( csv.has_field( "scalar" ) ) { if( options.exists( "--binary,-b" ) ) { csv.format( options.value< std::string >( "--binary,-b", comma::csv::format::value< coloured< snark::render::svg::line > >( csv.fields, true ) ) ); } comma::csv::input_stream< coloured< snark::render::svg::line > > istream( std::cin, csv ); while( std::cin.good() ) { const coloured< snark::render::svg::line >* l = istream.read(); if( !l ) { break; } std::cout << snark::render::svg::line( *l, colour_map( l->scalar ).hex() ) << std::endl; } } else { if( csv.fields.empty() ) { csv.fields = comma::join( comma::csv::names< snark::render::svg::line >(), ',' ); } if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< snark::render::svg::line >( csv.fields, true ) ); } comma::csv::input_stream< snark::render::svg::line > istream( std::cin, csv ); while( std::cin.good() ) { const snark::render::svg::line* l = istream.read(); if( !l ) { break; } std::cout << *l << std::endl; } } } else if( what == "lines" ) { if( csv.has_field( "scalar" ) ) { if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< coloured< snark::render::svg::point > >( csv.fields, true ) ); } comma::csv::input_stream< coloured< snark::render::svg::point > > istream( std::cin, csv ); boost::optional< coloured< snark::render::svg::point > > prev; while( std::cin.good() ) { const coloured< snark::render::svg::point >* p = istream.read(); if( !p ) { break; } if( prev ) { std::cout << snark::render::svg::line( prev->x, prev->y, p->x, p->y, colour_map( prev->scalar ).hex() ) << std::endl; } prev = *p; } } else { if( csv.fields.empty() ) { csv.fields = comma::join( comma::csv::names< snark::render::svg::point >(), ',' ); } if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< snark::render::svg::point >( csv.fields, true ) ); } comma::csv::input_stream< snark::render::svg::point > istream( std::cin, csv ); boost::optional< snark::render::svg::point > prev; while( std::cin.good() ) { const snark::render::svg::point* p = istream.read(); if( !p ) { break; } if( prev ) { std::cout << snark::render::svg::line( prev->x, prev->y, p->x, p->y ) << std::endl; } prev = *p; } } } else if( what == "polyline" ) { if( csv.fields.empty() ) { csv.fields = comma::join( comma::csv::names< snark::render::svg::point >(), ',' ); } if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< snark::render::svg::point >( csv.fields, true ) ); } comma::csv::input_stream< snark::render::svg::point > istream( std::cin, csv ); snark::render::svg::polyline polyline; while( std::cin.good() ) { const snark::render::svg::point* p = istream.read(); if( !p ) { break; } polyline.points.push_back( *p ); } if( polyline.points.size() ) { if( options.exists( "--loop" ) ) { polyline.points.push_back( polyline.points[0] ); } std::cout << polyline << std::endl; } } else if( what == "polygon" ) { if( csv.fields.empty() ) { csv.fields = comma::join( comma::csv::names< snark::render::svg::point >(), ',' ); } if( options.exists( "--binary,-b" ) ) { csv.format( comma::csv::format::value< snark::render::svg::point >( csv.fields, true ) ); } comma::csv::input_stream< snark::render::svg::point > istream( std::cin, csv ); snark::render::svg::polygon polygon; boost::optional< snark::render::svg::point > first; boost::optional< snark::render::svg::point > prev; while( std::cin.good() ) { const snark::render::svg::point* p = istream.read(); if( !p ) { break; } if( !first ) { first = *p; } polygon.points.push_back( *p ); prev = *p; } if( polygon.points.size() ) { std::cout << polygon << std::endl; } } else if( what == "text" ) { if( csv.has_field( "scalar" ) ) { comma::csv::input_stream< coloured< snark::render::svg::text > > istream( std::cin, csv ); while( std::cin.good() ) { const coloured< snark::render::svg::text >* t = istream.read(); if( !t ) { break; } std::cout << snark::render::svg::text( *t, colour_map( t->scalar ).hex() ) << std::endl; } } else { if( csv.fields.empty() ) { csv.fields = comma::join( comma::csv::names< snark::render::svg::text >(), ',' ); } comma::csv::input_stream< snark::render::svg::text > istream( std::cin, csv ); while( std::cin.good() ) { const snark::render::svg::text* t = istream.read(); if( !t ) { break; } std::cout << *t << std::endl; } } } else { std::cerr << "csv-to-svg: unrecognized operation: \"" << what << "\"" << std::endl; return 1; } return 0; } catch( std::exception& ex ) { std::cerr << "csv-to-svg: " << ex.what() << std::endl; } catch( ... ) { std::cerr << "csv-to-svg: unknown exception" << std::endl; } return 1; }