|  |  |  | @ -2,7 +2,7 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include <string> | 
			
		
	
		
			
				
					|  |  |  |  | using namespace std; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | svg_begin(double width, double height) { | 
			
		
	
		
			
				
					|  |  |  |  | void svg_begin(double width, double height) { | 
			
		
	
		
			
				
					|  |  |  |  |     cout << "<?xml version='1.0' encoding='UTF-8'?>\n"; | 
			
		
	
		
			
				
					|  |  |  |  |     cout << "<svg "; | 
			
		
	
		
			
				
					|  |  |  |  |     cout << "width='" << width << "' "; | 
			
		
	
	
		
			
				
					|  |  |  | @ -19,12 +19,53 @@ void svg_text(double left, double baseline, string text) { | 
			
		
	
		
			
				
					|  |  |  |  |     cout << "<text x='" << left << "' y='" << baseline << "'>" << text << "</text>"; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void svg_rect(double x, double y, double width, double height, string stroke = "black", string fill = "black") | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     cout << "<rect x='" << x << "' y='" << y << "' width='" << width | 
			
		
	
		
			
				
					|  |  |  |  |               << "' height='" << height << "' stroke='" << stroke << "' fill='" << fill << " '/>"; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | //Çàùèòà
 | 
			
		
	
		
			
				
					|  |  |  |  | /*
 | 
			
		
	
		
			
				
					|  |  |  |  | void svg_rect(double x, double y, double width, double height, string stroke = "black", string fill = "black", double fill_opacity = 1.0) { | 
			
		
	
		
			
				
					|  |  |  |  |     cout << "<rect x='" << x << "' y='" << y << "' width='" << width | 
			
		
	
		
			
				
					|  |  |  |  |          << "' height='" << height << "' stroke='" << stroke | 
			
		
	
		
			
				
					|  |  |  |  |          << "' fill='" << fill << "' fill-opacity='" << fill_opacity << "'/>"; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void show_histogram_svg(const vector<size_t>& bins) { | 
			
		
	
		
			
				
					|  |  |  |  |     const auto IMAGE_WIDTH = 400; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto IMAGE_HEIGHT = 300; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto TEXT_LEFT = 20; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto TEXT_BASELINE = 20; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto TEXT_WIDTH = 50; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto BIN_HEIGHT = 30; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto BLOCK_WIDTH = 10; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     size_t max_count = *max_element(bins.begin(), bins.end()); | 
			
		
	
		
			
				
					|  |  |  |  |     if (max_count == 0) max_count = 1; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); | 
			
		
	
		
			
				
					|  |  |  |  |     double top = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     for (size_t bin : bins) { | 
			
		
	
		
			
				
					|  |  |  |  |         const double bin_width = min(static_cast<double>(BLOCK_WIDTH * bin), static_cast<double>(IMAGE_WIDTH - TEXT_WIDTH)); | 
			
		
	
		
			
				
					|  |  |  |  |         double opacity = static_cast<double>(bin) / max_count; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); | 
			
		
	
		
			
				
					|  |  |  |  |         svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, | 
			
		
	
		
			
				
					|  |  |  |  |                 "blue", "green", opacity); | 
			
		
	
		
			
				
					|  |  |  |  |         top += BIN_HEIGHT; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     svg_end(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void show_histogram_svg(const vector<size_t>& bins) { | 
			
		
	
		
			
				
					|  |  |  |  |     const auto IMAGE_WIDTH = 400; | 
			
		
	
		
			
				
					|  |  |  |  |     const auto IMAGE_HEIGHT = 300; | 
			
		
	
	
		
			
				
					|  |  |  | @ -46,9 +87,6 @@ void show_histogram_svg(const vector<size_t>& bins) { | 
			
		
	
		
			
				
					|  |  |  |  |         svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "blue", "green"); | 
			
		
	
		
			
				
					|  |  |  |  |         top += BIN_HEIGHT; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     //svg_text(20, 20, to_string(bins[0]));
 | 
			
		
	
		
			
				
					|  |  |  |  |     //svg_rect(50, 0, bins[0] * 10, 30);
 | 
			
		
	
		
			
				
					|  |  |  |  |     svg_end(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |