diff --git a/svg.cpp b/svg.cpp new file mode 100644 index 0000000..ec6bcf4 --- /dev/null +++ b/svg.cpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include + +#include "svg.h" + +using namespace std; + + +void svg_begin(double width, double height) { + cout << "\n"; + cout << "\n"; +} + +void svg_end() { + cout << "\n"; +} + +void svg_text(double left, double baseline, string text) { + cout << " "<< text <<" "; +} + +void svg_rect(double x, double y, double width, double height, string stroke, string fill){ + cout << ""; +} + +void show_histogram_svg( vector& 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; + svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); + double top = 0; + const size_t MAX_ASTERISK = IMAGE_WIDTH - TEXT_WIDTH; + int maxb = bins[0]; + for (size_t j = 0; j < bins.size(); j++){ + if (bins[j] > maxb) maxb = bins[j]; + } + cout <<" " << maxb<< " "; + + for (size_t i = 0; i < bins.size(); i++) { + double bin_width; + if (maxb == bins[i] ){ + bin_width = MAX_ASTERISK ; + } + else { + bin_width = MAX_ASTERISK * bins[i] / maxb; + } + svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bins[i])); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "blue", "#aaffaa"); + top += BIN_HEIGHT; + } + svg_end(); +}