diff --git a/labor01.cpp b/labor01.cpp index 6c917b7..1fc90a7 100644 --- a/labor01.cpp +++ b/labor01.cpp @@ -3,7 +3,7 @@ #include "histogram.h" #include #include "text.h" - +#include "svg.h" using namespace std; struct Input { @@ -34,7 +34,7 @@ input_data() { int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_text(bins, in.bin_count); + show_histogram_svg(bins); } diff --git a/svg.cpp b/svg.cpp new file mode 100644 index 0000000..4a8d930 --- /dev/null +++ b/svg.cpp @@ -0,0 +1,53 @@ +#include +#include +#include +#include "svg.h" + +using namespace std; + +void +svg_text(double left, double baseline, string text) { + cout << "" << text << ""; +} + +void svg_rect(double x, double y, double width, double height) { + cout << "rect x='" << x << "' y=' " << y << "' width='" << width << "'height='" << height << "' />\n"; +} + + +void +svg_begin(double width, double height) { + cout << "\n"; + cout << "\n"; +} + +void +svg_end() { + cout << "\n"; +} + +void +show_histogram_svg(const 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; + double top = 0; + for (size_t bin : bins) { + const double bin_width = BLOCK_WIDTH * bin; + svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); + top += BIN_HEIGHT; + } + svg_end(); +} + + + diff --git a/svg.h b/svg.h new file mode 100644 index 0000000..85ee392 --- /dev/null +++ b/svg.h @@ -0,0 +1,9 @@ +#ifndef SVG_H_INCLUDED +#define SVG_H_INCLUDED + +#include + +void +show_histogram_svg(const std::vector& bins); + +#endif // SVG_H_INCLUDED \ No newline at end of file