From 3544016ca9fb78fe073f719933175f9a54caa7ff Mon Sep 17 00:00:00 2001 From: stepan Date: Wed, 13 Nov 2024 14:30:56 +0500 Subject: [PATCH 01/12] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20TagCloudVisualization=20?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/CircularCloudLayouter.cs | 9 +++++++++ cs/TagsCloudVisualization/Program.cs | 10 ++++++++++ .../TagsCloudVisualization.csproj | 10 ++++++++++ 3 files changed, 29 insertions(+) create mode 100644 cs/TagsCloudVisualization/CircularCloudLayouter.cs create mode 100644 cs/TagsCloudVisualization/Program.cs create mode 100644 cs/TagsCloudVisualization/TagsCloudVisualization.csproj diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs new file mode 100644 index 000000000..ea3430d90 --- /dev/null +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -0,0 +1,9 @@ +using System.Drawing; + +namespace TagsCloudVisualization; + +internal interface CircularCloudLayouter +{ + CircularCloudLayouter(Point center); + Rectangle PutNextRectangle(Size rectangleSize); +} diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs new file mode 100644 index 000000000..37c5ca499 --- /dev/null +++ b/cs/TagsCloudVisualization/Program.cs @@ -0,0 +1,10 @@ +namespace TagsCloudVisualization +{ + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + } + } +} diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj new file mode 100644 index 000000000..2150e3797 --- /dev/null +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + From 00e0c4b0e3c413d2401882178b3a230a23f19ce3 Mon Sep 17 00:00:00 2001 From: stepan Date: Wed, 13 Nov 2024 15:51:06 +0500 Subject: [PATCH 02/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BA=D0=B7=D0=B5?= =?UTF-8?q?=D0=BC=D0=BF=D0=BB=D1=8F=D1=80=D0=B0=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/BowlingGame/BowlingGame.csproj | 2 +- cs/Samples/Samples.csproj | 1 + .../CircularCloudLayouter.cs | 9 -------- cs/TagsCloudVisualization/Program.cs | 10 --------- .../TagsCloudVisualization.csproj | 7 +++++++ .../Task 1/CircularCloudLayouter.cs | 18 ++++++++++++++++ .../Task 1/CircularCloudLayouterTests.cs | 21 +++++++++++++++++++ cs/tdd.sln | 17 +++++++++++---- cs/tdd.sln.DotSettings | 3 +++ 9 files changed, 64 insertions(+), 24 deletions(-) delete mode 100644 cs/TagsCloudVisualization/CircularCloudLayouter.cs delete mode 100644 cs/TagsCloudVisualization/Program.cs create mode 100644 cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs create mode 100644 cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs diff --git a/cs/BowlingGame/BowlingGame.csproj b/cs/BowlingGame/BowlingGame.csproj index 3316df102..8c7ba1bd8 100644 --- a/cs/BowlingGame/BowlingGame.csproj +++ b/cs/BowlingGame/BowlingGame.csproj @@ -17,7 +17,7 @@ - + diff --git a/cs/Samples/Samples.csproj b/cs/Samples/Samples.csproj index 113a459cd..3f8baaa9c 100644 --- a/cs/Samples/Samples.csproj +++ b/cs/Samples/Samples.csproj @@ -10,6 +10,7 @@ + diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs deleted file mode 100644 index ea3430d90..000000000 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Drawing; - -namespace TagsCloudVisualization; - -internal interface CircularCloudLayouter -{ - CircularCloudLayouter(Point center); - Rectangle PutNextRectangle(Size rectangleSize); -} diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs deleted file mode 100644 index 37c5ca499..000000000 --- a/cs/TagsCloudVisualization/Program.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace TagsCloudVisualization -{ - internal class Program - { - static void Main(string[] args) - { - Console.WriteLine("Hello, World!"); - } - } -} diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj index 2150e3797..d7b1d1b0a 100644 --- a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -7,4 +7,11 @@ enable + + + + + + + diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs new file mode 100644 index 000000000..bb60031e4 --- /dev/null +++ b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs @@ -0,0 +1,18 @@ +using System.Drawing; + +namespace TagsCloudVisualization; + +class CircularCloudLayouter +{ + public readonly Point Center; + + public CircularCloudLayouter(Point center) + { + Center = center; + } + + public Rectangle PutNextRectangle(Size rectangleSize) + { + throw new NotImplementedException(); + } +} diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs new file mode 100644 index 000000000..3f3a22aa3 --- /dev/null +++ b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs @@ -0,0 +1,21 @@ +using FluentAssertions; +using NUnit.Framework; +using System.Drawing; + + +namespace TagsCloudVisualization; + + +[TestFixture] +public class CircularCloudLayouterTests +{ + [Test] + public void CircularCloudLayouter_CorrectInitialization_NoExceptions() + { + var createAConstructor = () => new CircularCloudLayouter(new Point(960, 540)); + + createAConstructor + .Should() + .NotThrow(); + } +} diff --git a/cs/tdd.sln b/cs/tdd.sln index c8f523d63..91d140bd3 100644 --- a/cs/tdd.sln +++ b/cs/tdd.sln @@ -1,11 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35312.102 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BowlingGame", "BowlingGame\BowlingGame.csproj", "{AD0F018A-732E-4074-8527-AB2EEC8D0BF3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BowlingGame", "BowlingGame\BowlingGame.csproj", "{AD0F018A-732E-4074-8527-AB2EEC8D0BF3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples", "Samples\Samples.csproj", "{B5108E20-2ACF-4ED9-84FE-2A718050FC94}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{B5108E20-2ACF-4ED9-84FE-2A718050FC94}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagsCloudVisualization", "TagsCloudVisualization\TagsCloudVisualization.csproj", "{1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,8 +23,15 @@ Global {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Debug|Any CPU.Build.0 = Debug|Any CPU {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Release|Any CPU.ActiveCfg = Release|Any CPU {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Release|Any CPU.Build.0 = Release|Any CPU + {1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {460B15EA-8A79-4B9D-AE55-4F1224612C1D} + EndGlobalSection EndGlobal diff --git a/cs/tdd.sln.DotSettings b/cs/tdd.sln.DotSettings index 135b83ecb..229f449d2 100644 --- a/cs/tdd.sln.DotSettings +++ b/cs/tdd.sln.DotSettings @@ -1,6 +1,9 @@  <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb_AaBb" /> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Types and namespaces"><ElementKinds><Kind Name="NAMESPACE" /><Kind Name="CLASS" /><Kind Name="STRUCT" /><Kind Name="ENUM" /><Kind Name="DELEGATE" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb_AaBb" /></Policy> + True True True Imported 10.10.2016 From b442385bf0252dae70259f686c2c1d4cf6134a51 Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 14 Nov 2024 00:16:42 +0500 Subject: [PATCH 03/12] =?UTF-8?q?=D0=97=D0=B0=D0=B2=D0=B5=D1=80=D1=88?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D0=BF=D0=BE=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D1=8F=D0=BC=D0=BE=D1=83=D0=B3=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task 1/CircularCloudLayouter.cs | 51 ++++++++++++++++++- .../Task 1/CircularCloudLayouterTests.cs | 40 +++++++++++++++ 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs index bb60031e4..57904d618 100644 --- a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs @@ -1,18 +1,65 @@ using System.Drawing; + namespace TagsCloudVisualization; -class CircularCloudLayouter +public class CircularCloudLayouter { + public int DistanceBetweenTurns { get; private set; } + public int InitialRadiusOfTheSpiral { get; private set; } + public double AngleOfRotationInRadians { get; private set; } + public double AngleChangeStep { get; private set; } + + readonly LinkedList cloudOfRectangles; + public readonly Point Center; public CircularCloudLayouter(Point center) { Center = center; + AngleChangeStep = 0.017; + cloudOfRectangles = []; + DistanceBetweenTurns = 30; + InitialRadiusOfTheSpiral = 30; } public Rectangle PutNextRectangle(Size rectangleSize) { - throw new NotImplementedException(); + if (cloudOfRectangles.Count == 0) + InitialRadiusOfTheSpiral = Math.Min(rectangleSize.Width, rectangleSize.Height) / 2; + + DistanceBetweenTurns = Math.Min(DistanceBetweenTurns, + Math.Min(rectangleSize.Width, rectangleSize.Height) / 2); + + return chooseTheLocationForTheRectangle(rectangleSize); + } + + Rectangle chooseTheLocationForTheRectangle(Size rectangleSize) + { + var currentPoint = GetANewPoint(); + var rectangle = getANewRectangle(currentPoint, rectangleSize); + + while (cloudOfRectangles.Any(rect => rect.IntersectsWith(rectangle))) + { + AngleOfRotationInRadians += AngleChangeStep; + currentPoint = GetANewPoint(); + rectangle = getANewRectangle(currentPoint, rectangleSize); + } + + cloudOfRectangles.AddFirst(rectangle); + return rectangle; + } + + Rectangle getANewRectangle(Point centerPoint, Size rectangleSize) => + new(new(centerPoint.X - rectangleSize.Width / 2, + centerPoint.Y - rectangleSize.Height / 2), rectangleSize); + + Point GetANewPoint() + { + var coefficient = InitialRadiusOfTheSpiral + AngleOfRotationInRadians * DistanceBetweenTurns; + var x = coefficient * Math.Cos(AngleOfRotationInRadians) + Center.X; + var y = coefficient * Math.Sin(AngleOfRotationInRadians) + Center.Y; + + return new((int)x, (int)y); } } diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs index 3f3a22aa3..eb4fdb149 100644 --- a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs @@ -18,4 +18,44 @@ public void CircularCloudLayouter_CorrectInitialization_NoExceptions() .Should() .NotThrow(); } + + [Test] + public void PutNextRectangle_RandomSizes_MustBeTheRightSize() + { + var cloud = new CircularCloudLayouter(new Point(960, 540)); + var random = new Random(); + + for (var i = 0; i < 50; i++) + { + var width = random.Next(30, 200); + var actualSize = new Size(width, random.Next(width / 6, width / 3)); + + var rectangle = cloud.PutNextRectangle(actualSize); + + actualSize + .Should() + .Be(rectangle.Size); + } + } + + [Test] + public void PutNextRectangle_RandomSizes_ShouldNotIntersect() + { + var cloud = new CircularCloudLayouter(new Point(960, 540)); + var listRectangles = new List(); + var random = new Random(); + + for (int i = 0; i < 100; i++) + { + var width = random.Next(30, 200); + + var rectangle = cloud.PutNextRectangle(new(width, random.Next(width / 6, width / 3))); + + listRectangles.Any(rect => rect.IntersectsWith(rectangle)) + .Should() + .BeFalse("Прямоугольники не должны пересекаться"); + + listRectangles.Add(rectangle); + } + } } From bef6b8089386ffb30381c1b3dd6eb9dc1ecfdde2 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 10:42:56 +0500 Subject: [PATCH 04/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BC=D0=BE=D0=B4=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20private=20=D0=BC=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task 1/CircularCloudLayouter.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs index 57904d618..6fa83e8bc 100644 --- a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs @@ -31,30 +31,30 @@ public Rectangle PutNextRectangle(Size rectangleSize) DistanceBetweenTurns = Math.Min(DistanceBetweenTurns, Math.Min(rectangleSize.Width, rectangleSize.Height) / 2); - return chooseTheLocationForTheRectangle(rectangleSize); + return ChooseTheLocationForTheRectangle(rectangleSize); } - Rectangle chooseTheLocationForTheRectangle(Size rectangleSize) + private Rectangle ChooseTheLocationForTheRectangle(Size rectangleSize) { var currentPoint = GetANewPoint(); - var rectangle = getANewRectangle(currentPoint, rectangleSize); + var rectangle = GetANewRectangle(currentPoint, rectangleSize); while (cloudOfRectangles.Any(rect => rect.IntersectsWith(rectangle))) { AngleOfRotationInRadians += AngleChangeStep; currentPoint = GetANewPoint(); - rectangle = getANewRectangle(currentPoint, rectangleSize); + rectangle = GetANewRectangle(currentPoint, rectangleSize); } cloudOfRectangles.AddFirst(rectangle); return rectangle; } - Rectangle getANewRectangle(Point centerPoint, Size rectangleSize) => + private Rectangle GetANewRectangle(Point centerPoint, Size rectangleSize) => new(new(centerPoint.X - rectangleSize.Width / 2, centerPoint.Y - rectangleSize.Height / 2), rectangleSize); - Point GetANewPoint() + private Point GetANewPoint() { var coefficient = InitialRadiusOfTheSpiral + AngleOfRotationInRadians * DistanceBetweenTurns; var x = coefficient * Math.Cos(AngleOfRotationInRadians) + Center.X; From 2aa2d0824ac047ac39181c391df1db78470a9102 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 19:13:09 +0500 Subject: [PATCH 05/12] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B8=D0=B7=D1=83=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Program.cs | 21 ++++++++ .../TagsCloudVisualization.csproj | 6 ++- .../Task 2/Central\320\241loud.png" | Bin 0 -> 21765 bytes .../Task 2/CloudLayout.cs | 31 +++++++++++ cs/TagsCloudVisualization/Task 2/README.md | 12 +++++ .../Task 2/Smal\320\241loud.png" | Bin 0 -> 8412 bytes .../Task 2/VisualizationCloudLayout.cs | 51 ++++++++++++++++++ cs/tdd.sln | 2 +- 8 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 cs/TagsCloudVisualization/Program.cs create mode 100644 "cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" create mode 100644 cs/TagsCloudVisualization/Task 2/CloudLayout.cs create mode 100644 cs/TagsCloudVisualization/Task 2/README.md create mode 100644 "cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" create mode 100644 cs/TagsCloudVisualization/Task 2/VisualizationCloudLayout.cs diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs new file mode 100644 index 000000000..a8b30c3fa --- /dev/null +++ b/cs/TagsCloudVisualization/Program.cs @@ -0,0 +1,21 @@ +using System.Drawing; +using TagsCloudVisualization.Task_2; + + +namespace TagsCloudVisualization; + +internal class Program +{ + static void Main(string[] args) + { + var colors = new[] { Color.Red, Color.Green, Color.Brown, Color.Yellow, Color.Blue }; + + var visual = new VisualizationCloudLayout(800, 600, Color.White, colors); + + visual.CreateAnImage(new Point(400, 300), 175, 30, 100, 5, 25) + .Save("../../../../TagsCloudVisualization/Task 2/CentralСloud.png"); + + visual.CreateAnImage(new Point(250, 150), 50, 30, 80, 5, 25) + .Save("../../../../TagsCloudVisualization/Task 2/SmalСloud.png"); + } +} diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj index d7b1d1b0a..c27f584ba 100644 --- a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -1,17 +1,19 @@  - Exe + Library net8.0 enable + false enable - + + diff --git "a/cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" "b/cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" new file mode 100644 index 0000000000000000000000000000000000000000..a82922651625dc624ed233316bb25afe40b96cc2 GIT binary patch literal 21765 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 e@CAND4Ea$Vu()hszf@BanE>(fC1 literal 0 HcmV?d00001 diff --git a/cs/TagsCloudVisualization/Task 2/CloudLayout.cs b/cs/TagsCloudVisualization/Task 2/CloudLayout.cs new file mode 100644 index 000000000..f10305ab3 --- /dev/null +++ b/cs/TagsCloudVisualization/Task 2/CloudLayout.cs @@ -0,0 +1,31 @@ +using System.Drawing; + +namespace TagsCloudVisualization.Task_2; + +public static class CloudLayout +{ + public static IEnumerable GenerateCloudLayout(int amountRectangles, + int startWidthRectangles, int endWidthRectangles, + int startHeightRectangles, int endHeightRectangles, + CircularCloudLayouter cloudLayouter) + => GenerateRectangleSizes(amountRectangles, + startWidthRectangles, endWidthRectangles, + startHeightRectangles, endHeightRectangles) + .Select(cloudLayouter.PutNextRectangle); + + private static IEnumerable GenerateRectangleSizes( + int amountData, + int startWidth, int endWidth, + int startHeight, int endHeight) + { + var random = new Random(); + + for (var i = 0; i < amountData; i++) + { + var width = random.Next(startWidth, endWidth + 1); + var height = random.Next(startHeight, endHeight + 1); + + yield return new Size(width, height); + } + } +} diff --git a/cs/TagsCloudVisualization/Task 2/README.md b/cs/TagsCloudVisualization/Task 2/README.md new file mode 100644 index 000000000..886b826fd --- /dev/null +++ b/cs/TagsCloudVisualization/Task 2/README.md @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization.Task_2 +{ + class README + { + } +} diff --git "a/cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" "b/cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" new file mode 100644 index 0000000000000000000000000000000000000000..6762a51bf60b235979e149bc11ab63395b429a0b GIT binary patch literal 8412 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 F`#0T rectanglePalette) + { + Width = width; + Height = height; + BackgroundColor = backgroundColor; + RectanglePalette = rectanglePalette.ToArray(); + } + + public Bitmap CreateAnImage(Point center, int amountRectangles, + int startWidthRectangles, int endWidthRectangles, + int startHeightRectangles, int endHeightRectangles) + { + var image = new Bitmap(Width, Height); + var rectangles = CloudLayout.GenerateCloudLayout( + amountRectangles, + startWidthRectangles, endWidthRectangles, + startHeightRectangles, endHeightRectangles, + new CircularCloudLayouter(center)); + var graphics = Graphics.FromImage(image); + + DrawCloudLayout(graphics, rectangles); + + return image; + } + + private void DrawCloudLayout(Graphics graphics, IEnumerable rectangles) + { + var random = new Random(); + + graphics.FillRectangle(new SolidBrush(BackgroundColor), 0, 0, Width, Height); + + foreach (var rect in rectangles) + { + var color = RectanglePalette[random.Next(RectanglePalette.Length)]; + + graphics.FillRectangle(new SolidBrush(color), rect); + graphics.DrawRectangle(new Pen(Color.Black, 1), rect); + } + } +} diff --git a/cs/tdd.sln b/cs/tdd.sln index 91d140bd3..182027f76 100644 --- a/cs/tdd.sln +++ b/cs/tdd.sln @@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BowlingGame", "BowlingGame\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{B5108E20-2ACF-4ED9-84FE-2A718050FC94}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagsCloudVisualization", "TagsCloudVisualization\TagsCloudVisualization.csproj", "{1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TagsCloudVisualization", "TagsCloudVisualization\TagsCloudVisualization.csproj", "{1C4D8E05-ABDC-43A6-BFBA-741A8435AF31}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution From d40d671a5a3ee6cdd7194c37acdfa29a04060d8e Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 19:20:24 +0500 Subject: [PATCH 06/12] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=8B=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D1=81=D1=8F=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Task 2/README.md | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/cs/TagsCloudVisualization/Task 2/README.md b/cs/TagsCloudVisualization/Task 2/README.md index 886b826fd..73712b550 100644 --- a/cs/TagsCloudVisualization/Task 2/README.md +++ b/cs/TagsCloudVisualization/Task 2/README.md @@ -1,12 +1 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TagsCloudVisualization.Task_2 -{ - class README - { - } -} +![CentralСloud](./directory_1/directory_2/.../directory_n/CentralСloud.png) \ No newline at end of file From bc219ac689ff6655ed8d76feea919bc425e57ae0 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 19:56:14 +0500 Subject: [PATCH 07/12] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20markdown=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Task 2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cs/TagsCloudVisualization/Task 2/README.md b/cs/TagsCloudVisualization/Task 2/README.md index 73712b550..bf1527f5f 100644 --- a/cs/TagsCloudVisualization/Task 2/README.md +++ b/cs/TagsCloudVisualization/Task 2/README.md @@ -1 +1 @@ -![CentralСloud](./directory_1/directory_2/.../directory_n/CentralСloud.png) \ No newline at end of file +![CentralСloud](CentralСloud.png) \ No newline at end of file From d5358bbbe11c0137f5375a8f73737b120683a538 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 19:59:44 +0500 Subject: [PATCH 08/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D1=82=D0=BE=D1=80=D1=83=D1=8E=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D1=83=20=D0=B2=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Task 2/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cs/TagsCloudVisualization/Task 2/README.md b/cs/TagsCloudVisualization/Task 2/README.md index bf1527f5f..a706b5f83 100644 --- a/cs/TagsCloudVisualization/Task 2/README.md +++ b/cs/TagsCloudVisualization/Task 2/README.md @@ -1 +1,2 @@ -![CentralСloud](CentralСloud.png) \ No newline at end of file +![CentralСloud](CentralСloud.png) +![SmalСloud](SmalСloud.png) \ No newline at end of file From 90aeca8cb65c428579c56ba2fcf51195b751e224 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 20:47:53 +0500 Subject: [PATCH 09/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=BA=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Task 2/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cs/TagsCloudVisualization/Task 2/README.md b/cs/TagsCloudVisualization/Task 2/README.md index a706b5f83..9d0c10a6e 100644 --- a/cs/TagsCloudVisualization/Task 2/README.md +++ b/cs/TagsCloudVisualization/Task 2/README.md @@ -1,2 +1,4 @@ -![CentralСloud](CentralСloud.png) +Раскладка 1 +![CentralСloud](CentralСloud.png) +Раскладка 2 ![SmalСloud](SmalСloud.png) \ No newline at end of file From 93d54c5dcd004a3cf376a52eecf99b0277f81cf5 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 16 Nov 2024 22:56:14 +0500 Subject: [PATCH 10/12] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Task 1 => Task 1,3}/CircularCloudLayouter.cs | 0 .../{Task 1 => Task 1,3}/CircularCloudLayouterTests.cs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename cs/TagsCloudVisualization/{Task 1 => Task 1,3}/CircularCloudLayouter.cs (100%) rename cs/TagsCloudVisualization/{Task 1 => Task 1,3}/CircularCloudLayouterTests.cs (100%) diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouter.cs similarity index 100% rename from cs/TagsCloudVisualization/Task 1/CircularCloudLayouter.cs rename to cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouter.cs diff --git a/cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs similarity index 100% rename from cs/TagsCloudVisualization/Task 1/CircularCloudLayouterTests.cs rename to cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs From 0bffa4dbb58f89245712f23b183490d41fb497db Mon Sep 17 00:00:00 2001 From: stepan Date: Mon, 18 Nov 2024 20:27:20 +0500 Subject: [PATCH 11/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=20=D1=82=D0=B5=D1=81=D1=82=D1=8B,=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D1=8E=D1=89=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D0=B5=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=81=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF=D1=80=D1=8F?= =?UTF-8?q?=D0=BC=D0=BE=D1=83=D0=B3=D0=BE=D0=BB=D1=8C=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2,=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BE=D0=B2=20=D0=BE?= =?UTF-8?q?=D0=B1=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Program.cs | 4 +-- .../TagsCloudVisualization.csproj | 4 +++ .../Task 1,3/CircularCloudLayouterTests.cs | 28 ++++++++++++++++-- .../Task 2/Central\320\241loud.png" | Bin 21765 -> 21797 bytes .../Task 2/Smal\320\241loud.png" | Bin 8412 -> 8304 bytes .../Task 2/VisualizationCloudLayout.cs | 9 +++--- 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs index a8b30c3fa..dd5f8c94a 100644 --- a/cs/TagsCloudVisualization/Program.cs +++ b/cs/TagsCloudVisualization/Program.cs @@ -12,10 +12,10 @@ static void Main(string[] args) var visual = new VisualizationCloudLayout(800, 600, Color.White, colors); - visual.CreateAnImage(new Point(400, 300), 175, 30, 100, 5, 25) + visual.CreateAnImage(new CircularCloudLayouter(new Point(400, 300)), 175, 30, 100, 5, 25) .Save("../../../../TagsCloudVisualization/Task 2/CentralСloud.png"); - visual.CreateAnImage(new Point(250, 150), 50, 30, 80, 5, 25) + visual.CreateAnImage(new CircularCloudLayouter(new Point(250, 150)), 50, 30, 80, 5, 25) .Save("../../../../TagsCloudVisualization/Task 2/SmalСloud.png"); } } diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj index c27f584ba..d0f188d6e 100644 --- a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -16,4 +16,8 @@ + + + + diff --git a/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs index eb4fdb149..35799a4e0 100644 --- a/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs @@ -1,6 +1,8 @@ using FluentAssertions; using NUnit.Framework; +using NUnit.Framework.Interfaces; using System.Drawing; +using TagsCloudVisualization.Task_2; namespace TagsCloudVisualization; @@ -9,6 +11,9 @@ namespace TagsCloudVisualization; [TestFixture] public class CircularCloudLayouterTests { + private readonly static List listRectangles = []; + private readonly static CircularCloudLayouter cloudLayouter; + [Test] public void CircularCloudLayouter_CorrectInitialization_NoExceptions() { @@ -41,15 +46,14 @@ public void PutNextRectangle_RandomSizes_MustBeTheRightSize() [Test] public void PutNextRectangle_RandomSizes_ShouldNotIntersect() { - var cloud = new CircularCloudLayouter(new Point(960, 540)); - var listRectangles = new List(); + var cloudLayouter = new CircularCloudLayouter(new Point(960, 540)); var random = new Random(); for (int i = 0; i < 100; i++) { var width = random.Next(30, 200); - var rectangle = cloud.PutNextRectangle(new(width, random.Next(width / 6, width / 3))); + var rectangle = cloudLayouter.PutNextRectangle(new(width, random.Next(width / 6, width / 3))); listRectangles.Any(rect => rect.IntersectsWith(rectangle)) .Should() @@ -58,4 +62,22 @@ public void PutNextRectangle_RandomSizes_ShouldNotIntersect() listRectangles.Add(rectangle); } } + + [TearDown] + public void CreateReportInCaseOfAnError() + { + if (TestContext.CurrentContext.Result.Outcome == ResultState.Failure) + { + var colors = new[] { Color.Red, Color.Green, Color.Brown, Color.Yellow, Color.Blue }; + var path = "../../../../TagsCloudVisualization/TestErrorReports/сloud.png"; + var visual = new VisualizationCloudLayout(1920, 1080, Color.White, colors); + + visual.CreateAnImage(cloudLayouter, 175, 30, 100, 5, 25, listRectangles) + .Save(path); + + Console.WriteLine($"Tag cloud visualization saved to file {Path.GetFullPath(path)}"); + } + + listRectangles.Clear(); + } } diff --git "a/cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" "b/cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" index a82922651625dc624ed233316bb25afe40b96cc2..322749155e247c85f31d611b3cc01cd5f8ed3fda 100644 GIT binary patch literal 21797 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 e@CAND4Ea$Vu()hszf@BanE>(fC1 diff --git "a/cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" "b/cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" index 6762a51bf60b235979e149bc11ab63395b429a0b..be382d8348638c7e1599cef6bd069f9d7a28fc21 100644 GIT binary patch literal 8304 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 literal 8412 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 F`#0T rectangles = null) { var image = new Bitmap(Width, Height); - var rectangles = CloudLayout.GenerateCloudLayout( + + rectangles = rectangles ?? CloudLayout.GenerateCloudLayout( amountRectangles, startWidthRectangles, endWidthRectangles, startHeightRectangles, endHeightRectangles, - new CircularCloudLayouter(center)); + cloudLayouter); var graphics = Graphics.FromImage(image); DrawCloudLayout(graphics, rectangles); From 983089799bd54769fe288cb7227186441ca86fed Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 19 Nov 2024 13:57:27 +0500 Subject: [PATCH 12/12] =?UTF-8?q?=D0=9E=D1=82=D1=80=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BB=20=D0=BA=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cs/TagsCloudVisualization/Program.cs | 12 +++-- .../TagsCloudVisualization.csproj | 6 +-- .../Task 1,3/CircularCloudLayouter.cs | 41 +++++++------- .../Task 1,3/CircularCloudLayouterTests.cs | 7 ++- .../Task 2/Central\320\241loud.png" | Bin 21797 -> 21043 bytes .../Task 2/CloudLayout.cs | 22 ++++---- .../Task 2/Smal\320\241loud.png" | Bin 8304 -> 8032 bytes .../Task 2/VisualizationCloudLayout.cs | 51 ++++++++++-------- 8 files changed, 72 insertions(+), 67 deletions(-) diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs index dd5f8c94a..e96d4de27 100644 --- a/cs/TagsCloudVisualization/Program.cs +++ b/cs/TagsCloudVisualization/Program.cs @@ -6,16 +6,18 @@ namespace TagsCloudVisualization; internal class Program { - static void Main(string[] args) + private const string Path = "../../../../TagsCloudVisualization/Task 2"; + + static void Main() { var colors = new[] { Color.Red, Color.Green, Color.Brown, Color.Yellow, Color.Blue }; var visual = new VisualizationCloudLayout(800, 600, Color.White, colors); - visual.CreateAnImage(new CircularCloudLayouter(new Point(400, 300)), 175, 30, 100, 5, 25) - .Save("../../../../TagsCloudVisualization/Task 2/CentralСloud.png"); + visual.CreateImage(new CircularCloudLayouter(new Point(400, 300)), 175, new Size(30, 5), new Size(100, 25)) + .Save($"{Path}/CentralСloud.png"); - visual.CreateAnImage(new CircularCloudLayouter(new Point(250, 150)), 50, 30, 80, 5, 25) - .Save("../../../../TagsCloudVisualization/Task 2/SmalСloud.png"); + visual.CreateImage(new CircularCloudLayouter(new Point(250, 150)), 50, new Size(30, 5), new Size(80, 25)) + .Save($"{Path}/SmalСloud.png"); } } diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj index d0f188d6e..9ff6b6488 100644 --- a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -15,9 +15,5 @@ - - - - - + diff --git a/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouter.cs index 6fa83e8bc..348be6e03 100644 --- a/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouter.cs @@ -5,58 +5,57 @@ namespace TagsCloudVisualization; public class CircularCloudLayouter { - public int DistanceBetweenTurns { get; private set; } - public int InitialRadiusOfTheSpiral { get; private set; } - public double AngleOfRotationInRadians { get; private set; } - public double AngleChangeStep { get; private set; } + private const double AngleChangeStep = Math.PI / 180; + private int DistanceBetweenTurns { get; set; } + private int InitialRadiusOfSpiral { get; set; } + private double AngleOfRotationInRadians { get; set; } - readonly LinkedList cloudOfRectangles; + private readonly LinkedList cloudOfRectangles; public readonly Point Center; public CircularCloudLayouter(Point center) { Center = center; - AngleChangeStep = 0.017; cloudOfRectangles = []; DistanceBetweenTurns = 30; - InitialRadiusOfTheSpiral = 30; } public Rectangle PutNextRectangle(Size rectangleSize) { - if (cloudOfRectangles.Count == 0) - InitialRadiusOfTheSpiral = Math.Min(rectangleSize.Width, rectangleSize.Height) / 2; + var halfOfMinSide = Math.Min(rectangleSize.Width, rectangleSize.Height) / 2; + DistanceBetweenTurns = Math.Min(DistanceBetweenTurns, halfOfMinSide); - DistanceBetweenTurns = Math.Min(DistanceBetweenTurns, - Math.Min(rectangleSize.Width, rectangleSize.Height) / 2); + if (cloudOfRectangles.Count == 0) InitialRadiusOfSpiral = halfOfMinSide; - return ChooseTheLocationForTheRectangle(rectangleSize); + var rectangle = ChooseLocationForRectangle(rectangleSize); + cloudOfRectangles.AddFirst(rectangle); + + return rectangle; } - private Rectangle ChooseTheLocationForTheRectangle(Size rectangleSize) + private Rectangle ChooseLocationForRectangle(Size rectangleSize) { - var currentPoint = GetANewPoint(); - var rectangle = GetANewRectangle(currentPoint, rectangleSize); + var currentPoint = GetNewPoint(); + var rectangle = GetNewRectangle(currentPoint, rectangleSize); while (cloudOfRectangles.Any(rect => rect.IntersectsWith(rectangle))) { AngleOfRotationInRadians += AngleChangeStep; - currentPoint = GetANewPoint(); - rectangle = GetANewRectangle(currentPoint, rectangleSize); + currentPoint = GetNewPoint(); + rectangle = GetNewRectangle(currentPoint, rectangleSize); } - cloudOfRectangles.AddFirst(rectangle); return rectangle; } - private Rectangle GetANewRectangle(Point centerPoint, Size rectangleSize) => + private Rectangle GetNewRectangle(Point centerPoint, Size rectangleSize) => new(new(centerPoint.X - rectangleSize.Width / 2, centerPoint.Y - rectangleSize.Height / 2), rectangleSize); - private Point GetANewPoint() + private Point GetNewPoint() { - var coefficient = InitialRadiusOfTheSpiral + AngleOfRotationInRadians * DistanceBetweenTurns; + var coefficient = InitialRadiusOfSpiral + AngleOfRotationInRadians * DistanceBetweenTurns; var x = coefficient * Math.Cos(AngleOfRotationInRadians) + Center.X; var y = coefficient * Math.Sin(AngleOfRotationInRadians) + Center.Y; diff --git a/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs index 35799a4e0..200a663f5 100644 --- a/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Task 1,3/CircularCloudLayouterTests.cs @@ -11,8 +11,7 @@ namespace TagsCloudVisualization; [TestFixture] public class CircularCloudLayouterTests { - private readonly static List listRectangles = []; - private readonly static CircularCloudLayouter cloudLayouter; + private readonly List listRectangles = []; [Test] public void CircularCloudLayouter_CorrectInitialization_NoExceptions() @@ -25,7 +24,7 @@ public void CircularCloudLayouter_CorrectInitialization_NoExceptions() } [Test] - public void PutNextRectangle_RandomSizes_MustBeTheRightSize() + public void PutNextRectangle_RandomSizes_MustBeRightSize() { var cloud = new CircularCloudLayouter(new Point(960, 540)); var random = new Random(); @@ -72,7 +71,7 @@ public void CreateReportInCaseOfAnError() var path = "../../../../TagsCloudVisualization/TestErrorReports/сloud.png"; var visual = new VisualizationCloudLayout(1920, 1080, Color.White, colors); - visual.CreateAnImage(cloudLayouter, 175, 30, 100, 5, 25, listRectangles) + visual.CreateImage(listRectangles) .Save(path); Console.WriteLine($"Tag cloud visualization saved to file {Path.GetFullPath(path)}"); diff --git "a/cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" "b/cs/TagsCloudVisualization/Task 2/Central\320\241loud.png" index 322749155e247c85f31d611b3cc01cd5f8ed3fda..5364503331540bbda484d5b059d8bfe500c72941 100644 GIT binary patch literal 21043 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 literal 21797 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 GenerateCloudLayout(int amountRectangles, - int startWidthRectangles, int endWidthRectangles, - int startHeightRectangles, int endHeightRectangles, + public static IEnumerable GenerateCloudLayout( + int amountRectangles, + Size minSize, + Size maxSize, CircularCloudLayouter cloudLayouter) - => GenerateRectangleSizes(amountRectangles, - startWidthRectangles, endWidthRectangles, - startHeightRectangles, endHeightRectangles) + => GenerateRectangleSizes(amountRectangles, minSize, maxSize) .Select(cloudLayouter.PutNextRectangle); private static IEnumerable GenerateRectangleSizes( int amountData, - int startWidth, int endWidth, - int startHeight, int endHeight) + Size minSize, + Size maxSize) { + if (minSize.Width > maxSize.Width || minSize.Height > maxSize.Width) + throw new ArgumentException("Минимальные размеры не могут быть больше максимальных"); + var random = new Random(); for (var i = 0; i < amountData; i++) { - var width = random.Next(startWidth, endWidth + 1); - var height = random.Next(startHeight, endHeight + 1); + var width = random.Next(minSize.Width, maxSize.Width + 1); + var height = random.Next(minSize.Height, maxSize.Height + 1); yield return new Size(width, height); } diff --git "a/cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" "b/cs/TagsCloudVisualization/Task 2/Smal\320\241loud.png" index be382d8348638c7e1599cef6bd069f9d7a28fc21..c5053674fe9982f3d378236015e9b56293718b97 100644 GIT binary patch literal 8032 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 K>E^~gC;kCh_oAr) literal 8304 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 diff --git a/cs/TagsCloudVisualization/Task 2/VisualizationCloudLayout.cs b/cs/TagsCloudVisualization/Task 2/VisualizationCloudLayout.cs index bd348f539..990b55e9b 100644 --- a/cs/TagsCloudVisualization/Task 2/VisualizationCloudLayout.cs +++ b/cs/TagsCloudVisualization/Task 2/VisualizationCloudLayout.cs @@ -1,36 +1,43 @@ -using System.Drawing; +using Newtonsoft.Json.Linq; +using System.Drawing; namespace TagsCloudVisualization.Task_2; public class VisualizationCloudLayout { - public readonly int Width; - public readonly int Height; - public readonly Color BackgroundColor; - public readonly Color[] RectanglePalette; + private readonly int width; + private readonly int height; + private readonly Color backgroundColor; + private readonly Color[] rectanglePalette; public VisualizationCloudLayout(int width, int height, Color backgroundColor, IEnumerable rectanglePalette) { - Width = width; - Height = height; - BackgroundColor = backgroundColor; - RectanglePalette = rectanglePalette.ToArray(); + this.width = width; + this.height = height; + this.backgroundColor = backgroundColor; + this.rectanglePalette = rectanglePalette.ToArray(); } - public Bitmap CreateAnImage(CircularCloudLayouter cloudLayouter, int amountRectangles, - int startWidthRectangles, int endWidthRectangles, - int startHeightRectangles, int endHeightRectangles, IEnumerable rectangles = null) + public Bitmap CreateImage(CircularCloudLayouter cloudLayouter, int amountRectangles, + Size minSize, Size maxSize) { - var image = new Bitmap(Width, Height); - - rectangles = rectangles ?? CloudLayout.GenerateCloudLayout( + var image = new Bitmap(width, height); + var rectangles = CloudLayout.GenerateCloudLayout( amountRectangles, - startWidthRectangles, endWidthRectangles, - startHeightRectangles, endHeightRectangles, + minSize, + maxSize, cloudLayouter); - var graphics = Graphics.FromImage(image); - - DrawCloudLayout(graphics, rectangles); + + DrawCloudLayout(Graphics.FromImage(image), rectangles); + + return image; + } + + public Bitmap CreateImage(IEnumerable rectangles) + { + var image = new Bitmap(width, height); + + DrawCloudLayout(Graphics.FromImage(image), rectangles); return image; } @@ -39,11 +46,11 @@ private void DrawCloudLayout(Graphics graphics, IEnumerable rectangle { var random = new Random(); - graphics.FillRectangle(new SolidBrush(BackgroundColor), 0, 0, Width, Height); + graphics.FillRectangle(new SolidBrush(backgroundColor), 0, 0, width, height); foreach (var rect in rectangles) { - var color = RectanglePalette[random.Next(RectanglePalette.Length)]; + var color = rectanglePalette[random.Next(rectanglePalette.Length)]; graphics.FillRectangle(new SolidBrush(color), rect); graphics.DrawRectangle(new Pen(Color.Black, 1), rect);