예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
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;
}