From ce0d9af1880f04d8294924ad89f6cff21d5a8ed1 Mon Sep 17 00:00:00 2001 From: Teochrome Date: Mon, 28 Apr 2025 20:28:37 +0300 Subject: [PATCH] pre_final --- .vs/Covid/DesignTimeBuild/.dtbcache.v2 | Bin 96416 -> 96513 bytes ...5ea46af-cd37-4318-bffe-755f27ee6092.vsidx} | Bin 22004 -> 22004 bytes .vs/Covid/v17/.suo | Bin 35328 -> 39424 bytes .vs/ProjectEvaluation/covid.metadata.v7.bin | Bin 171279 -> 171292 bytes .vs/ProjectEvaluation/covid.projects.v7.bin | Bin 100591 -> 201182 bytes Covid/Form1.cs | 246 +++++++++--------- .../net8.0-windows/Covid.AssemblyInfo.cs | 2 +- .../Covid.AssemblyInfoInputs.cache | 2 +- 8 files changed, 125 insertions(+), 125 deletions(-) rename .vs/Covid/FileContentIndex/{024be0ac-dede-4057-a91c-9a3cde2ce3a1.vsidx => 05ea46af-cd37-4318-bffe-755f27ee6092.vsidx} (99%) diff --git a/.vs/Covid/DesignTimeBuild/.dtbcache.v2 b/.vs/Covid/DesignTimeBuild/.dtbcache.v2 index 3e6b7e465cca8742009500b2ce4fbc7b8f2c6d1a..64abb2f742acb5965dc886c9c7180aee0e972954 100644 GIT binary patch delta 2818 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 HmX<#O7V0GL diff --git a/.vs/Covid/FileContentIndex/024be0ac-dede-4057-a91c-9a3cde2ce3a1.vsidx b/.vs/Covid/FileContentIndex/05ea46af-cd37-4318-bffe-755f27ee6092.vsidx similarity index 99% rename from .vs/Covid/FileContentIndex/024be0ac-dede-4057-a91c-9a3cde2ce3a1.vsidx rename to .vs/Covid/FileContentIndex/05ea46af-cd37-4318-bffe-755f27ee6092.vsidx index 849ea81c34fb53be225421784bae138a950c255f..50ae7a318e90b07759709da9698b4eeab5b7488b 100644 GIT binary patch delta 21 dcmeyen(@nO#tBndy$|`HOPY9Fd*f04Pyl!43Wxvz delta 20 ccmeyen(@nO#tBndSSwlnPrRkG@u+?%0B1c3d;kCd diff --git a/.vs/Covid/v17/.suo b/.vs/Covid/v17/.suo index 545b9b0883b312ae75386cfc78927fa98763b922..eb10d30632a9ebd49a603a293d7986664f7d0ba7 100644 GIT binary patch delta 3198 zcmd5;ZA_C_6n<}M>DvlepkT#XieN2J;H97ihuYfu0c`X`)P0D70^8Vd8flpdlPYRR zW-@q>&X2e`o#HmxoU7SPHZzhD|15Je`{Oc`E&em{hbHY0jgy`8w#DvCo$kjjdAR4E zd){-;z4x5wHndL`Iwu^wweZgAxY3J2<5g{>(KDy|Ym@&R6JAqX-B1Bj*+b{kNIUZs|SvLZgFrSefu zN2DR9BeD^Bh#Z6wK{nJ>D5oMw&W!gYQ^V*v9byJz#H)pah9db=NnUAoVNW*8uwRZ? zfmn&CM>HTB5m|^4?+>D^J6&_J_i;C>ocA(qlr}+|lp~agKW~zPp_Yqtvk*oEjb~y{ znE4e_L#RM&t@tsU5huJ$9|MjSvKL>xlUl7u5Dzk_%eaWqL!bMNE$ zL|iwD{VBu;hz}7TAxeHb(3TXm*FTI;MgpNap=pfa2)R*d1& ztxRR~Gzexi!8fu>ri5t5C6$ysLXrhUrn?{SyG#L!v_`%JooSOD2DIpqQibYbDv-kv z)k=XV-a~aNY|ZIQJ&Dp7gFA%{SebPYDw^Oa%_wCO-$7umho{`6JWVK7OK?C+4jk$k zpfTvus2=HlD3zhca3Wp0EL2ec6q$+nIxP*Tny61y6Ik-~X{2bziPiLZbN-m9bMaKB zg*1+{14MLs7}iy(7#dH`O`2gf5Y@#_IURyC-TWM!tVl9|NM=YehKl`gIjb=|kyXb; zvrA5-0hgc?OYExIy7+n^!mNm+c~4U zG^1s2@zXCof3A0r(5vi+=;xatv}7m9^!-`w5}T9LFAwect>h=gV0d_F6T{<`hvn55 z7&xq2X!RC}Zlzd))nY=+*%U&8|3wIvxOsX?h~uZ!BM?P3-AO^R`Yi~SuDXA!Ry}A+ zFgqULH905Pqj=R*V&a-o+tAh%=-gbtI=rJJ*46t5*jg7&MMPG}i3EqgdW<(f^^YEQ&8gs7pZ#$557#`!* zqQ6`DFNT_eo5!s((c--hv9MzWBnbR7yD<-Ye*3!w{S^z!pJtPAuiL6Iyq+klt z#aB@*#DNcPmo>_ZlGLfIaBw*Tww2ebq{mre#zdmmL$rK=t$<*~n-DS?!Du=m<@Y}( z4l!CHiiZ$kEbL_FWWy7q}KQQn_u6L4hnA zn%$Pn+Pk0plDv*AJmPjRwhMmrY*DM7+(xdK>*6}#w0EtR-Z5HerNB-7f!((TLOv~& z_;SPJJ_BP8xaIT0SIvtv=|Sz|T=3)MTPSdE zaOIqj>%`QGJ^Mv|!Dg$S-&R{@tF~FosyqGGGJktbO_~42`5l7a+Tm}j^vk(}kh$j& zw5)#}Zh1^FJd_u<4~?^MXw4-#_*>f8VVv)RyK62$@46c@mt-Dp*}j(L&XNuc>LkVPHFKuStdOT|A5oR;1t;U>`KW^}!jj rUkp12b0Ke+iGTKcH96&Ac)$?Z}QCh>(Y%uI~YXyX0^m$ZozY5kt|d6vG>nC*=>`Q)5? z?!D*U^W1aK6TczFPe}`EqseHMCQ~_d31qU_ESm+*Ssd3UE(lGUDoY+(FPdEWMLd9k zBps7p5nobT3d?5nt$@aTt)xm;>mWL7bj&*V%p*`iEc% zd;~rQ%YeriS}Adrt-$bwVZ1i(5ZeFc9OXg!TJlnS%tA-YM-|b6Q*y=`NiDWey8Jsu zaQ5+S7Wt-dNjoa$^*EZchTjwd#-bH@Tan0UIm3E6< zhOt~W_1G`l_@Nu=#gZR7{ci8D4M7>!2S;>CoepQ|esm5Ph69deN_qnHt;nk_S9aK#1P`IcXuEc4Ixx=~pJw<7ESmw&pRyaYU z*tY!^{udZ)DAgC?%%o_4{z;^o^D^2J$)!(s!DQ9BK#Wp)=d9RGvEUn8Q^?{jSSX4q))dZdpMvDK9Nn6eCH(F4!6q`jl61Xe zO^|3C(ELFPnla5ER>Y&2<0{ySQvQg{SJ7E$j1J@jR3(dKHYGOpej}=S|N7*&gU*XX zAN+LuiYIwEiC<=enh?IM(AsDIF{km*T%tkGS9I`S;F zNDd10u94`-Qry=}&EDJBCj&L2CovfNR1sdfGox0yD}vK69e(DCUDGc<@9lc}h?~^e z6ZTacJKsFXTe=pyL@&gqY4zy##8g}p?@hWAnYrhL*vEe8?0k#lR_XP5k6;%zx^t+V M7EU%K0wrSZ7Z-yA4+9vOOjqn-)R_K%8WT^WU8^1ARy!s?ugMpg%(kERVsh~ogs5U* TPysU1?_XP)zg=Y-(+@TPt^yOx diff --git a/.vs/ProjectEvaluation/covid.projects.v7.bin b/.vs/ProjectEvaluation/covid.projects.v7.bin index 515fab98d903ceca0105b1e48b5c6eb48a6dfde1..441b8d5d339c724c66abb33a923556b26e17b480 100644 GIT binary patch delta 62 zcmaDqk?r1Mo`x-q?>pETKQJ(UVC3A${+^lh<3k4?Mi8<2Kl7@8tf^W%#3pZF$Hb_g M1!X_VVdRwo06+N|8UO$Q delta 11 Scmcb&nCJaOwuUW??>hh^s|COS diff --git a/Covid/Form1.cs b/Covid/Form1.cs index f967d28..503360f 100644 --- a/Covid/Form1.cs +++ b/Covid/Form1.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Buffers.Text; using System.Collections.Generic; using System.Drawing; @@ -9,61 +9,61 @@ namespace Covid { public partial class Form1 : Form { - private Label labelRemoved; // - private Label labelActive; // - private Label labelR; // R - private Label labelDay; // - public enum HealthState { Susceptible, Infected, Recovered, Dead } // - private PictureBox pictureBoxLeft; // PictureBox - private PictureBox pictureBoxRight; // PictureBox + private Label labelRemoved; // Метка для отображения количества нейтрализованных случаев + private Label labelActive; // Метка для отображения количества активных случаев + private Label labelR; // Метка для отображения значения R + private Label labelDay; // Метка для отображения текущего дня + public enum HealthState { Susceptible, Infected, Recovered, Dead } // Перечисление состояний здоровья + private PictureBox pictureBoxLeft; // Левый PictureBox для графика + private PictureBox pictureBoxRight; // Правый PictureBox для отображения людей - private List population = new List(); // - private const int N = 500; // - private const float InfectionRadius = 10f; // - private const float ContagionProbability = 0.3f; // - private const int DiseaseTime = 35; // - private const float MortalityRate = 0.12f; // + private List population = new List(); // Список людей + private const int N = 500; // Увеличено количество населения + private const float InfectionRadius = 10f; // Радиус инфекции + private const float ContagionProbability = 0.3f; // Вероятность заражения + private const int DiseaseTime = 35; // Время заболевания + private const float MortalityRate = 0.12f; // Уровень смертности - private int day = 0; // - private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); // + private int day = 0; // Текущий день + private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); // Таймер для обновления симуляции - private List historyS = new List(); // - private List historyI = new List(); // - private List historyR = new List(); // - private List historyD = new List(); // + private List historyS = new List(); // История уязвимых + private List historyI = new List(); // История инфицированных + private List historyR = new List(); // История выздоровевших + private List historyD = new List(); // История погибших - private Random rand = new Random(); // + private Random rand = new Random(); // Генератор случайных чисел - private int newInfectionsThisDay = 0; // - private int infectedCountPreviousDay = 0; // + private int newInfectionsThisDay = 0; // Новые инфекции за день + private int infectedCountPreviousDay = 0; // Количество инфицированных на предыдущий день public class Person { - public PointF Position; // - public PointF Velocity; // - public HealthState State = HealthState.Susceptible; // - public int DaysInfected = 0; // , + public PointF Position; // Позиция человека + public PointF Velocity; // Скорость движения человека + public HealthState State = HealthState.Susceptible; // Состояние здоровья + public int DaysInfected = 0; // Количество дней, в течение которых человек был инфицирован - private static Random rand = new Random(); // Person + private static Random rand = new Random(); // Генератор случайных чисел для класса Person - public Person(float x, float y) // Person + public Person(float x, float y) // Конструктор класса Person { - Position = new PointF(x, y); // - Velocity = new PointF(RandomFloat(-1, 1), RandomFloat(-1, 1)); // + Position = new PointF(x, y); // Установка начальной позиции + Velocity = new PointF(RandomFloat(-1, 1), RandomFloat(-1, 1)); // Установка случайной скорости } - private static float RandomFloat(float min, float max) // + private static float RandomFloat(float min, float max) // Метод для генерации случайного числа с плавающей запятой { return (float)(rand.NextDouble() * (max - min) + min); } - public void Move(int width, int height) // + public void Move(int width, int height) // Метод для перемещения человека { - if (State == HealthState.Dead) return; // , + if (State == HealthState.Dead) return; // Если человек мертв, не перемещаем его - Position = new PointF(Position.X + Velocity.X, Position.Y + Velocity.Y); // + Position = new PointF(Position.X + Velocity.X, Position.Y + Velocity.Y); // Обновление позиции - // + // Проверка границ экрана и изменение направления движения if (Position.X < 0 || Position.X > width) Velocity = new PointF(-Velocity.X, Velocity.Y); if (Position.Y < 0 || Position.Y > height) Velocity = new PointF(Velocity.X, -Velocity.Y); } @@ -71,11 +71,11 @@ namespace Covid public Form1() { - InitializeComponent(); // - this.BackColor = Color.Black; // - this.ForeColor = Color.White; // + InitializeComponent(); // Инициализация компонентов формы + this.BackColor = Color.Black; // Установка фона формы + this.ForeColor = Color.White; // Установка цвета текста - // PictureBox + // Инициализация PictureBox для графика pictureBoxLeft = new PictureBox { Name = "pictureBoxLeft", @@ -84,10 +84,10 @@ namespace Covid Location = new Point(10, 10), BackColor = Color.Black }; - pictureBoxLeft.Paint += pictureBoxLeft_Paint; // - this.Controls.Add(pictureBoxLeft); // PictureBox + pictureBoxLeft.Paint += pictureBoxLeft_Paint; // Подписка на событие отрисовки + this.Controls.Add(pictureBoxLeft); // Добавление PictureBox на форму - // PictureBox + // Инициализация PictureBox для отображения людей pictureBoxRight = new PictureBox { Name = "pictureBoxRight", @@ -95,20 +95,20 @@ namespace Covid Height = 400, Location = new Point(420, 10), BackColor = Color.Black, - BorderStyle = BorderStyle.FixedSingle // + BorderStyle = BorderStyle.FixedSingle // Добавление белой границы }; - pictureBoxRight.Paint += pictureBoxRight_Paint; // - this.Controls.Add(pictureBoxRight); // PictureBox + pictureBoxRight.Paint += pictureBoxRight_Paint; // Подписка на событие отрисовки + this.Controls.Add(pictureBoxRight); // Добавление PictureBox на форму - // + // Создание населения for (int i = 0; i < N; i++) { - float x = rand.Next(pictureBoxRight.Width); // X - float y = rand.Next(pictureBoxRight.Height); // Y - population.Add(new Person(x, y)); // + float x = rand.Next(pictureBoxRight.Width); // Случайная позиция по X + float y = rand.Next(pictureBoxRight.Height); // Случайная позиция по Y + population.Add(new Person(x, y)); // Добавление нового человека в популяцию } - // + // Установка начального состояния для нескольких инфицированных population[0].State = HealthState.Infected; population[1].State = HealthState.Infected; population[2].State = HealthState.Infected; @@ -116,14 +116,14 @@ namespace Covid population[4].State = HealthState.Infected; population[5].State = HealthState.Infected; - timer.Interval = 200; // - timer.Tick += Timer_Tick; // - timer.Start(); // + timer.Interval = 200; // Установка интервала таймера + timer.Tick += Timer_Tick; // Подписка на событие таймера + timer.Start(); // Запуск таймера - // + // Инициализация меток для отображения статистики labelRemoved = new Label(); labelRemoved.Name = "labelRemoved"; - labelRemoved.Text = "# = 0"; + labelRemoved.Text = "# Нейтрализованные случаи = 0"; labelRemoved.ForeColor = Color.LightGray; labelRemoved.BackColor = Color.Black; labelRemoved.AutoSize = true; @@ -131,7 +131,7 @@ namespace Covid labelActive = new Label(); labelActive.Name = "labelActive"; - labelActive.Text = "# = 0"; + labelActive.Text = "# Активные случаи = 0"; labelActive.ForeColor = Color.Red; labelActive.BackColor = Color.Black; labelActive.AutoSize = true; @@ -147,162 +147,162 @@ namespace Covid labelDay = new Label(); labelDay.Name = "labelDay"; - labelDay.Text = ": 0"; + labelDay.Text = "День: 0"; labelDay.ForeColor = Color.White; labelDay.BackColor = Color.Black; labelDay.AutoSize = true; labelDay.Font = new Font(this.Font, FontStyle.Regular); - // PictureBox + // Расположение меток под PictureBox int spacing = 5; labelRemoved.Location = new Point(pictureBoxRight.Left, pictureBoxRight.Bottom + spacing); labelActive.Location = new Point(labelRemoved.Right + 20, pictureBoxRight.Bottom + spacing); labelR.Location = new Point(pictureBoxRight.Left, labelRemoved.Bottom + spacing + 5); labelDay.Location = new Point(pictureBoxRight.Left + pictureBoxRight.Width / 2 - 30, labelRemoved.Bottom + spacing + 5); - // + // Добавление меток на форму this.Controls.Add(labelRemoved); this.Controls.Add(labelActive); this.Controls.Add(labelR); this.Controls.Add(labelDay); } - private void Timer_Tick(object sender, EventArgs e) // , + private void Timer_Tick(object sender, EventArgs e) // Метод, вызываемый при каждом тике таймера { - day++; // - newInfectionsThisDay = 0; // + day++; // Увеличение дня + newInfectionsThisDay = 0; // Сброс новых инфекций - // + // Перемещение всех людей foreach (var p in population) p.Move(pictureBoxRight.Width, pictureBoxRight.Height); - // + // Обработка инфицированных людей foreach (var p in population.Where(p => p.State == HealthState.Infected).ToList()) { - p.DaysInfected++; // - if (p.DaysInfected >= DiseaseTime) // , + p.DaysInfected++; // Увеличение количества дней инфицирования + if (p.DaysInfected >= DiseaseTime) // Проверка, достиг ли человек летального исхода { - if (rand.NextDouble() < MortalityRate) // + if (rand.NextDouble() < MortalityRate) // Проверка на смерть человека p.State = HealthState.Dead; else - p.State = HealthState.Recovered; // "" + p.State = HealthState.Recovered; // Изменение состояния на "вылеченный" } } - InfectNearby(); // + InfectNearby(); // Используем метод заражения рядом окружающих людей - // + // Подсчет статистики int sCount = population.Count(p => p.State == HealthState.Susceptible); int iCount = population.Count(p => p.State == HealthState.Infected); int rCount = population.Count(p => p.State == HealthState.Recovered); int dCount = population.Count(p => p.State == HealthState.Dead); - // + // Сохранение истории historyS.Add(sCount); historyI.Add(iCount); historyR.Add(rCount); historyD.Add(dCount); - // R + // Обновление R float R = infectedCountPreviousDay > 0 ? (float) newInfectionsThisDay / infectedCountPreviousDay : 0f; - infectedCountPreviousDay = iCount; // + infectedCountPreviousDay = iCount; // Обновление количества инфицированных на предыдущий день - // Tag + // Обновление Tag для отрисовки pictureBoxRight.Tag = new { Active = iCount, Removed = rCount + dCount, R = R, Day = day }; - // - labelRemoved.Text = $"# = {rCount + dCount}"; - labelActive.Text = $"# = {iCount}"; + // Обновление текста меток + labelRemoved.Text = $"# Нейтрализованные случаи = {rCount + dCount}"; + labelActive.Text = $"# Активные случаи = {iCount}"; labelR.Text = $"R = {R:F2}"; - labelDay.Text = $": {day}"; - pictureBoxLeft.Invalidate(); // PictureBox - pictureBoxRight.Invalidate(); // PictureBox + labelDay.Text = $"День: {day}"; + pictureBoxLeft.Invalidate(); // Перерисовка левого PictureBox + pictureBoxRight.Invalidate(); // Перерисовка правого PictureBox } - private void InfectNearby() // + private void InfectNearby() // Метод для заражения соседей { - var infected = population.Where(p => p.State == HealthState.Infected).ToList(); // - var susceptible = population.Where(p => p.State == HealthState.Susceptible).ToList(); // + var infected = population.Where(p => p.State == HealthState.Infected).ToList(); // Список инфицированных + var susceptible = population.Where(p => p.State == HealthState.Susceptible).ToList(); // Список уязвимых - // + // Проверка расстояния между инфицированными и уязвимыми foreach (var inf in infected) { foreach (var sus in susceptible) { - float dist = Distance(inf.Position, sus.Position); // - if (dist < InfectionRadius) // + float dist = Distance(inf.Position, sus.Position); // Вычисление расстояния + if (dist < InfectionRadius) // Если в пределах радиуса инфекции { - if (rand.NextDouble() < ContagionProbability) // + if (rand.NextDouble() < ContagionProbability) // Проверка на заражение { - sus.State = HealthState.Infected; // - newInfectionsThisDay++; // + sus.State = HealthState.Infected; // Изменение состояния на инфицированный + newInfectionsThisDay++; // Увеличение счетчика новых инфекций } } } } } - private float Distance(PointF a, PointF b) // + private float Distance(PointF a, PointF b) // Метод для вычисления расстояния между двумя точками { - float dx = a.X - b.X; // X - float dy = a.Y - b.Y; // Y - return (float)Math.Sqrt(dx * dx + dy * dy); // + float dx = a.X - b.X; // Разность по X + float dy = a.Y - b.Y; // Разность по Y + return (float)Math.Sqrt(dx * dx + dy * dy); // Возвращение расстояния } - private void pictureBoxLeft_Paint(object sender, PaintEventArgs e) // + private void pictureBoxLeft_Paint(object sender, PaintEventArgs e) // Метод для отрисовки графика { Graphics g = e.Graphics; - g.Clear(Color.Black); // + g.Clear(Color.Black); // Очистка фона - if (historyS.Count < 2) return; // + if (historyS.Count < 2) return; // Если недостаточно данных для отрисовки - int w = pictureBoxLeft.Width; // PictureBox - int h = pictureBoxLeft.Height; // PictureBox + int w = pictureBoxLeft.Width; // Ширина PictureBox + int h = pictureBoxLeft.Height; // Высота PictureBox - int maxY = population.Count; // Y + int maxY = population.Count; // Максимальное значение по Y - Pen axisPen = Pens.White; // - g.DrawLine(axisPen, 40, 10, 40, h - 30); // - g.DrawLine(axisPen, 40, h - 30, w - 10, h - 30); // + Pen axisPen = Pens.White; // Перо для осей + g.DrawLine(axisPen, 40, 10, 40, h - 30); // Вертикальная ось + g.DrawLine(axisPen, 40, h - 30, w - 10, h - 30); // Горизонтальная ось - // + // Отрисовка линий графика для различных состояний DrawGraphLine(g, historyS, maxY, Color.Cyan, 40, h - 30, w - 50, h - 40); DrawGraphLine(g, historyI, maxY, Color.Red, 40, h - 30, w - 50, h - 40); DrawGraphLine(g, historyR, maxY, Color.Green, 40, h - 30, w - 50, h - 40); DrawGraphLine(g, historyD, maxY, Color.Gray, 40, h - 30, w - 50, h - 40); - // - g.DrawString("", this.Font, Brushes.Cyan, w - 130, 20); - g.DrawString("", this.Font, Brushes.Red, w - 130, 40); - g.DrawString("", this.Font, Brushes.Green, w - 130, 60); - g.DrawString("", this.Font, Brushes.Gray, w - 130, 80); + // Подписи для графика + g.DrawString("Уязвимые", this.Font, Brushes.Cyan, w - 130, 20); + g.DrawString("Инфицированные", this.Font, Brushes.Red, w - 130, 40); + g.DrawString("Вылеченные", this.Font, Brushes.Green, w - 130, 60); + g.DrawString("Погибшие", this.Font, Brushes.Gray, w - 130, 80); } - private void DrawGraphLine(Graphics g, List data, int maxY, Color color, int x0, int y0, int width, int height) // + private void DrawGraphLine(Graphics g, List data, int maxY, Color color, int x0, int y0, int width, int height) // Метод для отрисовки линии графика { - if (data.Count < 2) return; // + if (data.Count < 2) return; // Если недостаточно данных для отрисовки - Pen pen = new Pen(color, 2); // - int count = data.Count; // - float xStep = (float)width / (count - 1); // X + Pen pen = new Pen(color, 2); // Перо для линии + int count = data.Count; // Количество точек + float xStep = (float)width / (count - 1); // Шаг по X - PointF[] points = new PointF[count]; // + PointF[] points = new PointF[count]; // Массив точек для линии for (int i = 0; i < count; i++) { - float x = x0 + i * xStep; // X - float y = y0 - (data[i] / (float)maxY) * height; // Y - points[i] = new PointF(x, y); // + float x = x0 + i * xStep; // Вычисление координаты X + float y = y0 - (data[i] / (float)maxY) * height; // Вычисление координаты Y + points[i] = new PointF(x, y); // Добавление точки в массив } - g.DrawLines(pen, points); // + g.DrawLines(pen, points); // Отрисовка линии } - private void pictureBoxRight_Paint(object sender, PaintEventArgs e) // + private void pictureBoxRight_Paint(object sender, PaintEventArgs e) // Метод для отрисовки людей { Graphics g = e.Graphics; - g.Clear(Color.Black); // + g.Clear(Color.Black); // Очистка фона - // + // Отрисовка каждого человека в зависимости от его состояния foreach (var p in population) { Color c = p.State switch @@ -313,7 +313,7 @@ namespace Covid HealthState.Dead => Color.Gray, _ => Color.White }; - g.FillEllipse(new SolidBrush(c), p.Position.X, p.Position.Y, 5, 5); // + g.FillEllipse(new SolidBrush(c), p.Position.X, p.Position.Y, 5, 5); // Отрисовка человека } } } diff --git a/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfo.cs b/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfo.cs index 817f4ce..e03899a 100644 --- a/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfo.cs +++ b/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Covid")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c4b6f37f94da0dd94f125b72795dc574ea0de202")] [assembly: System.Reflection.AssemblyProductAttribute("Covid")] [assembly: System.Reflection.AssemblyTitleAttribute("Covid")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfoInputs.cache b/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfoInputs.cache index 103e675..52025cb 100644 --- a/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfoInputs.cache +++ b/Covid/obj/Debug/net8.0-windows/Covid.AssemblyInfoInputs.cache @@ -1 +1 @@ -791c09cd43fa4cea4c5a0aea34bd9a64d9a3d91a582e44ce4a8ba2b8f54cb8e8 +760fc87965472c3c0c9a35e2c992cbab439a47f5b4066ff26223e957d90ede06