From 48636765b8cda14d0377d8eff6f76f821a5cd5f1 Mon Sep 17 00:00:00 2001 From: "PARZIVAL (BreganIM)" Date: Mon, 5 May 2025 20:03:17 +0300 Subject: [PATCH] =?UTF-8?q?upd:=20=D0=97=D0=B0=D1=89=D0=B8=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- svg.cpp | 52 +++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/svg.cpp b/svg.cpp index 0dd4176..8f524b9 100644 --- a/svg.cpp +++ b/svg.cpp @@ -1,20 +1,20 @@ - -#include "svg.h" +#include "svg.h" #include using namespace std; void svg_begin(double width, double height) { cout << "\n"; - cout << "\n"; + cout << "\n"; } void svg_end() { cout << "\n"; } + void svg_text(double left, double baseline, const string& text) { cout << "\n"; } -void show_histogram_svg(const vector& bins, const vector& numbers, double razb) { + +void show_histogram_svg(const std::vector& bins, double bin_size, double min_val) { const double IMAGE_WIDTH = 400; const double IMAGE_HEIGHT = 300; const double TEXT_LEFT = 20; const double TEXT_BASELINE = 20; const double TEXT_WIDTH = 50; const double BIN_HEIGHT = 30; - const double BLOCK_WIDTH = 10; + const double VSPACE = BIN_HEIGHT + TEXT_BASELINE * 2 + 5; svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); size_t max_count = 0; - for (size_t count : bins) { - if (count > max_count) { - max_count = count; - } - } + for (size_t c : bins) + if (c > max_count) + max_count = c; + double max_width = IMAGE_WIDTH - TEXT_WIDTH - 100; + + for (size_t j = 0; j < bins.size(); ++j) { + size_t count = bins[j]; + double y = j * VSPACE; - double max_width = IMAGE_WIDTH - TEXT_WIDTH; - double top = 0; - for (size_t count : bins) { - double bin_width; + double width; if (max_count > 0) { - bin_width = static_cast(count) / max_count * max_width; + width = static_cast(count) / max_count * max_width; } else { - bin_width = 0.0; + width = 0.0; } - svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(count)); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "blue", "blue"); - top += BIN_HEIGHT; + svg_text(TEXT_LEFT, y + TEXT_BASELINE, to_string(count)); + svg_rect(TEXT_WIDTH, y, width, BIN_HEIGHT, "blue", "blue"); + double boundary = min_val + bin_size * (j + 1); + svg_text(TEXT_WIDTH,y + BIN_HEIGHT + TEXT_BASELINE,to_string(boundary) + ); } svg_end();