From ed39bf78024690a266b295f1466a4669c650eb40 Mon Sep 17 00:00:00 2001 From: EfimovaLA Date: Sun, 2 Jun 2024 15:02:50 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=2010?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 10 ++++------ svg.cpp | 38 ++++++++++++++++++++++++++++++++++++++ svg.h | 4 ++-- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index c004d2c..e3b25bc 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,8 @@ #include #include "histogram.h" #include "text.h" +#include "histogram_internal.h" +#include "svg.h" using namespace std; const size_t SCREEN_WIDTH = 80; @@ -9,7 +11,7 @@ const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; struct Input { - std::vector numbers; + vector numbers; size_t bin_count{}; }; @@ -35,13 +37,9 @@ Input input_data() int main() { - Input in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - - show_histogram_text(bins); - + show_histogram_svg_vertical(bins); } - diff --git a/svg.cpp b/svg.cpp index ef918f4..5ffef26 100644 --- a/svg.cpp +++ b/svg.cpp @@ -64,3 +64,41 @@ show_histogram_svg(const std::vector& bins){ svg_end(); } } + +void show_histogram_svg_vertical(const std::vector& bins) { + const auto IMAGE_WIDTH = 300; + const auto IMAGE_HEIGHT = 400; + const auto TEXT_LEFT = 20; + const auto TEXT_BASELINE = 20; + const auto TEXT_WIDTH = 30; + const auto BIN_WIDTH = 30; + const auto BLOCK_HEIGHT = 10; + const auto MAX_ASTERISK = IMAGE_HEIGHT - TEXT_WIDTH; + + svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); + + double left = 0; + std::size_t maxbin = bins[0]; + for (std::size_t i = 0; i < bins.size(); i++) { + if (maxbin < bins[i]) { + maxbin = bins[i]; + } + } + if (maxbin <= 76) { + for (std::size_t i = 0; i < bins.size(); i++) { + double bin_height = BLOCK_HEIGHT * bins[i]; + svg_text(left, TEXT_BASELINE, std::to_string(bins[i])); + svg_rect(left, TEXT_WIDTH, BIN_WIDTH, bin_height); + left += BIN_WIDTH; + } + svg_end(); + } else { + for (std::size_t i = 0; i < bins.size(); i++) { + double bin_height = MAX_ASTERISK * (static_cast(bins[i]) / maxbin); + svg_text(left, TEXT_BASELINE, std::to_string(bins[i])); + svg_rect(left, TEXT_WIDTH, BIN_WIDTH, bin_height); + left += BIN_WIDTH; + } + svg_end(); + } +} diff --git a/svg.h b/svg.h index 5197216..f7cef3f 100644 --- a/svg.h +++ b/svg.h @@ -3,7 +3,7 @@ #include -void -show_histogram_svg(const std::vector& bins); +void show_histogram_svg(const std::vector& bins); +void show_histogram_svg_vertical(const std::vector& bins); #endif // SHOW_HISTOGRAM_SVG_H_INCLUDED