From 8cae61117ebfed19d7799c105c226d9ca42e8abf Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Wed, 13 Nov 2024 06:37:32 +0500 Subject: [PATCH 01/33] AddNearestFinder --- .../BruteForceNearestFinder.cs | 50 ++++++++++++ .../Tests/BruteForceNearestFinderTests.cs | 76 +++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 cs/TagsCloudVisualization/BruteForceNearestFinder.cs create mode 100644 cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs new file mode 100644 index 000000000..d89794fbd --- /dev/null +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices.ComTypes; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization +{ + public class BruteForceNearestFinder + { + private List rectangles = new(); + + public void Insert(Rectangle r) + { + if (RectangleHasInсorrectSize(r)) + throw new ArgumentException($"Rectangle has incorrect size: width = {r.Width}, height = {r.Height}"); + rectangles.Add(r); + } + + public Rectangle? FindNearestByDirection(Rectangle r, Direction direction) + { + if (RectangleHasInсorrectSize(r)) + throw new ArgumentException($"Rectangle has incorrect size: width= {r.Width}, height={r.Height}"); + if (rectangles.Count == 0) + return null; + var calculator = GetMinDistanceCalculatorBy(direction); + return rectangles.Select(currentRectangle => (distance: calculator(currentRectangle, r), CurrentEl: currentRectangle)) + .Where(el => el.distance > 0) + .MinBy(el => el.distance).CurrentEl; + } + + private Func GetMinDistanceCalculatorBy(Direction direction) + { + switch (direction) + { + case Direction.Left: return (possibleNearest, rectangleForFind) => rectangleForFind.X - possibleNearest.X; + case Direction.Right: return (possibleNearest, rectangleForFind) => possibleNearest.X - rectangleForFind.X; + case Direction.Top: return (possibleNearest, rectangleForFind) => rectangleForFind.Y - possibleNearest.Y; + default: return (possibleNearest, rectangleForFind) => possibleNearest.Y - rectangleForFind.Y; + } + } + + private bool RectangleHasInсorrectSize(Rectangle r) + { + return r.Width <= 0 || r.Height <= 0; + } + } +} diff --git a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs new file mode 100644 index 000000000..75a92ff9d --- /dev/null +++ b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using FluentAssertions; +using System.Drawing; + +namespace TagsCloudVisualization.Tests +{ + public class BruteForceNearestFinderTests + { + private BruteForceNearestFinder finder; + [SetUp] + public void SetUp() + { + finder = new BruteForceNearestFinder(); + } + [Test] + public void FindNearest_ShouldReturnNull_BeforeAnyInsertions() + { + var rectangleForFind = new Rectangle(new Point(5, 7), new Size(4, 2)); + + finder.FindNearestByDirection(rectangleForFind, Direction.Top).Should().BeNull(); + } + + [TestCase(0, 4, TestName = "WhenWidthZero")] + [TestCase(3, 0, TestName = "WhenHeightZero")] + [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] + [TestCase(3, -4, TestName = "WhenHeightNegative")] + [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] + [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] + public void Insert_ShouldThrow(int width, int height) + { + var rectangleForInsert = new Rectangle(new Point(2, 2), new Size(width, height)); + + ShouldThrow((finder, rectangle) => finder.Insert(rectangle), rectangleForInsert); + } + + [TestCase(0, 4, TestName = "WhenWidthZero")] + [TestCase(3, 0, TestName = "WhenHeightZero")] + [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] + [TestCase(3, -4, TestName = "WhenHeightNegative")] + [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] + [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] + public void FindNearest_ShouldThrow(int width, int height) + { + var rectangleForFind = new Rectangle(new Point(2, 2), new Size(width, height)); + + ShouldThrow((finder, rectangle) => finder.FindNearestByDirection(rectangle, Direction.Top), rectangleForFind); + } + + public void ShouldThrow(Action callFinderMethod, Rectangle incorrectRectangle) + { + Action act = () => callFinderMethod(finder, incorrectRectangle); + + act.Should().Throw(); + } + + [TestCase(4, 10, Direction.Top)] + [TestCase(2, 7, Direction.Top, true)] + [TestCase(2, 7, Direction.Right)] + public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRectangle(int x, int y, Direction direction, bool isFirstRectNearest = false) + { + var addedRectangle1 = new Rectangle(new Point(2, 2), new Size(3, 4)); + var addedRectangle2 = new Rectangle(new Point(5, 7), new Size(4, 2)); + var rectangleForFind = new Rectangle(new Point(x, y), new Size(2, 1)); + + finder.Insert(addedRectangle1); + finder.Insert(addedRectangle2); + + finder.FindNearestByDirection(rectangleForFind, direction).Should().Be(isFirstRectNearest ? addedRectangle1 : addedRectangle2); + } + } +} From 09cf278332f3af80ee2d86f91acf01ca6f220a91 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Wed, 13 Nov 2024 23:42:01 +0500 Subject: [PATCH 02/33] Add CircularLayer --- cs/TagsCloudVisualization/CircleLayer.cs | 193 ++++++++++++++++++ .../Tests/CircleLayerTests.cs | 183 +++++++++++++++++ 2 files changed, 376 insertions(+) create mode 100644 cs/TagsCloudVisualization/CircleLayer.cs create mode 100644 cs/TagsCloudVisualization/Tests/CircleLayerTests.cs diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs new file mode 100644 index 000000000..59ff44755 --- /dev/null +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -0,0 +1,193 @@ +using System.Drawing; + +namespace TagsCloudVisualization; + +public class CircleLayer +{ + public enum Sector + { + Top_Right, + Bottom_Right, + Bottom_Left, + Top_Left + } + + public Point Center { get; } + public int Radius { get; } + + + private Sector currentSector; + private readonly List layerRectangles; + private CircleLayer prevLayer; + + public CircleLayer(Point center, int radius) + { + Center = center; + Radius = radius; + currentSector = Sector.Top_Right; + layerRectangles = new List(); + } + + public CircleLayer OnSuccessInsertRectangle(Rectangle inserted) + { + currentSector = currentSector == Sector.Top_Left ? Sector.Top_Right : currentSector + 1; + layerRectangles.Add(inserted); + if (currentSector == Sector.Top_Right) + return CreateNextLayer(); + return this; + } + + private CircleLayer CreateNextLayer() + { + var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer()); + nextLayer.prevLayer = this; + return nextLayer; + } + + private int CalculateRadiusForNextLayer() + { + var prevSector = Sector.Top_Right - 1; + return layerRectangles.Select(r => CalculateDistanceBetweenCenterAndRectangleBySector(r, prevSector + 1)).Max(); + } + + private int CalculateDistanceBetweenCenterAndRectangleBySector(Rectangle r, Sector s) + { + switch (s) + { + case Sector.Top_Right: + return CalculateDistanceBetweenPoints(Center, new Point(r.X + r.Width, r.Y)); + case Sector.Bottom_Right: + return CalculateDistanceBetweenPoints(Center, new Point(r.X + r.Width, r.Y + r.Height)); + case Sector.Bottom_Left: + return CalculateDistanceBetweenPoints(Center, new Point(r.X - r.Width, r.Y + r.Height)); + default: + return CalculateDistanceBetweenPoints(Center, new Point(r.X - r.Width, r.Y)); + } + } + + private int CalculateDistanceBetweenPoints(Point p1, Point p2) + { + return (int)Math.Ceiling(Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y))); + } + + public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) + { + var relevantForSectorPosition = GetPositionRelevantForSector(); + switch (currentSector) + { + case Sector.Top_Right: + return new Point(relevantForSectorPosition.X, relevantForSectorPosition.Y - rectangleSize.Height); + case Sector.Bottom_Right: + return relevantForSectorPosition; + case Sector.Bottom_Left: + return new Point(relevantForSectorPosition.X - rectangleSize.Width, relevantForSectorPosition.Y); + default: + return new Point(relevantForSectorPosition.X - rectangleSize.Width, + relevantForSectorPosition.Y - rectangleSize.Height); + } + } + + private Point GetPositionRelevantForSector() + { + switch (currentSector) + { + case Sector.Top_Right: + return new Point(Center.X, Center.Y - Radius); + case Sector.Bottom_Right: + return new Point(Center.X + Radius, Center.Y); + case Sector.Bottom_Left: + return new Point(Center.X, Center.Y + Radius); + default: + return new Point(Center.X - Radius, Center.Y); + } + } + + public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rectangle intersected) + { + return CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); + } + + private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, Rectangle intersected) + { + var distanceForMoving = CalculateDistanceForMovingBySector(s, forInsertion, intersected); + var isMovingAxisIsX = IsMovingAxisIsXBySector(s); + var nearestForCenterCorner = + CalculateCornerNearestForCenterAfterMove(s, distanceForMoving, forInsertion); + var distanceForBringBackOnCircle = + CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX); + distanceForMoving *= CalculateMoveMultiplierForMoveClockwise(isMovingAxisIsX, forInsertion); + distanceForBringBackOnCircle *= CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion); + return isMovingAxisIsX + ? new Point(forInsertion.X + distanceForMoving, forInsertion.Y + distanceForBringBackOnCircle) + : new Point(forInsertion.X + distanceForBringBackOnCircle, forInsertion.Y + distanceForMoving); + } + + private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX) + { + Func getAxisForBringBackOnCircle = isMovingAxisIsX ? p => p.Y : p => p.X; + Func getStaticAxis = isMovingAxisIsX ? p => p.X : p => p.Y; + + var distanceOnStaticAxis = Math.Abs(getStaticAxis(nearestForCenterCorner) - getStaticAxis(Center)); + var distanceOnAxisForBringBackOnCircle = Math.Abs(getAxisForBringBackOnCircle(nearestForCenterCorner) - getAxisForBringBackOnCircle(Center)); + return (int)Math.Ceiling(Math.Sqrt(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)) - distanceOnAxisForBringBackOnCircle; + } + + private Point CalculateCornerNearestForCenterAfterMove(Sector s, int distanceForMoving, Rectangle r) + { + var isAxisForMoveIsX = IsMovingAxisIsXBySector(s); + var moveMultiplier = CalculateMoveMultiplierForMoveClockwise(isAxisForMoveIsX, r); + distanceForMoving *= moveMultiplier; + var nearestCorner = GetCornerNearestForCenterBySector(s, r); + return isAxisForMoveIsX + ? new Point(nearestCorner.X + distanceForMoving, nearestCorner.Y) + : new Point(nearestCorner.X, nearestCorner.Y + distanceForMoving); + } + + private int CalculateMoveMultiplierForMoveFromCenter(bool isAxisForMoveIsX, Rectangle r) + { + return isAxisForMoveIsX + ? r.Right < Center.X ? -1 : 1 + : r.Bottom < Center.Y ? -1 : 1; + } + private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Rectangle r) + { + return isAxisForMoveIsX + ? r.Left > Center.X ? -1 : 1 + : r.Bottom > Center.Y ? -1 : 1; + } + + private int CalculateDistanceForMovingBySector (Sector s, Rectangle forInsertion, Rectangle intersected) + { + switch (s) + { + case Sector.Top_Right: + return Math.Abs(forInsertion.Top - intersected.Bottom); + case Sector.Bottom_Right: + return Math.Abs(forInsertion.Right - intersected.Left); + case Sector.Bottom_Left: + return Math.Abs(forInsertion.Bottom - intersected.Top); + default: + return Math.Abs(forInsertion.Left - intersected.Right); + } + } + + private Point GetCornerNearestForCenterBySector(Sector s, Rectangle r) + { + switch (s) + { + case Sector.Top_Right: + return new Point(r.Left, r.Bottom); + case Sector.Bottom_Right: + return new Point(r.Left, r.Top); + case Sector.Bottom_Left: + return new Point(r.Right, r.Top); + default: + return new Point(r.Right, r.Bottom); + } + } + + private bool IsMovingAxisIsXBySector(Sector s) + { + return s == Sector.Bottom_Right || s == Sector.Top_Left; + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs new file mode 100644 index 000000000..3b01e6828 --- /dev/null +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices.Marshalling; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using FluentAssertions; +using static TagsCloudVisualization.CircleLayer; + +namespace TagsCloudVisualization.Tests +{ + public class CircleLayerTests + { + private CircleLayer currentLayer; + private Size defaultRectangleSize; + [SetUp] + public void SetUp() + { + var startRadius = 5; + var center = new Point(5, 5); + currentLayer = new CircleLayer(center, startRadius); + defaultRectangleSize = new Size(3, 4); + } + + [Test] + public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() + { + var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); + + possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(Sector.Top_Right)); + } + + [TestCase(1, Sector.Bottom_Right)] + [TestCase(2, Sector.Bottom_Left)] + [TestCase(3, Sector.Top_Left)] + public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int insertionsCount, Sector expected) + { + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, insertionsCount); + + var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); + + possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(expected)); + } + + [Test] + public void CircleLayer_GetNewLayer_AfterInsertionsOnAllSectors() + { + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); + + var nextLayer = currentLayer.OnSuccessInsertRectangle(new Rectangle(new Point(0, 0), defaultRectangleSize)); + + nextLayer.Should().NotBeSameAs(currentLayer); + } + + [Test] + public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMaxDistanceFromCenterToInsertedRectangle() + { + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); + var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4)); + + var nextLayer = currentLayer.OnSuccessInsertRectangle(new Rectangle(nextRectangleLocation, new Size(2,2))); + + nextLayer.Radius.Should().Be(10); + } + + private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int insertionsCount) + { + for (var i = 0; i < insertionsCount; i++) + { + var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i)); + var rectangleForInsert = new Rectangle(location, defaultRectangleSize); + layer.OnSuccessInsertRectangle(rectangleForInsert); + } + return layer; + } + + private Sector GetSectorByInsertionsCount(int count) + { + return (Sector)((count - 1) % 4); + } + + private Point GetCorrectRectangleLocationByExpectedSector(Sector s) + { + switch (s) + { + case Sector.Top_Right: + return new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - defaultRectangleSize.Height); + case Sector.Bottom_Right: + return new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y); + case Sector.Bottom_Left: + return new Point(currentLayer.Center.X - defaultRectangleSize.Width, currentLayer.Center.Y + currentLayer.Radius); + default: + return new Point(currentLayer.Center.X - currentLayer.Radius - defaultRectangleSize.Width, + currentLayer.Center.Y - defaultRectangleSize.Height); + } + } + + [Test] + public void CircleLayer_RectangleWithNewPositionAfterIntersection_ShouldNotIntersectSameRectangle() + { + var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); + var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); + + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + + new Rectangle(newPosition, rectangleForInsertion.Size).IntersectsWith(intersectedRectangle).Should() + .BeFalse(); + } + + [Test] + public void GetPositionOnCircleWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_WhenFoundIntersectionInTopRightSector_AndIntersectedRectangleCanPlaceWithIntCoordinate() + { + var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); + var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); + + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + var bottomLeftCorner = new Point(newPosition.X, newPosition.Y + intersectedRectangle.Height); + + CurrentLayerContainsPoint(bottomLeftCorner).Should().BeTrue(); + } + + [Test] + public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopRightSector() + { + var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); + var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); + var expected = new Point(9, 1); + + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + + newPosition.Should().Be(expected); + } + + + [Test] + public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomRightSector() + { + var rectangleForInsertion = new Rectangle(new Point(8, 9), new Size(5, 1)); + var intersectedRectangle = new Rectangle(new Point(10, 5), new Size(8, 7)); + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 1); + var expected = new Point(5, 10); + + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + + newPosition.Should().Be(expected); + } + + + [Test] + public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomLeftSector() + { + var rectangleForInsertion = new Rectangle(new Point(-3, 9), new Size(5, 3)); + var intersectedRectangle = new Rectangle(new Point(-7, 8), new Size(8, 7)); + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 2); + var expected = new Point(-5, 5); + + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + + newPosition.Should().Be(expected); + } + + [Test] + public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopLeftSector() + { + var rectangleForInsertion = new Rectangle(new Point(-3, -2), new Size(4, 3)); + var intersectedRectangle = new Rectangle(new Point(-7, 1), new Size(8, 7)); + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); + var expected = new Point(1, -3); + + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + + newPosition.Should().Be(expected); + } + + private bool CurrentLayerContainsPoint(Point p) + { + return (p.X - currentLayer.Center.X) * (p.X - currentLayer.Center.X) + + (p.Y - currentLayer.Center.Y) * (p.Y - currentLayer.Center.Y) == currentLayer.Radius * currentLayer.Radius; + } + } +} From 9bbe39abf0539205435e34e1ca48e90d8daa609d Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Wed, 13 Nov 2024 23:43:21 +0500 Subject: [PATCH 03/33] Add CircularCloudLayoter --- .../CircularCloudLayouter.cs | 80 +++++++++++++++++ .../Tests/CircularCloudLayouterTests.cs | 88 +++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 cs/TagsCloudVisualization/CircularCloudLayouter.cs create mode 100644 cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs new file mode 100644 index 000000000..9ce645209 --- /dev/null +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization +{ + public class CircularCloudLayouter + { + private List rectanglesLocation = new (); + private readonly Point center; + private BruteForceNearestFinder nearestFinder; + + public CircleLayer CurrentLayer { get; private set; } + + public CircularCloudLayouter(Point center) + { + this.center = center; + nearestFinder = new BruteForceNearestFinder(); + } + public Rectangle PutNextRectangle(Size rectangleSize) + { + Rectangle resultRectangle; + if (IsFirstRectangle()) + { + CreateFirstLayer(rectangleSize); + resultRectangle = PutRectangleToCenter(rectangleSize); + } + else + { + var possiblePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); + resultRectangle = new Rectangle(possiblePosition, rectangleSize); + } + OnSuccessInsertion(resultRectangle); + return resultRectangle; + } + + private void OnSuccessInsertion(Rectangle r) + { + rectanglesLocation.Add(r); + nearestFinder.Insert(r); + if (IsNotFirstInsertion()) + CurrentLayer.OnSuccessInsertRectangle(r); + } + + private void CreateFirstLayer(Size firstRectangle) + { + var radius = Math.Ceiling(Math.Max(firstRectangle.Width, firstRectangle.Height) / 2.0); + CurrentLayer = new CircleLayer(center, (int)radius); + } + + private Rectangle PutRectangleToCenter(Size rectangleSize) + { + var rectangleX = center.X - rectangleSize.Width / 2; + var rectangleY = center.Y - rectangleSize.Height / 2; + + return new Rectangle(new Point(rectangleX, rectangleY), rectangleSize); + } + + private bool IsFirstRectangle() + { + return rectanglesLocation.Count == 0; + } + + private bool IsNotFirstInsertion() + { + return rectanglesLocation.Count > 1; + } + + public IEnumerable GetRectangles() + { + foreach (var rectangle in rectanglesLocation) + { + yield return rectangle; + } + } + } +} diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs new file mode 100644 index 000000000..d2243950e --- /dev/null +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using NUnit.Framework; +using FluentAssertions; + +namespace TagsCloudVisualization.Tests +{ + public class CircularCloudLayouterTests + { + private CircularCloudLayouter layouter; + private Point defaultCenter; + + [SetUp] + public void SetUp() + { + defaultCenter = new Point(5, 5); + layouter = new CircularCloudLayouter(defaultCenter); + } + + [Test] + public void GetRectangles_ShouldBeEmpty_BeforePutAnyRectangles() + { + layouter.GetRectangles() + .Should().BeEmpty(); + } + + [Test] + public void PutNextRectangle_ShouldAddRectangleToCenter_WhenRectangleFirst() + { + var firstRectangleSize = new Size(6, 4); + var expected = new Rectangle(new Point(2, 3), firstRectangleSize); + + var nextRectangle = layouter.PutNextRectangle(firstRectangleSize); + + nextRectangle + .Should().Be(expected); + } + + [Test] + public void PutNextRectangle_ShouldCreateFirstCircleLayer_AfterPutFirstRectangle() + { + var firstRectangleSize = new Size(6, 4); + + layouter.PutNextRectangle(firstRectangleSize); + + layouter.CurrentLayer.Should().NotBeNull(); + } + + [TestCase(6, 4, 3)] + [TestCase(4, 6, 3)] + [TestCase(2, 2, 1)] + [TestCase(5, 9, 5)] + public void PutNextRectangle_ShouldCreateFirstCircleLayer_WithRadiusEqualHalfMaxSizeOfFirstRectangleRoundToInt(int height, int width, int expected) + { + var firstRectangleSize = new Size(width, height); + + layouter.PutNextRectangle(firstRectangleSize); + + layouter.CurrentLayer.Radius.Should().Be(expected); + } + + [Test] + public void PutNextRectangle_ShouldAddRectangleToLayouter_AfterPut() + { + var firstRectangleSize = new Size(4, 4); + + layouter.PutNextRectangle(firstRectangleSize); + + layouter.GetRectangles() + .Should().NotBeEmpty().And.HaveCount(1); + } + + [Test] + public void PutNextRectangle_ShouldUseCircleLayer_ForChoosePositionForRectangle() + { + var firstRectangleSize = new Size(4, 4); + var expected = new Point(5, -1); + + layouter.PutNextRectangle(firstRectangleSize); + var secondRectangleLocation = layouter.PutNextRectangle(firstRectangleSize).Location; + + secondRectangleLocation.Should().Be(expected); + } + } +} From dfbc811cba5e4538ad3673b1c9eafaaa120cc1f4 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Wed, 13 Nov 2024 23:45:29 +0500 Subject: [PATCH 04/33] Add Direction --- cs/TagsCloudVisualization/Dicrection.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 cs/TagsCloudVisualization/Dicrection.cs diff --git a/cs/TagsCloudVisualization/Dicrection.cs b/cs/TagsCloudVisualization/Dicrection.cs new file mode 100644 index 000000000..6a144ce0d --- /dev/null +++ b/cs/TagsCloudVisualization/Dicrection.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization +{ + public enum Direction + { + Left, + Right, + Top, + Bottom + } +} From 9f88c1501ad43055c5267d54f11924e1fd573746 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 14 Nov 2024 11:49:35 +0500 Subject: [PATCH 05/33] Fix calculation radius --- cs/TagsCloudVisualization/CircleLayer.cs | 52 ++++++++----- .../Tests/CircleLayerTests.cs | 73 ++++++++++++++----- 2 files changed, 90 insertions(+), 35 deletions(-) diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index 59ff44755..c1fbd8b0c 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -44,24 +44,38 @@ private CircleLayer CreateNextLayer() return nextLayer; } - private int CalculateRadiusForNextLayer() - { - var prevSector = Sector.Top_Right - 1; - return layerRectangles.Select(r => CalculateDistanceBetweenCenterAndRectangleBySector(r, prevSector + 1)).Max(); - } - + private int CalculateRadiusForNextLayer() //TODO: выбрать наиболее адекватный вариант перерасчёта радиуса + { + var prevSector = Sector.Top_Right; + return layerRectangles.Select(r => CalculateDistanceBetweenCenterAndRectangleBySector(r, prevSector++)).Min(); + } + + //private Sector GetSectorNextClockwise(Sector s) + //{ + // switch (s) + // { + // case Sector.Top_Right: + // return Sector.Bottom_Right; + // case Sector.Bottom_Right: + // return Sector.Bottom_Left; + // case Sector.Bottom_Left: + // return Sector.Top_Left; + // default: + // return CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Top)); + // } + //} private int CalculateDistanceBetweenCenterAndRectangleBySector(Rectangle r, Sector s) { switch (s) { case Sector.Top_Right: - return CalculateDistanceBetweenPoints(Center, new Point(r.X + r.Width, r.Y)); + return CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Top)); case Sector.Bottom_Right: - return CalculateDistanceBetweenPoints(Center, new Point(r.X + r.Width, r.Y + r.Height)); + return CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Bottom)); case Sector.Bottom_Left: - return CalculateDistanceBetweenPoints(Center, new Point(r.X - r.Width, r.Y + r.Height)); + return CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Bottom)); default: - return CalculateDistanceBetweenPoints(Center, new Point(r.X - r.Width, r.Y)); + return CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Top)); } } @@ -72,22 +86,22 @@ private int CalculateDistanceBetweenPoints(Point p1, Point p2) public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) { - var relevantForSectorPosition = GetPositionRelevantForSector(); + var rectangleStartPositionOnCircle = GetStartSectorPointOnCircle(); switch (currentSector) { case Sector.Top_Right: - return new Point(relevantForSectorPosition.X, relevantForSectorPosition.Y - rectangleSize.Height); + return new Point(rectangleStartPositionOnCircle.X, rectangleStartPositionOnCircle.Y - rectangleSize.Height); case Sector.Bottom_Right: - return relevantForSectorPosition; + return rectangleStartPositionOnCircle; case Sector.Bottom_Left: - return new Point(relevantForSectorPosition.X - rectangleSize.Width, relevantForSectorPosition.Y); + return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, rectangleStartPositionOnCircle.Y); default: - return new Point(relevantForSectorPosition.X - rectangleSize.Width, - relevantForSectorPosition.Y - rectangleSize.Height); + return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, + rectangleStartPositionOnCircle.Y - rectangleSize.Height); } } - private Point GetPositionRelevantForSector() + private Point GetStartSectorPointOnCircle() { switch (currentSector) { @@ -107,6 +121,10 @@ public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rec return CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); } + //TODO: переписать везде где можно подсчёт координат на свойства прямоугольника Top, Bottom и так далее + //TODO: пересечения для разных расположений четырёхугольника + //TODO: подумать, как считать радиус окружности адекватно + private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, Rectangle intersected) { var distanceForMoving = CalculateDistanceForMovingBySector(s, forInsertion, intersected); diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index 3b01e6828..c14ee08ce 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -29,7 +29,7 @@ public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() { var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); - possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(Sector.Top_Right)); + possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(Sector.Top_Right, defaultRectangleSize)); } [TestCase(1, Sector.Bottom_Right)] @@ -41,7 +41,7 @@ public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int in var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); - possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(expected)); + possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(expected, defaultRectangleSize)); } [Test] @@ -55,24 +55,20 @@ public void CircleLayer_GetNewLayer_AfterInsertionsOnAllSectors() } [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMaxDistanceFromCenterToInsertedRectangle() + public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangle() { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); - var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4)); + var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); var nextLayer = currentLayer.OnSuccessInsertRectangle(new Rectangle(nextRectangleLocation, new Size(2,2))); - nextLayer.Radius.Should().Be(10); + nextLayer.Radius.Should().Be(9); } private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int insertionsCount) { - for (var i = 0; i < insertionsCount; i++) - { - var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i)); - var rectangleForInsert = new Rectangle(location, defaultRectangleSize); - layer.OnSuccessInsertRectangle(rectangleForInsert); - } + layer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(layer, insertionsCount, + new Size[insertionsCount].Select(x => defaultRectangleSize).ToArray()); return layer; } @@ -81,19 +77,19 @@ private Sector GetSectorByInsertionsCount(int count) return (Sector)((count - 1) % 4); } - private Point GetCorrectRectangleLocationByExpectedSector(Sector s) + private Point GetCorrectRectangleLocationByExpectedSector(Sector s, Size size) { switch (s) { case Sector.Top_Right: - return new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - defaultRectangleSize.Height); + return new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - size.Height); case Sector.Bottom_Right: return new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y); case Sector.Bottom_Left: - return new Point(currentLayer.Center.X - defaultRectangleSize.Width, currentLayer.Center.Y + currentLayer.Radius); + return new Point(currentLayer.Center.X - size.Width, currentLayer.Center.Y + currentLayer.Radius); default: - return new Point(currentLayer.Center.X - currentLayer.Radius - defaultRectangleSize.Width, - currentLayer.Center.Y - defaultRectangleSize.Height); + return new Point(currentLayer.Center.X - currentLayer.Radius - size.Width, + currentLayer.Center.Y - size.Height); } } @@ -164,8 +160,8 @@ public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePositio [Test] public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopLeftSector() { - var rectangleForInsertion = new Rectangle(new Point(-3, -2), new Size(4, 3)); - var intersectedRectangle = new Rectangle(new Point(-7, 1), new Size(8, 7)); + var rectangleForInsertion = new Rectangle(new (-3, -2), new (4, 3)); + var intersectedRectangle = new Rectangle(new (-7, 1), new (8, 7)); currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); var expected = new Point(1, -3); @@ -179,5 +175,46 @@ private bool CurrentLayerContainsPoint(Point p) return (p.X - currentLayer.Center.X) * (p.X - currentLayer.Center.X) + (p.Y - currentLayer.Center.Y) * (p.Y - currentLayer.Center.Y) == currentLayer.Radius * currentLayer.Radius; } + + [Test] + public void GetPositionOnCircleWithoutIntersection_ShouldMoveRectangleClockwiseAndChangeSector_UntilFindsNewPosition() + { + var fullLayer = GetLayerWithFullFirstLayerForIntersection(currentLayer); + var forInsertion = new Rectangle(new (11, 5), new (6,6)); + var intersected = new Rectangle(new(10, 5),new(5, 8)); + + var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); + + newPosition.Should().Be(new Point(-1, 11)); + } + + [Test] + public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangle2() + { + var nextLayer = GetLayerWithFullFirstLayerForIntersection(currentLayer); + + nextLayer.Radius.Should().Be(10); + } + + private CircleLayer GetLayerWithFullFirstLayerForIntersection(CircleLayer layer) + { + var sizesForInsertions = new Size[] + { + new (8,1), new(5,8), new (4,4), new (4,4), new(4,4) + }; + return GetLayerAfterFewInsertionsRectangleWithDifferentSize(layer, sizesForInsertions.Length, + sizesForInsertions); + } + + private CircleLayer GetLayerAfterFewInsertionsRectangleWithDifferentSize(CircleLayer layer, int insertionsCount, Size[] sizes) + { + for (var i = 1; i <= insertionsCount; i++) + { + var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); + var rectangleForInsert = new Rectangle(location, sizes[i - 1]); + layer = layer.OnSuccessInsertRectangle(rectangleForInsert); + } + return layer; + } } } From ce6db8cee30531da5e4984ddb1530970acd6d8fa Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 14 Nov 2024 12:27:13 +0500 Subject: [PATCH 06/33] Add move to next sector when find position without intersection --- cs/TagsCloudVisualization/CircleLayer.cs | 53 +++++++++++-------- .../Tests/CircleLayerTests.cs | 25 +++++---- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index c1fbd8b0c..991061eb8 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -15,7 +15,6 @@ public enum Sector public Point Center { get; } public int Radius { get; } - private Sector currentSector; private readonly List layerRectangles; private CircleLayer prevLayer; @@ -32,11 +31,16 @@ public CircleLayer OnSuccessInsertRectangle(Rectangle inserted) { currentSector = currentSector == Sector.Top_Left ? Sector.Top_Right : currentSector + 1; layerRectangles.Add(inserted); - if (currentSector == Sector.Top_Right) + if (ShouldCreateNewCircle()) return CreateNextLayer(); return this; } + private bool ShouldCreateNewCircle() + { + return currentSector == Sector.Top_Right; + } + private CircleLayer CreateNextLayer() { var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer()); @@ -50,20 +54,6 @@ private int CalculateRadiusForNextLayer() //TODO: выбрать наиболе return layerRectangles.Select(r => CalculateDistanceBetweenCenterAndRectangleBySector(r, prevSector++)).Min(); } - //private Sector GetSectorNextClockwise(Sector s) - //{ - // switch (s) - // { - // case Sector.Top_Right: - // return Sector.Bottom_Right; - // case Sector.Bottom_Right: - // return Sector.Bottom_Left; - // case Sector.Bottom_Left: - // return Sector.Top_Left; - // default: - // return CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Top)); - // } - //} private int CalculateDistanceBetweenCenterAndRectangleBySector(Rectangle r, Sector s) { switch (s) @@ -86,7 +76,7 @@ private int CalculateDistanceBetweenPoints(Point p1, Point p2) public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) { - var rectangleStartPositionOnCircle = GetStartSectorPointOnCircle(); + var rectangleStartPositionOnCircle = GetStartSectorPointOnCircleBySector(currentSector); switch (currentSector) { case Sector.Top_Right: @@ -101,9 +91,9 @@ public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) } } - private Point GetStartSectorPointOnCircle() + private Point GetStartSectorPointOnCircleBySector(Sector s) { - switch (currentSector) + switch (s) { case Sector.Top_Right: return new Point(Center.X, Center.Y - Radius); @@ -118,12 +108,31 @@ private Point GetStartSectorPointOnCircle() public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rectangle intersected) { - return CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); + var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); + if (IsNextPositionMoveToAnotherSector(nextPosition, forInsertion.Size)) + { + if (ShouldCreateNewCircle()) + { + + } + + currentSector += 1; + nextPosition = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); + } + return nextPosition; + } + + private bool IsNextPositionMoveToAnotherSector(Point next, Size forInsertionSize) + { + return IsRectangleIntersectSymmetryAxis(new Rectangle(next, forInsertionSize)); + } + + private bool IsRectangleIntersectSymmetryAxis(Rectangle r) + { + return (r.Left < Center.X && r.Right > Center.X) || (r.Bottom > Center.Y && r.Top < Center.Y); } //TODO: переписать везде где можно подсчёт координат на свойства прямоугольника Top, Bottom и так далее - //TODO: пересечения для разных расположений четырёхугольника - //TODO: подумать, как считать радиус окружности адекватно private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, Rectangle intersected) { diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index c14ee08ce..d0da6afb4 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -8,6 +8,7 @@ using NUnit.Framework; using FluentAssertions; using static TagsCloudVisualization.CircleLayer; +using System.Reflection.Emit; namespace TagsCloudVisualization.Tests { @@ -176,6 +177,18 @@ private bool CurrentLayerContainsPoint(Point p) (p.Y - currentLayer.Center.Y) * (p.Y - currentLayer.Center.Y) == currentLayer.Radius * currentLayer.Radius; } + [Test] + public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() + { + var sizes = new Size[] + { + new (8,1), new(7,8), new (4,4), new (4,4), new(4,4) + }; + var nextLayer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(currentLayer, sizes.Length, sizes); + + nextLayer.Radius.Should().Be(10); + } + [Test] public void GetPositionOnCircleWithoutIntersection_ShouldMoveRectangleClockwiseAndChangeSector_UntilFindsNewPosition() { @@ -185,22 +198,14 @@ public void GetPositionOnCircleWithoutIntersection_ShouldMoveRectangleClockwiseA var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - newPosition.Should().Be(new Point(-1, 11)); - } - - [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangle2() - { - var nextLayer = GetLayerWithFullFirstLayerForIntersection(currentLayer); - - nextLayer.Radius.Should().Be(10); + newPosition.Should().Be(new Point(-1, 12)); } private CircleLayer GetLayerWithFullFirstLayerForIntersection(CircleLayer layer) { var sizesForInsertions = new Size[] { - new (8,1), new(5,8), new (4,4), new (4,4), new(4,4) + new (1,1), new(5,8), new (4,4), new (4,4), new(4,4) }; return GetLayerAfterFewInsertionsRectangleWithDifferentSize(layer, sizesForInsertions.Length, sizesForInsertions); From 517ccb0a464716f6e1c401283b1f3bd73251c14a Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 14 Nov 2024 15:32:49 +0500 Subject: [PATCH 07/33] Add intersections and small fix --- .../BruteForceNearestFinder.cs | 8 +-- cs/TagsCloudVisualization/CircleLayer.cs | 34 ++++++++---- .../CircularCloudLayouter.cs | 27 +++++++++- .../Tests/CircleLayerTests.cs | 52 +++++++++++-------- .../Tests/CircularCloudLayouterTests.cs | 31 ++++++++--- 5 files changed, 110 insertions(+), 42 deletions(-) diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index d89794fbd..62e62b5fd 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -26,9 +26,11 @@ public void Insert(Rectangle r) if (rectangles.Count == 0) return null; var calculator = GetMinDistanceCalculatorBy(direction); - return rectangles.Select(currentRectangle => (distance: calculator(currentRectangle, r), CurrentEl: currentRectangle)) - .Where(el => el.distance > 0) - .MinBy(el => el.distance).CurrentEl; + var nearestByDirection = rectangles.Select(currentRectangle => + (distance: calculator(currentRectangle, r), CurrentEl: currentRectangle)) + .Where(el => el.distance >= 0).ToList(); + + return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.distance).CurrentEl : null; } private Func GetMinDistanceCalculatorBy(Direction direction) diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index 991061eb8..b3ac472e2 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -13,11 +13,10 @@ public enum Sector } public Point Center { get; } - public int Radius { get; } + public int Radius { get; private set; } private Sector currentSector; private readonly List layerRectangles; - private CircleLayer prevLayer; public CircleLayer(Point center, int radius) { @@ -29,7 +28,7 @@ public CircleLayer(Point center, int radius) public CircleLayer OnSuccessInsertRectangle(Rectangle inserted) { - currentSector = currentSector == Sector.Top_Left ? Sector.Top_Right : currentSector + 1; + currentSector = GetNextClockwiseSector(); layerRectangles.Add(inserted); if (ShouldCreateNewCircle()) return CreateNextLayer(); @@ -41,14 +40,18 @@ private bool ShouldCreateNewCircle() return currentSector == Sector.Top_Right; } + private Sector GetNextClockwiseSector() + { + return currentSector == Sector.Top_Left ? Sector.Top_Right : currentSector + 1; + } + private CircleLayer CreateNextLayer() { var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer()); - nextLayer.prevLayer = this; return nextLayer; } - private int CalculateRadiusForNextLayer() //TODO: выбрать наиболее адекватный вариант перерасчёта радиуса + private int CalculateRadiusForNextLayer() { var prevSector = Sector.Top_Right; return layerRectangles.Select(r => CalculateDistanceBetweenCenterAndRectangleBySector(r, prevSector++)).Min(); @@ -111,17 +114,30 @@ public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rec var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); if (IsNextPositionMoveToAnotherSector(nextPosition, forInsertion.Size)) { + currentSector = GetNextClockwiseSector(); if (ShouldCreateNewCircle()) { - + CreateNextLayerAndChangeCurrentOnNext(); } - - currentSector += 1; nextPosition = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); } return nextPosition; } + private void CreateNextLayerAndChangeCurrentOnNext() + { + var nextLayer = CreateNextLayer(); + ChangeCurrentLayerBy(nextLayer); + } + + private void ChangeCurrentLayerBy(CircleLayer next) + { + Radius = next.Radius; + currentSector = next.currentSector; + layerRectangles.Clear(); + layerRectangles.AddRange(next.layerRectangles); + } + private bool IsNextPositionMoveToAnotherSector(Point next, Size forInsertionSize) { return IsRectangleIntersectSymmetryAxis(new Rectangle(next, forInsertionSize)); @@ -132,8 +148,6 @@ private bool IsRectangleIntersectSymmetryAxis(Rectangle r) return (r.Left < Center.X && r.Right > Center.X) || (r.Bottom > Center.Y && r.Top < Center.Y); } - //TODO: переписать везде где можно подсчёт координат на свойства прямоугольника Top, Bottom и так далее - private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, Rectangle intersected) { var distanceForMoving = CalculateDistanceForMovingBySector(s, forInsertion, intersected); diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 9ce645209..d57db6bc3 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -32,6 +32,14 @@ public Rectangle PutNextRectangle(Size rectangleSize) { var possiblePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); resultRectangle = new Rectangle(possiblePosition, rectangleSize); + var intersected = GetRectangleIntersection(resultRectangle); + while (intersected != new Rectangle()) + { + possiblePosition = + CurrentLayer.GetRectanglePositionWithoutIntersection(resultRectangle, intersected.Value); + resultRectangle = new Rectangle(possiblePosition, rectangleSize); + intersected = GetRectangleIntersection(resultRectangle); + } } OnSuccessInsertion(resultRectangle); return resultRectangle; @@ -45,9 +53,26 @@ private void OnSuccessInsertion(Rectangle r) CurrentLayer.OnSuccessInsertRectangle(r); } + private Rectangle? GetRectangleIntersection(Rectangle forInsertion) + { + return rectanglesLocation + .FirstOrDefault(forInsertion.IntersectsWith); + } + + private Rectangle?[] GetNearestByAllDirectionsFor(Rectangle r) + { + return new [] + { + nearestFinder.FindNearestByDirection(r, Direction.Bottom), + nearestFinder.FindNearestByDirection(r, Direction.Top), + nearestFinder.FindNearestByDirection(r, Direction.Left), + nearestFinder.FindNearestByDirection(r, Direction.Right) + }; + } + private void CreateFirstLayer(Size firstRectangle) { - var radius = Math.Ceiling(Math.Max(firstRectangle.Width, firstRectangle.Height) / 2.0); + var radius = Math.Ceiling(Math.Sqrt(firstRectangle.Width* firstRectangle.Width + firstRectangle.Height* firstRectangle.Height) / 2.0); CurrentLayer = new CircleLayer(center, (int)radius); } diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index d0da6afb4..52ecef60f 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -1,14 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Runtime.InteropServices.Marshalling; -using System.Text; -using System.Threading.Tasks; +using FluentAssertions; using NUnit.Framework; -using FluentAssertions; +using System.Drawing; using static TagsCloudVisualization.CircleLayer; -using System.Reflection.Emit; namespace TagsCloudVisualization.Tests { @@ -46,7 +39,7 @@ public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int in } [Test] - public void CircleLayer_GetNewLayer_AfterInsertionsOnAllSectors() + public void CircleLayer_ShouldCreateNewLayer_AfterInsertionsOnAllSectors() { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); @@ -190,9 +183,14 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() } [Test] - public void GetPositionOnCircleWithoutIntersection_ShouldMoveRectangleClockwiseAndChangeSector_UntilFindsNewPosition() + public void GetPositionOnCircleWithoutIntersection_ShouldChangeCornerPositiomForSector_WhenMoveRectangleClockwise() { - var fullLayer = GetLayerWithFullFirstLayerForIntersection(currentLayer); + var sizesForInsertions = new Size[] + { + new (1,1), new(5,8), new (4,4), new (4,4), new(4,4) + }; + var fullLayer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(currentLayer, sizesForInsertions.Length, + sizesForInsertions); var forInsertion = new Rectangle(new (11, 5), new (6,6)); var intersected = new Rectangle(new(10, 5),new(5, 8)); @@ -201,16 +199,6 @@ public void GetPositionOnCircleWithoutIntersection_ShouldMoveRectangleClockwiseA newPosition.Should().Be(new Point(-1, 12)); } - private CircleLayer GetLayerWithFullFirstLayerForIntersection(CircleLayer layer) - { - var sizesForInsertions = new Size[] - { - new (1,1), new(5,8), new (4,4), new (4,4), new(4,4) - }; - return GetLayerAfterFewInsertionsRectangleWithDifferentSize(layer, sizesForInsertions.Length, - sizesForInsertions); - } - private CircleLayer GetLayerAfterFewInsertionsRectangleWithDifferentSize(CircleLayer layer, int insertionsCount, Size[] sizes) { for (var i = 1; i <= insertionsCount; i++) @@ -221,5 +209,25 @@ private CircleLayer GetLayerAfterFewInsertionsRectangleWithDifferentSize(CircleL } return layer; } + + + [Test] + public void GetPositionOnCircleWithoutIntersection_ShouldCreateNewCircle_IfNeedMoveRectangleFromLastSector() + { + var intersectedSize = new Size(4, 9); + var sizesForInsertions = new Size[] + { + new (1,1), new(1,8), new (4,2), intersectedSize, + new(1,1), new(1,1), new(1,1) + }; + var fullLayer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(currentLayer, sizesForInsertions.Length, + sizesForInsertions); + var forInsertion = new Rectangle(new(-8,2), new(8, 3)); + var intersected = new Rectangle(new(-4, -4), intersectedSize); + + var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); + + newPosition.Should().Be(new Point(5, -5)); + } } } diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index d2243950e..0d3bd5741 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -10,6 +10,7 @@ namespace TagsCloudVisualization.Tests { public class CircularCloudLayouterTests { + private CircularCloudLayouter layouter; private Point defaultCenter; @@ -49,11 +50,11 @@ public void PutNextRectangle_ShouldCreateFirstCircleLayer_AfterPutFirstRectangle layouter.CurrentLayer.Should().NotBeNull(); } - [TestCase(6, 4, 3)] - [TestCase(4, 6, 3)] - [TestCase(2, 2, 1)] - [TestCase(5, 9, 5)] - public void PutNextRectangle_ShouldCreateFirstCircleLayer_WithRadiusEqualHalfMaxSizeOfFirstRectangleRoundToInt(int height, int width, int expected) + [TestCase(6, 4, 4)] + [TestCase(4, 6, 4)] + [TestCase(2, 2, 2)] + [TestCase(5, 9, 6)] + public void PutNextRectangle_ShouldCreateFirstCircleLayer_WithRadiusEqualHalfDiagonalFirstRectangleRoundToInt(int height, int width, int expected) { var firstRectangleSize = new Size(width, height); @@ -77,12 +78,30 @@ public void PutNextRectangle_ShouldAddRectangleToLayouter_AfterPut() public void PutNextRectangle_ShouldUseCircleLayer_ForChoosePositionForRectangle() { var firstRectangleSize = new Size(4, 4); - var expected = new Point(5, -1); + var expectedRadius = 7; + var expected = new Point(defaultCenter.X, defaultCenter.Y - expectedRadius); layouter.PutNextRectangle(firstRectangleSize); var secondRectangleLocation = layouter.PutNextRectangle(firstRectangleSize).Location; secondRectangleLocation.Should().Be(expected); } + + [Test] + public void PutNextRectangle_ShouldPutRectangleWithoutIntersection_WhenNeedOneMoveForDeleteIntersection() + { + var firstRectangleSize = new Size(6, 4); + var expected = new Point(9, 1); + + layouter.PutNextRectangle(firstRectangleSize); + layouter.PutNextRectangle(new Size(4, 4)); + layouter.PutNextRectangle(new Size(4, 4)); + layouter.PutNextRectangle(new Size(4, 4)); + layouter.PutNextRectangle(new Size(4, 4)); + + var rectangleLocation = layouter.PutNextRectangle(new Size(3, 3)).Location; + + rectangleLocation.Should().Be(expected); + } } } From 376106824ca1b2b6bd1d005b5e09a06cfc1cca13 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Fri, 15 Nov 2024 00:40:18 +0500 Subject: [PATCH 08/33] Refactoring: replace validation in layoter, fix tests --- .../BruteForceNearestFinder.cs | 25 ++++--------- .../CircularCloudLayouter.cs | 8 ++++ .../Tests/BruteForceNearestFinderTests.cs | 37 +------------------ .../Tests/CircularCloudLayouterTests.cs | 17 +++++++++ 4 files changed, 35 insertions(+), 52 deletions(-) diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index 62e62b5fd..8dcc98af2 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -14,39 +14,30 @@ public class BruteForceNearestFinder public void Insert(Rectangle r) { - if (RectangleHasInсorrectSize(r)) - throw new ArgumentException($"Rectangle has incorrect size: width = {r.Width}, height = {r.Height}"); rectangles.Add(r); } public Rectangle? FindNearestByDirection(Rectangle r, Direction direction) { - if (RectangleHasInсorrectSize(r)) - throw new ArgumentException($"Rectangle has incorrect size: width= {r.Width}, height={r.Height}"); if (rectangles.Count == 0) return null; var calculator = GetMinDistanceCalculatorBy(direction); - var nearestByDirection = rectangles.Select(currentRectangle => - (distance: calculator(currentRectangle, r), CurrentEl: currentRectangle)) - .Where(el => el.distance >= 0).ToList(); + var nearestByDirection = rectangles + .Select(possibleNearest => (Distance: calculator(possibleNearest, r), CurrentEl: possibleNearest)) + .Where(el => el.Distance >= 0).ToList(); - return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.distance).CurrentEl : null; + return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.Distance).CurrentEl : null; } private Func GetMinDistanceCalculatorBy(Direction direction) { switch (direction) { - case Direction.Left: return (possibleNearest, rectangleForFind) => rectangleForFind.X - possibleNearest.X; - case Direction.Right: return (possibleNearest, rectangleForFind) => possibleNearest.X - rectangleForFind.X; - case Direction.Top: return (possibleNearest, rectangleForFind) => rectangleForFind.Y - possibleNearest.Y; - default: return (possibleNearest, rectangleForFind) => possibleNearest.Y - rectangleForFind.Y; + case Direction.Left: return (possibleNearest, rectangleForFind) => possibleNearest.Right - rectangleForFind.Left; + case Direction.Right: return (possibleNearest, rectangleForFind) => possibleNearest.Left - rectangleForFind.Right; + case Direction.Top: return (possibleNearest, rectangleForFind) => rectangleForFind.Top - possibleNearest.Bottom; + default: return (possibleNearest, rectangleForFind) => possibleNearest.Top - rectangleForFind.Bottom; } } - - private bool RectangleHasInсorrectSize(Rectangle r) - { - return r.Width <= 0 || r.Height <= 0; - } } } diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index d57db6bc3..2e1716910 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -22,6 +22,7 @@ public CircularCloudLayouter(Point center) } public Rectangle PutNextRectangle(Size rectangleSize) { + ValidateRectangleSize(rectangleSize); Rectangle resultRectangle; if (IsFirstRectangle()) { @@ -44,6 +45,13 @@ public Rectangle PutNextRectangle(Size rectangleSize) OnSuccessInsertion(resultRectangle); return resultRectangle; } + private void ValidateRectangleSize(Size s) + { + if (s.Width <= 0 || s.Height <= 0) + { + throw new ArgumentException($"Rectangle has incorrect size: width = {s.Width}, height = {s.Height}"); + } + } private void OnSuccessInsertion(Rectangle r) { diff --git a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs index 75a92ff9d..7a6127852 100644 --- a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs +++ b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs @@ -25,43 +25,10 @@ public void FindNearest_ShouldReturnNull_BeforeAnyInsertions() finder.FindNearestByDirection(rectangleForFind, Direction.Top).Should().BeNull(); } - [TestCase(0, 4, TestName = "WhenWidthZero")] - [TestCase(3, 0, TestName = "WhenHeightZero")] - [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] - [TestCase(3, -4, TestName = "WhenHeightNegative")] - [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] - [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] - public void Insert_ShouldThrow(int width, int height) - { - var rectangleForInsert = new Rectangle(new Point(2, 2), new Size(width, height)); - - ShouldThrow((finder, rectangle) => finder.Insert(rectangle), rectangleForInsert); - } - - [TestCase(0, 4, TestName = "WhenWidthZero")] - [TestCase(3, 0, TestName = "WhenHeightZero")] - [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] - [TestCase(3, -4, TestName = "WhenHeightNegative")] - [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] - [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] - public void FindNearest_ShouldThrow(int width, int height) - { - var rectangleForFind = new Rectangle(new Point(2, 2), new Size(width, height)); - - ShouldThrow((finder, rectangle) => finder.FindNearestByDirection(rectangle, Direction.Top), rectangleForFind); - } - - public void ShouldThrow(Action callFinderMethod, Rectangle incorrectRectangle) - { - Action act = () => callFinderMethod(finder, incorrectRectangle); - - act.Should().Throw(); - } - [TestCase(4, 10, Direction.Top)] [TestCase(2, 7, Direction.Top, true)] [TestCase(2, 7, Direction.Right)] - public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRectangle(int x, int y, Direction direction, bool isFirstRectNearest = false) + public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRectangle(int x, int y, Direction direction, bool isFirstNearest = false) { var addedRectangle1 = new Rectangle(new Point(2, 2), new Size(3, 4)); var addedRectangle2 = new Rectangle(new Point(5, 7), new Size(4, 2)); @@ -70,7 +37,7 @@ public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRecta finder.Insert(addedRectangle1); finder.Insert(addedRectangle2); - finder.FindNearestByDirection(rectangleForFind, direction).Should().Be(isFirstRectNearest ? addedRectangle1 : addedRectangle2); + finder.FindNearestByDirection(rectangleForFind, direction).Should().Be(isFirstNearest ? addedRectangle1 : addedRectangle2); } } } diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index 0d3bd5741..e24dbb7bc 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -5,6 +5,8 @@ using System.Text; using NUnit.Framework; using FluentAssertions; +using System.Reflection; +using static System.Collections.Specialized.BitVector32; namespace TagsCloudVisualization.Tests { @@ -21,6 +23,21 @@ public void SetUp() layouter = new CircularCloudLayouter(defaultCenter); } + [TestCase(0, 4, TestName = "WhenWidthZero")] + [TestCase(3, 0, TestName = "WhenHeightZero")] + [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] + [TestCase(3, -4, TestName = "WhenHeightNegative")] + [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] + [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] + public void Insert_ShouldThrow(int width, int height) + { + var inCorrectSize = new Size(width, height); + + Action act = () => layouter.PutNextRectangle(inCorrectSize); + + act.Should().Throw(); + } + [Test] public void GetRectangles_ShouldBeEmpty_BeforePutAnyRectangles() { From 4ec2ddcd873e1404bf9cba865291de98140cd7e9 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Fri, 15 Nov 2024 15:12:51 +0500 Subject: [PATCH 09/33] Remove usless saving --- .../BruteForceNearestFinder.cs | 13 +++---------- .../Tests/BruteForceNearestFinderTests.cs | 15 ++++++++++----- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index 8dcc98af2..ac39afc01 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -10,16 +10,9 @@ namespace TagsCloudVisualization { public class BruteForceNearestFinder { - private List rectangles = new(); - - public void Insert(Rectangle r) - { - rectangles.Add(r); - } - - public Rectangle? FindNearestByDirection(Rectangle r, Direction direction) + public Rectangle? FindNearestByDirection(Rectangle r, Direction direction, IEnumerable rectangles) { - if (rectangles.Count == 0) + if (rectangles.FirstOrDefault() == default) return null; var calculator = GetMinDistanceCalculatorBy(direction); var nearestByDirection = rectangles @@ -33,7 +26,7 @@ private Func GetMinDistanceCalculatorBy(Direction dir { switch (direction) { - case Direction.Left: return (possibleNearest, rectangleForFind) => possibleNearest.Right - rectangleForFind.Left; + case Direction.Left: return (possibleNearest, rectangleForFind) => rectangleForFind.Left - possibleNearest.Right; case Direction.Right: return (possibleNearest, rectangleForFind) => possibleNearest.Left - rectangleForFind.Right; case Direction.Top: return (possibleNearest, rectangleForFind) => rectangleForFind.Top - possibleNearest.Bottom; default: return (possibleNearest, rectangleForFind) => possibleNearest.Top - rectangleForFind.Bottom; diff --git a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs index 7a6127852..9610b9920 100644 --- a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs +++ b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs @@ -18,26 +18,31 @@ public void SetUp() finder = new BruteForceNearestFinder(); } [Test] - public void FindNearest_ShouldReturnNull_BeforeAnyInsertions() + public void FindNearest_ShouldReturnNull_OnEmptyRectangles() { var rectangleForFind = new Rectangle(new Point(5, 7), new Size(4, 2)); - finder.FindNearestByDirection(rectangleForFind, Direction.Top).Should().BeNull(); + finder.FindNearestByDirection(rectangleForFind, Direction.Top, Array.Empty()).Should().BeNull(); } [TestCase(4, 10, Direction.Top)] [TestCase(2, 7, Direction.Top, true)] [TestCase(2, 7, Direction.Right)] + [TestCase(0, 0, Direction.Right, true)] + [TestCase(0, 0, Direction.Bottom, true)] + [TestCase(7, 4, Direction.Bottom)] + [TestCase(10, 11, Direction.Left)] + [TestCase(7, 4, Direction.Left, true)] public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRectangle(int x, int y, Direction direction, bool isFirstNearest = false) { var addedRectangle1 = new Rectangle(new Point(2, 2), new Size(3, 4)); var addedRectangle2 = new Rectangle(new Point(5, 7), new Size(4, 2)); var rectangleForFind = new Rectangle(new Point(x, y), new Size(2, 1)); + var rectangles = new[] { addedRectangle1, addedRectangle2 }; - finder.Insert(addedRectangle1); - finder.Insert(addedRectangle2); + var nearest = finder.FindNearestByDirection(rectangleForFind, direction, rectangles); - finder.FindNearestByDirection(rectangleForFind, direction).Should().Be(isFirstNearest ? addedRectangle1 : addedRectangle2); + nearest.Should().Be(isFirstNearest ? addedRectangle1 : addedRectangle2); } } } From fe8c9fee10ee03bc99457182c9a44f0645396529 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Fri, 15 Nov 2024 16:57:20 +0500 Subject: [PATCH 10/33] Refactoring: add RectangleStorage --- cs/TagsCloudVisualization/RectangleStorage.cs | 66 +++++++++++++++++++ .../Tests/RectangleStorageTests.cs | 51 ++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 cs/TagsCloudVisualization/RectangleStorage.cs create mode 100644 cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs diff --git a/cs/TagsCloudVisualization/RectangleStorage.cs b/cs/TagsCloudVisualization/RectangleStorage.cs new file mode 100644 index 000000000..820b2ac9b --- /dev/null +++ b/cs/TagsCloudVisualization/RectangleStorage.cs @@ -0,0 +1,66 @@ +using System.Drawing; + +namespace TagsCloudVisualization; + +public class RectangleStorage +{ + private readonly List elements = new(); + + public int Add(Rectangle r) + { + elements.Add(r); + return elements.Count - 1; + } + + public IEnumerable GetAll() + { + foreach (var rectangle in elements) yield return rectangle; + } + + public RectangleWrapper GetById(int id) + { + return elements[id]; + } + + public class RectangleWrapper + { + public RectangleWrapper(Rectangle v) + { + Value = v; + } + + private Rectangle Value { get; set; } + + public Size Size + { + get => Value.Size; + set => Value = new Rectangle(Location, value); + } + + public Point Location + { + get => Value.Location; + set => Value = new Rectangle(value, Size); + } + + public int Top => Value.Top; + public int Bottom => Value.Bottom; + public int Left => Value.Left; + public int Right => Value.Right; + + public static implicit operator RectangleWrapper(Rectangle v) + { + return new RectangleWrapper(v); + } + + public static implicit operator Rectangle(RectangleWrapper r) + { + return r.Value; + } + + public override bool Equals(object? obj) + { + return (obj as RectangleWrapper)?.Value.Equals(Value) ?? (obj as Rectangle?)?.Equals(Value) ?? false; + } + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs b/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs new file mode 100644 index 000000000..d14c1328a --- /dev/null +++ b/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FluentAssertions; +using NUnit.Framework; + +namespace TagsCloudVisualization.Tests +{ + public class RectangleStorageTests + { + private RectangleStorage structStorage; + private Rectangle defaulRectangle; + [SetUp] + public void SetUp() + { + structStorage = new RectangleStorage(); + defaulRectangle = new(new(2, 2), new(2, 2)); + } + + [Test] + public void GetRectangles_ShouldGetAllRectangle() + { + structStorage.Add(defaulRectangle); + structStorage.Add(defaulRectangle); + + structStorage.GetAll().Should().HaveCount(2); + } + + [Test] + public void AddRectangle_ShouldGetIdForRectangle() + { + var id = structStorage.Add(defaulRectangle); + + structStorage.GetById(id).Should().Be(defaulRectangle); + } + + [Test] + public void ChangeRectangle_ShouldChangeRectangleByIndex() + { + var id = structStorage.Add(defaulRectangle); + var rectangleForChange = structStorage.GetById(id); + + rectangleForChange.Size = new Size(1, 1); + + structStorage.GetById(id).Size.Should().Be(rectangleForChange.Size); + } + } +} From d661efd4dca07d2f6d8db4ca85796b6a53d61009 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Fri, 15 Nov 2024 17:54:55 +0500 Subject: [PATCH 11/33] Refactoring: add using storage --- cs/TagsCloudVisualization/CircleLayer.cs | 15 ++-- .../CircularCloudLayouter.cs | 90 ++++++++++--------- .../Tests/CircleLayerTests.cs | 12 ++- .../Tests/CircularCloudLayouterTests.cs | 13 +++ 4 files changed, 79 insertions(+), 51 deletions(-) diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index b3ac472e2..1c192ea90 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -16,20 +16,21 @@ public enum Sector public int Radius { get; private set; } private Sector currentSector; - private readonly List layerRectangles; + private readonly RectangleStorage storage; + private readonly List layerRectangles = new(); - public CircleLayer(Point center, int radius) + public CircleLayer(Point center, int radius, RectangleStorage storage) { Center = center; Radius = radius; currentSector = Sector.Top_Right; - layerRectangles = new List(); + this.storage = storage; } - public CircleLayer OnSuccessInsertRectangle(Rectangle inserted) + public CircleLayer OnSuccessInsertRectangle(int addedRectangleId) { currentSector = GetNextClockwiseSector(); - layerRectangles.Add(inserted); + layerRectangles.Add(addedRectangleId); if (ShouldCreateNewCircle()) return CreateNextLayer(); return this; @@ -47,14 +48,14 @@ private Sector GetNextClockwiseSector() private CircleLayer CreateNextLayer() { - var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer()); + var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer(), storage); return nextLayer; } private int CalculateRadiusForNextLayer() { var prevSector = Sector.Top_Right; - return layerRectangles.Select(r => CalculateDistanceBetweenCenterAndRectangleBySector(r, prevSector++)).Min(); + return layerRectangles.Select(id => CalculateDistanceBetweenCenterAndRectangleBySector(storage.GetById(id), prevSector++)).Min(); } private int CalculateDistanceBetweenCenterAndRectangleBySector(Rectangle r, Sector s) diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 2e1716910..e5cbfe590 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; +using System.Reflection.Metadata.Ecma335; using System.Text; using System.Threading.Tasks; @@ -9,7 +10,7 @@ namespace TagsCloudVisualization { public class CircularCloudLayouter { - private List rectanglesLocation = new (); + private readonly RectangleStorage storage = new (); private readonly Point center; private BruteForceNearestFinder nearestFinder; @@ -23,88 +24,97 @@ public CircularCloudLayouter(Point center) public Rectangle PutNextRectangle(Size rectangleSize) { ValidateRectangleSize(rectangleSize); - Rectangle resultRectangle; - if (IsFirstRectangle()) + Point firstRectanglePosition; + var isFirstRectangle = IsFirstRectangle(); + if (isFirstRectangle) { CreateFirstLayer(rectangleSize); - resultRectangle = PutRectangleToCenter(rectangleSize); + firstRectanglePosition = PutRectangleToCenter(rectangleSize); } else { - var possiblePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); - resultRectangle = new Rectangle(possiblePosition, rectangleSize); - var intersected = GetRectangleIntersection(resultRectangle); - while (intersected != new Rectangle()) - { - possiblePosition = - CurrentLayer.GetRectanglePositionWithoutIntersection(resultRectangle, intersected.Value); - resultRectangle = new Rectangle(possiblePosition, rectangleSize); - intersected = GetRectangleIntersection(resultRectangle); - } + firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); } - OnSuccessInsertion(resultRectangle); - return resultRectangle; + var id = SaveRectangle(firstRectanglePosition, rectangleSize); + var rectangleWithOptimalPosition = OptimiseRectanglePosition(id, isFirstRectangle); + return rectangleWithOptimalPosition; } - private void ValidateRectangleSize(Size s) + + public Rectangle OptimiseRectanglePosition(int id, bool isFirstRectangle) { - if (s.Width <= 0 || s.Height <= 0) + if (isFirstRectangle) return storage.GetById(id); + return PutRectangleOnCircleWithoutIntersection(id); + } + + private int SaveRectangle(Point firstLocation, Size rectangleSize) + { + var id = storage.Add(new Rectangle(firstLocation, rectangleSize)); + return id; + } + + public Rectangle PutRectangleOnCircleWithoutIntersection(int id) + { + var r = storage.GetById(id); + var intersected = GetRectangleIntersection(r); + while (intersected != new Rectangle()) { - throw new ArgumentException($"Rectangle has incorrect size: width = {s.Width}, height = {s.Height}"); + var possiblePosition = + CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); + r = new Rectangle(possiblePosition, r.Size); + intersected = GetRectangleIntersection(r); } + CurrentLayer.OnSuccessInsertRectangle(id); + return r; } - private void OnSuccessInsertion(Rectangle r) + private void ValidateRectangleSize(Size s) { - rectanglesLocation.Add(r); - nearestFinder.Insert(r); - if (IsNotFirstInsertion()) - CurrentLayer.OnSuccessInsertRectangle(r); + if (s.Width <= 0 || s.Height <= 0) + { + throw new ArgumentException($"Rectangle has incorrect size: width = {s.Width}, height = {s.Height}"); + } } private Rectangle? GetRectangleIntersection(Rectangle forInsertion) { - return rectanglesLocation - .FirstOrDefault(forInsertion.IntersectsWith); + return storage.GetAll() + .FirstOrDefault(r => forInsertion.IntersectsWith(r) && forInsertion != r); } private Rectangle?[] GetNearestByAllDirectionsFor(Rectangle r) { + var rectangles = this.storage.GetAll(); return new [] { - nearestFinder.FindNearestByDirection(r, Direction.Bottom), - nearestFinder.FindNearestByDirection(r, Direction.Top), - nearestFinder.FindNearestByDirection(r, Direction.Left), - nearestFinder.FindNearestByDirection(r, Direction.Right) + nearestFinder.FindNearestByDirection(r, Direction.Bottom, rectangles), + nearestFinder.FindNearestByDirection(r, Direction.Top, rectangles), + nearestFinder.FindNearestByDirection(r, Direction.Left, rectangles), + nearestFinder.FindNearestByDirection(r, Direction.Right, rectangles) }; } private void CreateFirstLayer(Size firstRectangle) { var radius = Math.Ceiling(Math.Sqrt(firstRectangle.Width* firstRectangle.Width + firstRectangle.Height* firstRectangle.Height) / 2.0); - CurrentLayer = new CircleLayer(center, (int)radius); + CurrentLayer = new CircleLayer(center, (int)radius, storage); } - private Rectangle PutRectangleToCenter(Size rectangleSize) + private Point PutRectangleToCenter(Size rectangleSize) { var rectangleX = center.X - rectangleSize.Width / 2; var rectangleY = center.Y - rectangleSize.Height / 2; - return new Rectangle(new Point(rectangleX, rectangleY), rectangleSize); + return new Point(rectangleX, rectangleY); } private bool IsFirstRectangle() { - return rectanglesLocation.Count == 0; - } - - private bool IsNotFirstInsertion() - { - return rectanglesLocation.Count > 1; + return storage.GetAll().FirstOrDefault() == default; } public IEnumerable GetRectangles() { - foreach (var rectangle in rectanglesLocation) + foreach (var rectangle in storage.GetAll()) { yield return rectangle; } diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index 52ecef60f..ec53b8a54 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -9,12 +9,14 @@ public class CircleLayerTests { private CircleLayer currentLayer; private Size defaultRectangleSize; + private RectangleStorage storage; [SetUp] public void SetUp() { var startRadius = 5; var center = new Point(5, 5); - currentLayer = new CircleLayer(center, startRadius); + storage = new RectangleStorage(); + currentLayer = new CircleLayer(center, startRadius, storage); defaultRectangleSize = new Size(3, 4); } @@ -42,8 +44,9 @@ public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int in public void CircleLayer_ShouldCreateNewLayer_AfterInsertionsOnAllSectors() { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); + var insertedRectangleId = storage.Add(new Rectangle(new Point(0, 0), defaultRectangleSize)); - var nextLayer = currentLayer.OnSuccessInsertRectangle(new Rectangle(new Point(0, 0), defaultRectangleSize)); + var nextLayer = currentLayer.OnSuccessInsertRectangle(insertedRectangleId); nextLayer.Should().NotBeSameAs(currentLayer); } @@ -53,8 +56,9 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterTo { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); + var insertedRectangleId = storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); - var nextLayer = currentLayer.OnSuccessInsertRectangle(new Rectangle(nextRectangleLocation, new Size(2,2))); + var nextLayer = currentLayer.OnSuccessInsertRectangle(insertedRectangleId); nextLayer.Radius.Should().Be(9); } @@ -205,7 +209,7 @@ private CircleLayer GetLayerAfterFewInsertionsRectangleWithDifferentSize(CircleL { var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); var rectangleForInsert = new Rectangle(location, sizes[i - 1]); - layer = layer.OnSuccessInsertRectangle(rectangleForInsert); + layer = layer.OnSuccessInsertRectangle(storage.Add(rectangleForInsert)); } return layer; } diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index e24dbb7bc..1b1d82917 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -120,5 +120,18 @@ public void PutNextRectangle_ShouldPutRectangleWithoutIntersection_WhenNeedOneMo rectangleLocation.Should().Be(expected); } + + [Test] + public void PutNextRectangle_ShouldTryMoveRectangleCloserToCenter_WhenItPossible() + { + var firstRectangleSize = new Size(6, 4); + var secondRectangleSize = new Size(4, 4); + var expectedSecondRectangleLocation = new Point(-1, 5); + + layouter.PutNextRectangle(firstRectangleSize); + var second = layouter.PutNextRectangle(secondRectangleSize); + + second.Location.Should().Be(expectedSecondRectangleLocation); + } } } From e4ca17df31c1ad5795c1aa0c35bd4859d321bb59 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Fri, 15 Nov 2024 18:09:48 +0500 Subject: [PATCH 12/33] Fix: changing rectangle should change rectangle in storage --- cs/TagsCloudVisualization/CircularCloudLayouter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index e5cbfe590..91ed8cac2 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -60,7 +60,7 @@ public Rectangle PutRectangleOnCircleWithoutIntersection(int id) { var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); - r = new Rectangle(possiblePosition, r.Size); + r.Location = possiblePosition; intersected = GetRectangleIntersection(r); } CurrentLayer.OnSuccessInsertRectangle(id); From 8dff1872a17d0c8f148acc589d64e5447e110228 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Fri, 15 Nov 2024 22:18:34 +0500 Subject: [PATCH 13/33] Add move closer to center --- .../CircularCloudLayouter.cs | 234 ++++++++++-------- .../Tests/CircularCloudLayouterTests.cs | 39 ++- 2 files changed, 163 insertions(+), 110 deletions(-) diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 91ed8cac2..3f4d311e4 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -1,123 +1,159 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Reflection.Metadata.Ecma335; -using System.Text; -using System.Threading.Tasks; - -namespace TagsCloudVisualization +using System.Drawing; + +namespace TagsCloudVisualization; + +public class CircularCloudLayouter { - public class CircularCloudLayouter + private readonly Point center; + private readonly RectangleStorage storage = new(); + private readonly BruteForceNearestFinder nearestFinder; + + public CircularCloudLayouter(Point center) { - private readonly RectangleStorage storage = new (); - private readonly Point center; - private BruteForceNearestFinder nearestFinder; + this.center = center; + nearestFinder = new BruteForceNearestFinder(); + } + + internal CircularCloudLayouter(Point center, RectangleStorage storage) : this(center) + { + this.storage = storage; + } - public CircleLayer CurrentLayer { get; private set; } + public CircleLayer CurrentLayer { get; private set; } - public CircularCloudLayouter(Point center) + public Rectangle PutNextRectangle(Size rectangleSize) + { + ValidateRectangleSize(rectangleSize); + Point firstRectanglePosition; + var isFirstRectangle = IsFirstRectangle(); + if (isFirstRectangle) { - this.center = center; - nearestFinder = new BruteForceNearestFinder(); + CreateFirstLayer(rectangleSize); + firstRectanglePosition = PutRectangleToCenter(rectangleSize); } - public Rectangle PutNextRectangle(Size rectangleSize) + else { - ValidateRectangleSize(rectangleSize); - Point firstRectanglePosition; - var isFirstRectangle = IsFirstRectangle(); - if (isFirstRectangle) - { - CreateFirstLayer(rectangleSize); - firstRectanglePosition = PutRectangleToCenter(rectangleSize); - } - else - { - firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); - } - var id = SaveRectangle(firstRectanglePosition, rectangleSize); - var rectangleWithOptimalPosition = OptimiseRectanglePosition(id, isFirstRectangle); - return rectangleWithOptimalPosition; + firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); } + var id = SaveRectangle(firstRectanglePosition, rectangleSize); + var rectangleWithOptimalPosition = OptimiseRectanglePosition(id, isFirstRectangle); + return rectangleWithOptimalPosition; + } - public Rectangle OptimiseRectanglePosition(int id, bool isFirstRectangle) - { - if (isFirstRectangle) return storage.GetById(id); - return PutRectangleOnCircleWithoutIntersection(id); - } + private int SaveRectangle(Point firstLocation, Size rectangleSize) + { + var id = storage.Add(new Rectangle(firstLocation, rectangleSize)); + return id; + } - private int SaveRectangle(Point firstLocation, Size rectangleSize) - { - var id = storage.Add(new Rectangle(firstLocation, rectangleSize)); - return id; - } + public Rectangle OptimiseRectanglePosition(int id, bool isFirstRectangle) + { + if (isFirstRectangle) return storage.GetById(id); + PutRectangleOnCircleWithoutIntersection(id); + return TryMoveRectangleCloserToCenter(id); + } - public Rectangle PutRectangleOnCircleWithoutIntersection(int id) + public Rectangle PutRectangleOnCircleWithoutIntersection(int id) + { + var r = storage.GetById(id); + var intersected = GetRectangleIntersection(r); + while (intersected != new Rectangle()) { - var r = storage.GetById(id); - var intersected = GetRectangleIntersection(r); - while (intersected != new Rectangle()) - { - var possiblePosition = - CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); - r.Location = possiblePosition; - intersected = GetRectangleIntersection(r); - } - CurrentLayer.OnSuccessInsertRectangle(id); - return r; + var possiblePosition = + CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); + r.Location = possiblePosition; + intersected = GetRectangleIntersection(r); } - private void ValidateRectangleSize(Size s) - { - if (s.Width <= 0 || s.Height <= 0) - { - throw new ArgumentException($"Rectangle has incorrect size: width = {s.Width}, height = {s.Height}"); - } - } + CurrentLayer.OnSuccessInsertRectangle(id); + return r; + } - private Rectangle? GetRectangleIntersection(Rectangle forInsertion) - { - return storage.GetAll() - .FirstOrDefault(r => forInsertion.IntersectsWith(r) && forInsertion != r); - } + public Rectangle TryMoveRectangleCloserToCenter(int id) + { + var rectangleForMoving = storage.GetById(id); + var directionsForMoving = GetDirectionsForMovingToCenter(rectangleForMoving); + var distancesForMove = directionsForMoving + .Select(d => (Nearest: nearestFinder.FindNearestByDirection(rectangleForMoving, d, storage.GetAll()), + Direction: d)) + .Where(tuple => tuple.Nearest != null) + .Select(t => ( + DistanceCalculator: nearestFinder.GetMinDistanceCalculatorBy(t.Direction), t.Nearest, t.Direction)) + .Select(t => (Distance: t.DistanceCalculator((Rectangle)t.Nearest, rectangleForMoving), t.Direction)) + .ToArray(); + rectangleForMoving.Location = MoveByDirections(rectangleForMoving.Location, distancesForMove); + return rectangleForMoving; + } - private Rectangle?[] GetNearestByAllDirectionsFor(Rectangle r) + private Point MoveByDirections(Point p, (int Distance, Direction Direction)[] t) + { + foreach (var moveInfo in t) { - var rectangles = this.storage.GetAll(); - return new [] - { - nearestFinder.FindNearestByDirection(r, Direction.Bottom, rectangles), - nearestFinder.FindNearestByDirection(r, Direction.Top, rectangles), - nearestFinder.FindNearestByDirection(r, Direction.Left, rectangles), - nearestFinder.FindNearestByDirection(r, Direction.Right, rectangles) - }; + var factorForDistanceByX = moveInfo.Direction == Direction.Left ? -1 : moveInfo.Direction == Direction.Right ? 1 : 0; + var factorForDistanceByY = moveInfo.Direction == Direction.Top ? -1 : moveInfo.Direction == Direction.Bottom ? 1 : 0; + p.X += moveInfo.Distance * factorForDistanceByX; + p.Y += moveInfo.Distance * factorForDistanceByY; } - private void CreateFirstLayer(Size firstRectangle) - { - var radius = Math.Ceiling(Math.Sqrt(firstRectangle.Width* firstRectangle.Width + firstRectangle.Height* firstRectangle.Height) / 2.0); - CurrentLayer = new CircleLayer(center, (int)radius, storage); - } + return p; + } - private Point PutRectangleToCenter(Size rectangleSize) - { - var rectangleX = center.X - rectangleSize.Width / 2; - var rectangleY = center.Y - rectangleSize.Height / 2; + private List GetDirectionsForMovingToCenter(Rectangle r) + { + var directions = new List(); + if (r.Bottom < center.Y) directions.Add(Direction.Bottom); + if (r.Left > center.X) directions.Add(Direction.Left); + if (r.Right < center.X) directions.Add(Direction.Right); + if (r.Top > center.Y) directions.Add(Direction.Top); + return directions; + } - return new Point(rectangleX, rectangleY); - } - - private bool IsFirstRectangle() - { - return storage.GetAll().FirstOrDefault() == default; - } + private void ValidateRectangleSize(Size s) + { + if (s.Width <= 0 || s.Height <= 0) + throw new ArgumentException($"Rectangle has incorrect size: width = {s.Width}, height = {s.Height}"); + } - public IEnumerable GetRectangles() + private Rectangle? GetRectangleIntersection(Rectangle forInsertion) + { + return storage.GetAll() + .FirstOrDefault(r => forInsertion.IntersectsWith(r) && forInsertion != r); + } + + private Rectangle?[] GetNearestByAllDirectionsFor(Rectangle r) + { + var rectangles = storage.GetAll(); + return new[] { - foreach (var rectangle in storage.GetAll()) - { - yield return rectangle; - } - } + nearestFinder.FindNearestByDirection(r, Direction.Bottom, rectangles), + nearestFinder.FindNearestByDirection(r, Direction.Top, rectangles), + nearestFinder.FindNearestByDirection(r, Direction.Left, rectangles), + nearestFinder.FindNearestByDirection(r, Direction.Right, rectangles) + }; + } + + private void CreateFirstLayer(Size firstRectangle) + { + var radius = Math.Ceiling(Math.Sqrt(firstRectangle.Width * firstRectangle.Width + + firstRectangle.Height * firstRectangle.Height) / 2.0); + CurrentLayer = new CircleLayer(center, (int)radius, storage); + } + + private Point PutRectangleToCenter(Size rectangleSize) + { + var rectangleX = center.X - rectangleSize.Width / 2; + var rectangleY = center.Y - rectangleSize.Height / 2; + + return new Point(rectangleX, rectangleY); + } + + private bool IsFirstRectangle() + { + return storage.GetAll().FirstOrDefault() == default; + } + + public IEnumerable GetRectangles() + { + foreach (var rectangle in storage.GetAll()) yield return rectangle; } -} +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index 1b1d82917..75b5a0053 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -92,41 +92,58 @@ public void PutNextRectangle_ShouldAddRectangleToLayouter_AfterPut() } [Test] - public void PutNextRectangle_ShouldUseCircleLayer_ForChoosePositionForRectangle() + public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoosePositionForRectangle() { var firstRectangleSize = new Size(4, 4); var expectedRadius = 7; + var storage = new RectangleStorage(); + layouter = new CircularCloudLayouter(defaultCenter, storage); var expected = new Point(defaultCenter.X, defaultCenter.Y - expectedRadius); - layouter.PutNextRectangle(firstRectangleSize); - var secondRectangleLocation = layouter.PutNextRectangle(firstRectangleSize).Location; + var rPos = layouter.CurrentLayer.CalculateTopLeftRectangleCornerPosition(firstRectangleSize); + + ; + var secondRectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(storage.Add(new (rPos, firstRectangleSize))).Location; secondRectangleLocation.Should().Be(expected); } [Test] - public void PutNextRectangle_ShouldPutRectangleWithoutIntersection_WhenNeedOneMoveForDeleteIntersection() + public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection_WhenNeedOneMoveForDeleteIntersection() { var firstRectangleSize = new Size(6, 4); var expected = new Point(9, 1); - + var storage = new RectangleStorage(); + layouter = new CircularCloudLayouter(defaultCenter, storage); + var sizes = new Size[] { new(4, 4), new(4, 4), new(4, 4), new(4, 4)}; layouter.PutNextRectangle(firstRectangleSize); - layouter.PutNextRectangle(new Size(4, 4)); - layouter.PutNextRectangle(new Size(4, 4)); - layouter.PutNextRectangle(new Size(4, 4)); - layouter.PutNextRectangle(new Size(4, 4)); + layouter = InsertionsWithoutCompress(4, layouter, sizes, storage); + var rectangleWithIntersection = + new Rectangle(layouter.CurrentLayer.CalculateTopLeftRectangleCornerPosition(new(3, 3)), new(3, 3)); - var rectangleLocation = layouter.PutNextRectangle(new Size(3, 3)).Location; + var rectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(storage.Add(rectangleWithIntersection)).Location; rectangleLocation.Should().Be(expected); } + private CircularCloudLayouter InsertionsWithoutCompress(int insertionsCount, CircularCloudLayouter l, Size[] sizes, RectangleStorage storage) + { + for (var i = 0; i < insertionsCount; i++) + { + var pos = l.CurrentLayer.CalculateTopLeftRectangleCornerPosition(sizes[i]); + var r = new Rectangle(pos, sizes[i]); + l.PutRectangleOnCircleWithoutIntersection(storage.Add(r)); + } + + return l; + } + [Test] public void PutNextRectangle_ShouldTryMoveRectangleCloserToCenter_WhenItPossible() { var firstRectangleSize = new Size(6, 4); var secondRectangleSize = new Size(4, 4); - var expectedSecondRectangleLocation = new Point(-1, 5); + var expectedSecondRectangleLocation = new Point(5, -1); layouter.PutNextRectangle(firstRectangleSize); var second = layouter.PutNextRectangle(secondRectangleSize); From 6f70c9ddca47af4fc8ab6ce975b788d5b1a184c5 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sat, 16 Nov 2024 04:07:39 +0500 Subject: [PATCH 14/33] Fix radius recalculate and intersection multiplier, add visualisation --- cs/TagsCloudVisualization/CircleLayer.cs | 123 +++++++++--------- .../CircularCloudLayouter.cs | 12 +- .../CircularCloudVisualization.cs | 41 ++++++ .../Tests/CircleLayerTests.cs | 69 +++++----- .../Tests/CircularCloudLayouterTests.cs | 9 +- 5 files changed, 157 insertions(+), 97 deletions(-) create mode 100644 cs/TagsCloudVisualization/CircularCloudVisualization.cs diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index 1c192ea90..16f76d21f 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -1,4 +1,7 @@ -using System.Drawing; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; namespace TagsCloudVisualization; @@ -27,13 +30,12 @@ public CircleLayer(Point center, int radius, RectangleStorage storage) this.storage = storage; } - public CircleLayer OnSuccessInsertRectangle(int addedRectangleId) + public void OnSuccessInsertRectangle(int addedRectangleId) { currentSector = GetNextClockwiseSector(); layerRectangles.Add(addedRectangleId); - if (ShouldCreateNewCircle()) - return CreateNextLayer(); - return this; + if (ShouldCreateNewCircle()) + CreateNextLayerAndChangeCurrentOnNext(); } private bool ShouldCreateNewCircle() @@ -46,31 +48,42 @@ private Sector GetNextClockwiseSector() return currentSector == Sector.Top_Left ? Sector.Top_Right : currentSector + 1; } - private CircleLayer CreateNextLayer() + private void CreateNextLayerAndChangeCurrentOnNext() { var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer(), storage); - return nextLayer; + ChangeCurrentLayerBy(nextLayer); + } + + private void ChangeCurrentLayerBy(CircleLayer next) + { + Radius = next.Radius; + currentSector = next.currentSector; + var rectanglesForNextRadius = RemoveRectangleInCircle(); + layerRectangles.Clear(); + layerRectangles.AddRange(rectanglesForNextRadius); } private int CalculateRadiusForNextLayer() { - var prevSector = Sector.Top_Right; - return layerRectangles.Select(id => CalculateDistanceBetweenCenterAndRectangleBySector(storage.GetById(id), prevSector++)).Min(); + return layerRectangles + .Select(id => CalculateDistanceBetweenCenterAndRectangle(storage.GetById(id))) + .Min(); } - private int CalculateDistanceBetweenCenterAndRectangleBySector(Rectangle r, Sector s) + private List RemoveRectangleInCircle() { - switch (s) - { - case Sector.Top_Right: - return CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Top)); - case Sector.Bottom_Right: - return CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Bottom)); - case Sector.Bottom_Left: - return CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Bottom)); - default: - return CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Top)); - } + return layerRectangles + .Where(id => CalculateDistanceBetweenCenterAndRectangle(storage.GetById(id)) > Radius) + .ToList(); + } + + private int CalculateDistanceBetweenCenterAndRectangle(Rectangle r) + { + var d1 = CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Top)); + var d2 = CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Bottom)); + var d3 = CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Bottom)); + var d4 = CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Top)); + return Math.Max(Math.Max(d1, d2), Math.Max(d3, d4)); } private int CalculateDistanceBetweenPoints(Point p1, Point p2) @@ -84,11 +97,13 @@ public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) switch (currentSector) { case Sector.Top_Right: - return new Point(rectangleStartPositionOnCircle.X, rectangleStartPositionOnCircle.Y - rectangleSize.Height); - case Sector.Bottom_Right: + return new Point(rectangleStartPositionOnCircle.X, + rectangleStartPositionOnCircle.Y - rectangleSize.Height); + case Sector.Bottom_Right: return rectangleStartPositionOnCircle; case Sector.Bottom_Left: - return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, rectangleStartPositionOnCircle.Y); + return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, + rectangleStartPositionOnCircle.Y); default: return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, rectangleStartPositionOnCircle.Y - rectangleSize.Height); @@ -99,13 +114,13 @@ private Point GetStartSectorPointOnCircleBySector(Sector s) { switch (s) { - case Sector.Top_Right: + case Sector.Top_Right: return new Point(Center.X, Center.Y - Radius); - case Sector.Bottom_Right: + case Sector.Bottom_Right: return new Point(Center.X + Radius, Center.Y); - case Sector.Bottom_Left: + case Sector.Bottom_Left: return new Point(Center.X, Center.Y + Radius); - default: + default: return new Point(Center.X - Radius, Center.Y); } } @@ -116,27 +131,11 @@ public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rec if (IsNextPositionMoveToAnotherSector(nextPosition, forInsertion.Size)) { currentSector = GetNextClockwiseSector(); - if (ShouldCreateNewCircle()) - { - CreateNextLayerAndChangeCurrentOnNext(); - } + if (ShouldCreateNewCircle()) CreateNextLayerAndChangeCurrentOnNext(); nextPosition = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); } - return nextPosition; - } - - private void CreateNextLayerAndChangeCurrentOnNext() - { - var nextLayer = CreateNextLayer(); - ChangeCurrentLayerBy(nextLayer); - } - private void ChangeCurrentLayerBy(CircleLayer next) - { - Radius = next.Radius; - currentSector = next.currentSector; - layerRectangles.Clear(); - layerRectangles.AddRange(next.layerRectangles); + return nextPosition; } private bool IsNextPositionMoveToAnotherSector(Point next, Size forInsertionSize) @@ -149,7 +148,8 @@ private bool IsRectangleIntersectSymmetryAxis(Rectangle r) return (r.Left < Center.X && r.Right > Center.X) || (r.Bottom > Center.Y && r.Top < Center.Y); } - private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, Rectangle intersected) + private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, + Rectangle intersected) { var distanceForMoving = CalculateDistanceForMovingBySector(s, forInsertion, intersected); var isMovingAxisIsX = IsMovingAxisIsXBySector(s); @@ -159,8 +159,8 @@ private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangl CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX); distanceForMoving *= CalculateMoveMultiplierForMoveClockwise(isMovingAxisIsX, forInsertion); distanceForBringBackOnCircle *= CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion); - return isMovingAxisIsX - ? new Point(forInsertion.X + distanceForMoving, forInsertion.Y + distanceForBringBackOnCircle) + return isMovingAxisIsX + ? new Point(forInsertion.X + distanceForMoving, forInsertion.Y + distanceForBringBackOnCircle) : new Point(forInsertion.X + distanceForBringBackOnCircle, forInsertion.Y + distanceForMoving); } @@ -170,8 +170,10 @@ private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCo Func getStaticAxis = isMovingAxisIsX ? p => p.X : p => p.Y; var distanceOnStaticAxis = Math.Abs(getStaticAxis(nearestForCenterCorner) - getStaticAxis(Center)); - var distanceOnAxisForBringBackOnCircle = Math.Abs(getAxisForBringBackOnCircle(nearestForCenterCorner) - getAxisForBringBackOnCircle(Center)); - return (int)Math.Ceiling(Math.Sqrt(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)) - distanceOnAxisForBringBackOnCircle; + var distanceOnAxisForBringBackOnCircle = Math.Abs(getAxisForBringBackOnCircle(nearestForCenterCorner) - + getAxisForBringBackOnCircle(Center)); + return (int)Math.Ceiling(Math.Sqrt(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)) - + distanceOnAxisForBringBackOnCircle; } private Point CalculateCornerNearestForCenterAfterMove(Sector s, int distanceForMoving, Rectangle r) @@ -180,25 +182,30 @@ private Point CalculateCornerNearestForCenterAfterMove(Sector s, int distanceFor var moveMultiplier = CalculateMoveMultiplierForMoveClockwise(isAxisForMoveIsX, r); distanceForMoving *= moveMultiplier; var nearestCorner = GetCornerNearestForCenterBySector(s, r); - return isAxisForMoveIsX - ? new Point(nearestCorner.X + distanceForMoving, nearestCorner.Y) + return isAxisForMoveIsX + ? new Point(nearestCorner.X + distanceForMoving, nearestCorner.Y) : new Point(nearestCorner.X, nearestCorner.Y + distanceForMoving); } private int CalculateMoveMultiplierForMoveFromCenter(bool isAxisForMoveIsX, Rectangle r) { - return isAxisForMoveIsX - ? r.Right < Center.X ? -1 : 1 - : r.Bottom < Center.Y ? -1 : 1; + return isAxisForMoveIsX + ? r.Right <= Center.X ? -1 : 1 + : r.Bottom <= Center.Y + ? -1 + : 1; } + private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Rectangle r) { return isAxisForMoveIsX ? r.Left > Center.X ? -1 : 1 - : r.Bottom > Center.Y ? -1 : 1; + : r.Bottom > Center.Y + ? -1 + : 1; } - private int CalculateDistanceForMovingBySector (Sector s, Rectangle forInsertion, Rectangle intersected) + private int CalculateDistanceForMovingBySector(Sector s, Rectangle forInsertion, Rectangle intersected) { switch (s) { diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 3f4d311e4..d2122036d 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -1,4 +1,7 @@ -using System.Drawing; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; namespace TagsCloudVisualization; @@ -35,6 +38,7 @@ public Rectangle PutNextRectangle(Size rectangleSize) { firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); } + var id = SaveRectangle(firstRectanglePosition, rectangleSize); var rectangleWithOptimalPosition = OptimiseRectanglePosition(id, isFirstRectangle); return rectangleWithOptimalPosition; @@ -89,8 +93,10 @@ private Point MoveByDirections(Point p, (int Distance, Direction Direction)[] t) { foreach (var moveInfo in t) { - var factorForDistanceByX = moveInfo.Direction == Direction.Left ? -1 : moveInfo.Direction == Direction.Right ? 1 : 0; - var factorForDistanceByY = moveInfo.Direction == Direction.Top ? -1 : moveInfo.Direction == Direction.Bottom ? 1 : 0; + var factorForDistanceByX = moveInfo.Direction == Direction.Left ? -1 : + moveInfo.Direction == Direction.Right ? 1 : 0; + var factorForDistanceByY = moveInfo.Direction == Direction.Top ? -1 : + moveInfo.Direction == Direction.Bottom ? 1 : 0; p.X += moveInfo.Distance * factorForDistanceByX; p.Y += moveInfo.Distance * factorForDistanceByY; } diff --git a/cs/TagsCloudVisualization/CircularCloudVisualization.cs b/cs/TagsCloudVisualization/CircularCloudVisualization.cs new file mode 100644 index 000000000..3a92636e4 --- /dev/null +++ b/cs/TagsCloudVisualization/CircularCloudVisualization.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace TagsCloudVisualization +{ + public class CircularCloudVisualization + { + private RectangleStorage rectangleStorage; + private const string FILE_PATH = "./Images/"; + + public CircularCloudVisualization(RectangleStorage rectangles) + { + rectangleStorage = rectangles; + } + + public void CreateImage() + { + var fileName = Path.Combine(Path.GetTempPath(), "testImage1010.png"); + using (var image = new Bitmap(1000, 1000)) + { + using (Graphics graphics = Graphics.FromImage(image)) + { + Pen pen = new Pen(Color.Black); + graphics.DrawRectangles(pen, rectangleStorage.GetAll().ToArray()); + } + image.Save(fileName, ImageFormat.Png); + } + } + + private void CreateFile(string filePath) + { + + } + } +} diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index ec53b8a54..c9d60a008 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -1,6 +1,7 @@ using FluentAssertions; using NUnit.Framework; using System.Drawing; +using System.Linq; using static TagsCloudVisualization.CircleLayer; namespace TagsCloudVisualization.Tests @@ -39,17 +40,7 @@ public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int in possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(expected, defaultRectangleSize)); } - - [Test] - public void CircleLayer_ShouldCreateNewLayer_AfterInsertionsOnAllSectors() - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); - var insertedRectangleId = storage.Add(new Rectangle(new Point(0, 0), defaultRectangleSize)); - - var nextLayer = currentLayer.OnSuccessInsertRectangle(insertedRectangleId); - - nextLayer.Should().NotBeSameAs(currentLayer); - } + [Test] public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangle() @@ -58,14 +49,14 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterTo var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); var insertedRectangleId = storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); - var nextLayer = currentLayer.OnSuccessInsertRectangle(insertedRectangleId); + currentLayer.OnSuccessInsertRectangle(insertedRectangleId); - nextLayer.Radius.Should().Be(9); + currentLayer.Radius.Should().Be(9); } private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int insertionsCount) { - layer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(layer, insertionsCount, + layer = GetLayerAfterFewInsertionsRectangle(layer, insertionsCount, new Size[insertionsCount].Select(x => defaultRectangleSize).ToArray()); return layer; } @@ -104,7 +95,7 @@ public void CircleLayer_RectangleWithNewPositionAfterIntersection_ShouldNotInter } [Test] - public void GetPositionOnCircleWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_WhenFoundIntersectionInTopRightSector_AndIntersectedRectangleCanPlaceWithIntCoordinate() + public void GetPositionWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_WhenFoundIntersectionInTopRightSector() { var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); @@ -116,7 +107,7 @@ public void GetPositionOnCircleWithoutIntersection_ShouldPlaceBottomLeftCornerOn } [Test] - public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopRightSector() + public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopRightSector() { var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); @@ -129,7 +120,7 @@ public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePositio [Test] - public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomRightSector() + public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomRightSector() { var rectangleForInsertion = new Rectangle(new Point(8, 9), new Size(5, 1)); var intersectedRectangle = new Rectangle(new Point(10, 5), new Size(8, 7)); @@ -143,7 +134,7 @@ public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePositio [Test] - public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomLeftSector() + public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomLeftSector() { var rectangleForInsertion = new Rectangle(new Point(-3, 9), new Size(5, 3)); var intersectedRectangle = new Rectangle(new Point(-7, 8), new Size(8, 7)); @@ -156,7 +147,7 @@ public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePositio } [Test] - public void GetPositionOnCircleWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopLeftSector() + public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopLeftSector() { var rectangleForInsertion = new Rectangle(new (-3, -2), new (4, 3)); var intersectedRectangle = new Rectangle(new (-7, 1), new (8, 7)); @@ -181,19 +172,19 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() { new (8,1), new(7,8), new (4,4), new (4,4), new(4,4) }; - var nextLayer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(currentLayer, sizes.Length, sizes); + var nextLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); nextLayer.Radius.Should().Be(10); } [Test] - public void GetPositionOnCircleWithoutIntersection_ShouldChangeCornerPositiomForSector_WhenMoveRectangleClockwise() + public void GetPositionWithoutIntersection_ShouldChangeCornerPositionForSector_WhenMoveRectangleClockwise() { var sizesForInsertions = new Size[] { new (1,1), new(5,8), new (4,4), new (4,4), new(4,4) }; - var fullLayer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(currentLayer, sizesForInsertions.Length, + var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizesForInsertions.Length, sizesForInsertions); var forInsertion = new Rectangle(new (11, 5), new (6,6)); var intersected = new Rectangle(new(10, 5),new(5, 8)); @@ -203,35 +194,55 @@ public void GetPositionOnCircleWithoutIntersection_ShouldChangeCornerPositiomFor newPosition.Should().Be(new Point(-1, 12)); } - private CircleLayer GetLayerAfterFewInsertionsRectangleWithDifferentSize(CircleLayer layer, int insertionsCount, Size[] sizes) + private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int insertionsCount, Size[] sizes) { for (var i = 1; i <= insertionsCount; i++) { var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); var rectangleForInsert = new Rectangle(location, sizes[i - 1]); - layer = layer.OnSuccessInsertRectangle(storage.Add(rectangleForInsert)); + layer.OnSuccessInsertRectangle(storage.Add(rectangleForInsert)); } return layer; } [Test] - public void GetPositionOnCircleWithoutIntersection_ShouldCreateNewCircle_IfNeedMoveRectangleFromLastSector() + public void GetPositionWithoutIntersection_ShouldCreateNewCircle_IfNeedMoveRectangleFromLastSector() { var intersectedSize = new Size(4, 9); - var sizesForInsertions = new Size[] + var sizesForInsertions = new [] { new (1,1), new(1,8), new (4,2), intersectedSize, new(1,1), new(1,1), new(1,1) }; - var fullLayer = GetLayerAfterFewInsertionsRectangleWithDifferentSize(currentLayer, sizesForInsertions.Length, + var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizesForInsertions.Length, sizesForInsertions); - var forInsertion = new Rectangle(new(-8,2), new(8, 3)); + var forInsertion = new Rectangle(new(-10,2), new(8, 3)); var intersected = new Rectangle(new(-4, -4), intersectedSize); var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - newPosition.Should().Be(new Point(5, -5)); + newPosition.Should().Be(new Point(5, -7)); + } + + [Test] + public void GetPositionWithoutIntersection_WhenOneRectangleOnSimmetricalAxis() + { + var intersectedSize = new Size(50, 50); + var sizesForInsertions = new[] + { + new (1,1), new(1,8), intersectedSize, new(1,1), new(1,1), new(1,1) + }; + var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizesForInsertions.Length, + sizesForInsertions); + var forInsertion = new Rectangle(new(4, 10), new(1, 1)); + var intersected = new Rectangle(new(-50, 10), intersectedSize); + + forInsertion.Location = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); + + + forInsertion.IntersectsWith(intersected).Should().BeFalse(); + forInsertion.Location.Should().Be(new Point(-2, 9)); } } } diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index 75b5a0053..e8307e141 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -1,12 +1,7 @@ using System; -using System.Collections.Generic; using System.Drawing; -using System.Linq; -using System.Text; using NUnit.Framework; using FluentAssertions; -using System.Reflection; -using static System.Collections.Specialized.BitVector32; namespace TagsCloudVisualization.Tests { @@ -112,10 +107,10 @@ public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoo public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection_WhenNeedOneMoveForDeleteIntersection() { var firstRectangleSize = new Size(6, 4); - var expected = new Point(9, 1); + var expected = new Point(14, 1); var storage = new RectangleStorage(); layouter = new CircularCloudLayouter(defaultCenter, storage); - var sizes = new Size[] { new(4, 4), new(4, 4), new(4, 4), new(4, 4)}; + var sizes = new Size[] { new(4, 7), new(4, 4), new(4, 4), new(4, 4)}; layouter.PutNextRectangle(firstRectangleSize); layouter = InsertionsWithoutCompress(4, layouter, sizes, storage); var rectangleWithIntersection = From a4217c3ffb43678f81759f711243c84ad55fb877 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sat, 16 Nov 2024 04:09:22 +0500 Subject: [PATCH 15/33] Small fix --- .../BruteForceNearestFinder.cs | 2 +- cs/TagsCloudVisualization/RectangleStorage.cs | 3 ++- .../Tests/RectangleStorageTests.cs | 20 +++++++++---------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index ac39afc01..1f94c93b4 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -22,7 +22,7 @@ public class BruteForceNearestFinder return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.Distance).CurrentEl : null; } - private Func GetMinDistanceCalculatorBy(Direction direction) + public Func GetMinDistanceCalculatorBy(Direction direction) { switch (direction) { diff --git a/cs/TagsCloudVisualization/RectangleStorage.cs b/cs/TagsCloudVisualization/RectangleStorage.cs index 820b2ac9b..a5ea62ad9 100644 --- a/cs/TagsCloudVisualization/RectangleStorage.cs +++ b/cs/TagsCloudVisualization/RectangleStorage.cs @@ -1,4 +1,5 @@ -using System.Drawing; +using System.Collections.Generic; +using System.Drawing; namespace TagsCloudVisualization; diff --git a/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs b/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs index d14c1328a..9d0b90954 100644 --- a/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs +++ b/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs @@ -11,41 +11,41 @@ namespace TagsCloudVisualization.Tests { public class RectangleStorageTests { - private RectangleStorage structStorage; + private RectangleStorage storage; private Rectangle defaulRectangle; [SetUp] public void SetUp() { - structStorage = new RectangleStorage(); + storage = new RectangleStorage(); defaulRectangle = new(new(2, 2), new(2, 2)); } [Test] public void GetRectangles_ShouldGetAllRectangle() { - structStorage.Add(defaulRectangle); - structStorage.Add(defaulRectangle); + storage.Add(defaulRectangle); + storage.Add(defaulRectangle); - structStorage.GetAll().Should().HaveCount(2); + storage.GetAll().Should().HaveCount(2); } [Test] public void AddRectangle_ShouldGetIdForRectangle() { - var id = structStorage.Add(defaulRectangle); + var id = storage.Add(defaulRectangle); - structStorage.GetById(id).Should().Be(defaulRectangle); + storage.GetById(id).Should().Be(defaulRectangle); } [Test] public void ChangeRectangle_ShouldChangeRectangleByIndex() { - var id = structStorage.Add(defaulRectangle); - var rectangleForChange = structStorage.GetById(id); + var id = storage.Add(defaulRectangle); + var rectangleForChange = storage.GetById(id); rectangleForChange.Size = new Size(1, 1); - structStorage.GetById(id).Size.Should().Be(rectangleForChange.Size); + storage.GetById(id).Size.Should().Be(rectangleForChange.Size); } } } From 051cb3a23dd0797507665ff1115d3aadb5231578 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sat, 16 Nov 2024 04:38:14 +0500 Subject: [PATCH 16/33] Refactoring: remove dublicate tests --- .../Tests/CircleLayerTests.cs | 157 +++++++----------- 1 file changed, 58 insertions(+), 99 deletions(-) diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index c9d60a008..346c906ef 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -1,4 +1,5 @@ -using FluentAssertions; +using System.Collections.Generic; +using FluentAssertions; using NUnit.Framework; using System.Drawing; using System.Linq; @@ -43,7 +44,7 @@ public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int in [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangle() + public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangles() { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); @@ -54,10 +55,10 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterTo currentLayer.Radius.Should().Be(9); } - private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int insertionsCount) + private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int additionsCount) { - layer = GetLayerAfterFewInsertionsRectangle(layer, insertionsCount, - new Size[insertionsCount].Select(x => defaultRectangleSize).ToArray()); + layer = GetLayerAfterFewInsertionsRectangle(layer, additionsCount, + new Size[additionsCount].Select(x => defaultRectangleSize).ToArray()); return layer; } @@ -106,55 +107,35 @@ public void GetPositionWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_W CurrentLayerContainsPoint(bottomLeftCorner).Should().BeTrue(); } - [Test] - public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopRightSector() + public static IEnumerable SimpleIntersectionInSector { - var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); - var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); - var expected = new Point(9, 1); - - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); - - newPosition.Should().Be(expected); - } - - - [Test] - public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomRightSector() - { - var rectangleForInsertion = new Rectangle(new Point(8, 9), new Size(5, 1)); - var intersectedRectangle = new Rectangle(new Point(10, 5), new Size(8, 7)); - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 1); - var expected = new Point(5, 10); - - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); - - newPosition.Should().Be(expected); - } - - - [Test] - public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInBottomLeftSector() - { - var rectangleForInsertion = new Rectangle(new Point(-3, 9), new Size(5, 3)); - var intersectedRectangle = new Rectangle(new Point(-7, 8), new Size(8, 7)); - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 2); - var expected = new Point(-5, 5); - - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); - - newPosition.Should().Be(expected); + get + { + yield return new TestCaseData( + new Rectangle(new Point(5, -1), new Size(5, 1)), + new Rectangle(new Point(8, -6), new Size(8, 7)), + new Point(9, 1), 0).SetName("WhenFoundIntersectionInTopRightSector"); + yield return new TestCaseData( + new Rectangle(new Point(8, 9), new Size(5, 1)), + new Rectangle(new Point(10, 5), new Size(8, 7)), + new Point(5, 10), 1).SetName("WhenFoundIntersectionInBottomRightSector"); + yield return new TestCaseData( + new Rectangle(new Point(-3, 9), new Size(5, 3)), + new Rectangle(new Point(-7, 8), new Size(8, 7)), + new Point(-5, 5), 2).SetName("WhenFoundIntersectionInBottomLeftSector"); + yield return new TestCaseData( + new Rectangle(new(-3, -2), new(4, 3)), + new Rectangle(new(-7, 1), new(8, 7)), + new Point(1, -3), 3).SetName("WhenFoundIntersectionInTopLeftSector"); + } } - [Test] - public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition_WhenFoundIntersectionInTopLeftSector() + [TestCaseSource("SimpleIntersectionInSector")] + public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition(Rectangle forInsertion, Rectangle intersected, Point expected, int additionsCount) { - var rectangleForInsertion = new Rectangle(new (-3, -2), new (4, 3)); - var intersectedRectangle = new Rectangle(new (-7, 1), new (8, 7)); - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); - var expected = new Point(1, -3); + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, additionsCount); - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); newPosition.Should().Be(expected); } @@ -177,23 +158,40 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() nextLayer.Radius.Should().Be(10); } - [Test] - public void GetPositionWithoutIntersection_ShouldChangeCornerPositionForSector_WhenMoveRectangleClockwise() + public static IEnumerable GetDataForIntersectionTests { - var sizesForInsertions = new Size[] + get { - new (1,1), new(5,8), new (4,4), new (4,4), new(4,4) - }; - var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizesForInsertions.Length, - sizesForInsertions); - var forInsertion = new Rectangle(new (11, 5), new (6,6)); - var intersected = new Rectangle(new(10, 5),new(5, 8)); + yield return new TestCaseData(new Size[] + { new(1, 1), new(5, 8), new(4, 4), new(4, 4), new(4, 4) }, + new Rectangle(new(11, 5), new(6, 6)), + new Rectangle(new(10, 5), new(5, 8)), + new Point(-1, 12)).SetName("ChangeCornerPositionForSector_WhenMoveRectangleClockwise"); + yield return new TestCaseData(new Size[] + { new (1,1), new(1,8), new (4,2), new (4, 9), + new(1,1), new(1,1), new(1,1)}, + new Rectangle(new(-10, 2), new(8, 3)), + new Rectangle(new(-4, -4), new (4, 9)), + new Point(5, -7)).SetName("CreateNewCircle_IfNeedMoveRectangleFromLastSector"); + yield return new TestCaseData(new Size[] + { new (1,1), new(1,8), new (50, 50), new(1,1), new(1,1), new(1,1)}, + new Rectangle(new(4, 10), new(1, 1)), + new Rectangle(new(-50, 10), new(50, 50)), + new Point(-2, 9)).SetName("GetCorrectPosition_WhenRectanglesSidesMatch"); + + } + } + + [TestCaseSource("GetDataForIntersectionTests")] + public void GetPositionWithoutIntersection_Should(Size[] sizes, Rectangle forInsertion, Rectangle intersected, Point expected) + { + var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - newPosition.Should().Be(new Point(-1, 12)); + newPosition.Should().Be(expected); } - + private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int insertionsCount, Size[] sizes) { for (var i = 1; i <= insertionsCount; i++) @@ -205,44 +203,5 @@ private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int i return layer; } - - [Test] - public void GetPositionWithoutIntersection_ShouldCreateNewCircle_IfNeedMoveRectangleFromLastSector() - { - var intersectedSize = new Size(4, 9); - var sizesForInsertions = new [] - { - new (1,1), new(1,8), new (4,2), intersectedSize, - new(1,1), new(1,1), new(1,1) - }; - var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizesForInsertions.Length, - sizesForInsertions); - var forInsertion = new Rectangle(new(-10,2), new(8, 3)); - var intersected = new Rectangle(new(-4, -4), intersectedSize); - - var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - - newPosition.Should().Be(new Point(5, -7)); - } - - [Test] - public void GetPositionWithoutIntersection_WhenOneRectangleOnSimmetricalAxis() - { - var intersectedSize = new Size(50, 50); - var sizesForInsertions = new[] - { - new (1,1), new(1,8), intersectedSize, new(1,1), new(1,1), new(1,1) - }; - var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizesForInsertions.Length, - sizesForInsertions); - var forInsertion = new Rectangle(new(4, 10), new(1, 1)); - var intersected = new Rectangle(new(-50, 10), intersectedSize); - - forInsertion.Location = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - - - forInsertion.IntersectsWith(intersected).Should().BeFalse(); - forInsertion.Location.Should().Be(new Point(-2, 9)); - } } } From 9879db0ea09cad4a43c784715be3666399595918 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sun, 17 Nov 2024 19:29:52 +0500 Subject: [PATCH 17/33] Refactoring And Fix infinite cicle when find position for new rectangle --- cs/TagsCloudVisualization/CircleLayer.cs | 104 ++++-- .../CircularCloudLayouter.cs | 31 +- .../CircularCloudVisualization.cs | 75 +++- cs/TagsCloudVisualization/README.md | 3 + .../Tests/CircleLayerTests.cs | 338 +++++++++--------- .../Tests/CircularCloudLayouterTests.cs | 23 +- ...CircularCloudLayouterVisualizationTests.cs | 40 +++ 7 files changed, 376 insertions(+), 238 deletions(-) create mode 100644 cs/TagsCloudVisualization/README.md create mode 100644 cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index 16f76d21f..36e5322a8 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -18,6 +18,10 @@ public enum Sector public Point Center { get; } public int Radius { get; private set; } + public Sector CurrentSector + { + get => currentSector; + } private Sector currentSector; private readonly RectangleStorage storage; private readonly List layerRectangles = new(); @@ -66,18 +70,18 @@ private void ChangeCurrentLayerBy(CircleLayer next) private int CalculateRadiusForNextLayer() { return layerRectangles - .Select(id => CalculateDistanceBetweenCenterAndRectangle(storage.GetById(id))) + .Select(id => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage.GetById(id))) .Min(); } private List RemoveRectangleInCircle() { return layerRectangles - .Where(id => CalculateDistanceBetweenCenterAndRectangle(storage.GetById(id)) > Radius) + .Where(id => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage.GetById(id)) > Radius) .ToList(); } - private int CalculateDistanceBetweenCenterAndRectangle(Rectangle r) + private int CalculateDistanceBetweenCenterAndRectangleFarCorner(Rectangle r) { var d1 = CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Top)); var d2 = CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Bottom)); @@ -127,13 +131,14 @@ private Point GetStartSectorPointOnCircleBySector(Sector s) public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rectangle intersected) { - var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); - if (IsNextPositionMoveToAnotherSector(nextPosition, forInsertion.Size)) + if (IsNextPositionMoveToAnotherSector(forInsertion.Location, forInsertion.Size)) { currentSector = GetNextClockwiseSector(); if (ShouldCreateNewCircle()) CreateNextLayerAndChangeCurrentOnNext(); - nextPosition = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); + forInsertion.Location = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); } + var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); + return nextPosition; } @@ -151,12 +156,21 @@ private bool IsRectangleIntersectSymmetryAxis(Rectangle r) private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, Rectangle intersected) { + bool isMovingAxisIsX = IsMovingAxisIsXBySector(s); var distanceForMoving = CalculateDistanceForMovingBySector(s, forInsertion, intersected); - var isMovingAxisIsX = IsMovingAxisIsXBySector(s); - var nearestForCenterCorner = - CalculateCornerNearestForCenterAfterMove(s, distanceForMoving, forInsertion); - var distanceForBringBackOnCircle = - CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX); + + int distanceForBringBackOnCircle; + if (IsRectangleBetweenSectors(distanceForMoving, forInsertion.Location, isMovingAxisIsX)) + { + distanceForBringBackOnCircle = Radius; + } + else + { + var nearestForCenterCorner = + CalculateCornerNearestForCenterAfterMove(s, distanceForMoving, forInsertion); + distanceForBringBackOnCircle = + CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX, forInsertion); + } distanceForMoving *= CalculateMoveMultiplierForMoveClockwise(isMovingAxisIsX, forInsertion); distanceForBringBackOnCircle *= CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion); return isMovingAxisIsX @@ -164,7 +178,15 @@ private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangl : new Point(forInsertion.X + distanceForBringBackOnCircle, forInsertion.Y + distanceForMoving); } - private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX) + private bool IsRectangleBetweenSectors(int distanceForMoving, Point forInsertionLocation, bool isMovingAxisIsX) + { + var distanceToCenter = Math.Abs(isMovingAxisIsX + ? forInsertionLocation.X - Center.X + : forInsertionLocation.Y - Center.Y); + return distanceForMoving > distanceToCenter; + } + + private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX, Rectangle r) { Func getAxisForBringBackOnCircle = isMovingAxisIsX ? p => p.Y : p => p.X; Func getStaticAxis = isMovingAxisIsX ? p => p.X : p => p.Y; @@ -172,8 +194,34 @@ private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCo var distanceOnStaticAxis = Math.Abs(getStaticAxis(nearestForCenterCorner) - getStaticAxis(Center)); var distanceOnAxisForBringBackOnCircle = Math.Abs(getAxisForBringBackOnCircle(nearestForCenterCorner) - getAxisForBringBackOnCircle(Center)); - return (int)Math.Ceiling(Math.Sqrt(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)) - - distanceOnAxisForBringBackOnCircle; + var distanceBetweenCornerAndCenter = CalculateDistanceBetweenPoints(Center, nearestForCenterCorner); + if (distanceBetweenCornerAndCenter > Radius) + { + + return CalculateMoveMultiplierForMoveToCenter(!isMovingAxisIsX, r) + * WhenRectangleOutsideCircle(distanceOnStaticAxis, distanceBetweenCornerAndCenter, + distanceOnAxisForBringBackOnCircle); + } + + return CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, r) + * WhenRectangleInCircle(distanceOnStaticAxis, distanceOnAxisForBringBackOnCircle); + } + + private int WhenRectangleOutsideCircle(int distanceOnStaticAxis, int distanceBetweenCornerAndCenter, int distanceOnAxisForBringBackOnCircle) + { + var inCircleCathetusPart = Math.Sqrt(Math.Abs(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)); + return CalculatePartCathetus(distanceBetweenCornerAndCenter, inCircleCathetusPart, + distanceOnAxisForBringBackOnCircle); + } + + private int WhenRectangleInCircle(int distanceOnStaticAxis, int distanceOnAxisForBringBackOnCircle) + { + return CalculatePartCathetus(Radius, distanceOnStaticAxis, distanceOnAxisForBringBackOnCircle); + } + + private int CalculatePartCathetus(int hypotenuse, double a, int b) + { + return (int)Math.Ceiling(Math.Sqrt(Math.Abs(hypotenuse * hypotenuse - a * a))) - b; } private Point CalculateCornerNearestForCenterAfterMove(Sector s, int distanceForMoving, Rectangle r) @@ -189,20 +237,28 @@ private Point CalculateCornerNearestForCenterAfterMove(Sector s, int distanceFor private int CalculateMoveMultiplierForMoveFromCenter(bool isAxisForMoveIsX, Rectangle r) { - return isAxisForMoveIsX - ? r.Right <= Center.X ? -1 : 1 - : r.Bottom <= Center.Y - ? -1 - : 1; + if (r.Bottom < Center.Y && r.Left > Center.X) return isAxisForMoveIsX ? 1 : -1; + if (r.Bottom < Center.Y && r.Right < Center.X) return -1; + if (r.Top > Center.Y && r.Left > Center.X) return 1; + if (r.Top > Center.Y && r.Right < Center.X) return isAxisForMoveIsX ? -1 : 1; + return isAxisForMoveIsX ? r.Bottom < Center.Y ? -1 : 1 + : r.Left > Center.X ? 1 : -1; + } + + private int CalculateMoveMultiplierForMoveToCenter(bool isAxisForMoveIsX, Rectangle r) + { + return CalculateMoveMultiplierForMoveFromCenter(isAxisForMoveIsX, r) * -1; } private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Rectangle r) { - return isAxisForMoveIsX - ? r.Left > Center.X ? -1 : 1 - : r.Bottom > Center.Y - ? -1 - : 1; + if (r.Bottom < Center.Y && r.Left > Center.X) return 1; + if (r.Bottom < Center.Y && r.Right < Center.X) return isAxisForMoveIsX ? 1 : -1; + if (r.Top > Center.Y && r.Left > Center.X) return isAxisForMoveIsX ? -1 : 1; + if (r.Top > Center.Y && r.Right < Center.X) return -1; + return isAxisForMoveIsX ? r.Bottom < Center.Y ? 1 : -1 + : r.Left > Center.X ? -1 : 1; + } private int CalculateDistanceForMovingBySector(Sector s, Rectangle forInsertion, Rectangle intersected) diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index d2122036d..1a5449582 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -61,10 +61,10 @@ public Rectangle PutRectangleOnCircleWithoutIntersection(int id) { var r = storage.GetById(id); var intersected = GetRectangleIntersection(r); - while (intersected != new Rectangle()) + + while (RectangleHasIntersection(intersected)) { - var possiblePosition = - CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); + var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); r.Location = possiblePosition; intersected = GetRectangleIntersection(r); } @@ -73,6 +73,12 @@ public Rectangle PutRectangleOnCircleWithoutIntersection(int id) return r; } + private bool RectangleHasIntersection(Rectangle? intersected) + { + return intersected != default && intersected.Value != default; + } + + public Rectangle TryMoveRectangleCloserToCenter(int id) { var rectangleForMoving = storage.GetById(id); @@ -83,7 +89,7 @@ public Rectangle TryMoveRectangleCloserToCenter(int id) .Where(tuple => tuple.Nearest != null) .Select(t => ( DistanceCalculator: nearestFinder.GetMinDistanceCalculatorBy(t.Direction), t.Nearest, t.Direction)) - .Select(t => (Distance: t.DistanceCalculator((Rectangle)t.Nearest, rectangleForMoving), t.Direction)) + .Select(t => (Distance: t.DistanceCalculator(t.Nearest.Value, rectangleForMoving), t.Direction)) .ToArray(); rectangleForMoving.Location = MoveByDirections(rectangleForMoving.Location, distancesForMove); return rectangleForMoving; @@ -126,18 +132,6 @@ private void ValidateRectangleSize(Size s) .FirstOrDefault(r => forInsertion.IntersectsWith(r) && forInsertion != r); } - private Rectangle?[] GetNearestByAllDirectionsFor(Rectangle r) - { - var rectangles = storage.GetAll(); - return new[] - { - nearestFinder.FindNearestByDirection(r, Direction.Bottom, rectangles), - nearestFinder.FindNearestByDirection(r, Direction.Top, rectangles), - nearestFinder.FindNearestByDirection(r, Direction.Left, rectangles), - nearestFinder.FindNearestByDirection(r, Direction.Right, rectangles) - }; - } - private void CreateFirstLayer(Size firstRectangle) { var radius = Math.Ceiling(Math.Sqrt(firstRectangle.Width * firstRectangle.Width + @@ -157,9 +151,4 @@ private bool IsFirstRectangle() { return storage.GetAll().FirstOrDefault() == default; } - - public IEnumerable GetRectangles() - { - foreach (var rectangle in storage.GetAll()) yield return rectangle; - } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudVisualization.cs b/cs/TagsCloudVisualization/CircularCloudVisualization.cs index 3a92636e4..12ba286a9 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualization.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualization.cs @@ -6,36 +6,95 @@ using System.Drawing; using System.Drawing.Imaging; using System.IO; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; +using static TagsCloudVisualization.CircleLayer; namespace TagsCloudVisualization { public class CircularCloudVisualization { + private readonly Color BACKGROUND_COLOR = Color.White; + private readonly Color RECTANGLE_COLOR = Color.DarkBlue; + private readonly Size ImageSize; private RectangleStorage rectangleStorage; - private const string FILE_PATH = "./Images/"; - public CircularCloudVisualization(RectangleStorage rectangles) + public CircularCloudVisualization(RectangleStorage rectangles, Size size) { rectangleStorage = rectangles; + ImageSize = size; } public void CreateImage() { - var fileName = Path.Combine(Path.GetTempPath(), "testImage1010.png"); - using (var image = new Bitmap(1000, 1000)) + var filePath = Path.Combine(Path.GetTempPath(), "testImage1010.png"); + using (var image = new Bitmap(ImageSize.Width, ImageSize.Height)) { using (Graphics graphics = Graphics.FromImage(image)) { - Pen pen = new Pen(Color.Black); - graphics.DrawRectangles(pen, rectangleStorage.GetAll().ToArray()); + graphics.Clear(BACKGROUND_COLOR); + DrawGrid(graphics); + Pen pen = new Pen(RECTANGLE_COLOR); + var rectangles = rectangleStorage.GetAll(); + graphics.DrawRectangle(new Pen(Color.Brown),rectangles.First()); + graphics.DrawRectangles(pen, rectangles.Skip(1).ToArray()); } - image.Save(fileName, ImageFormat.Png); + image.Save(filePath, ImageFormat.Png); } } - private void CreateFile(string filePath) + private void DrawGrid(Graphics g, int cellsCount = 100, int cellSize = 10) { + Pen p = new Pen(Color.DarkGray); + for (int y = 0; y < cellsCount; ++y) + { + g.DrawLine(p, 0, y * cellSize, cellsCount * cellSize, y * cellSize); + } + + for (int x = 0; x < cellsCount; ++x) + { + g.DrawLine(p, x * cellSize, 0, x * cellSize, cellsCount * cellSize); + } + } + + public void CreateImageWithSaveEveryStep(CircularCloudLayouter layouter, Size[] sizes) + { + var startName = "testImageStep"; + var extension = ".png"; + using (var image = new Bitmap(ImageSize.Width, ImageSize.Height)) + { + using (Graphics graphics = Graphics.FromImage(image)) + { + graphics.Clear(BACKGROUND_COLOR); + DrawGrid(graphics); + Pen pen = new Pen(RECTANGLE_COLOR); + for (var i = 0; i < sizes.Length; i++) + { + var r = layouter.PutNextRectangle(sizes[i]); + var currentFileName = $"{startName}{i}{extension}"; + graphics.DrawRectangle(new Pen(GetColorBySector(layouter.CurrentLayer.CurrentSector)), r); + var filePath = Path.Combine(@"C:\Users\Resh\Desktop\ShporaHomeworks\TagCloud1\tdd\cs\TagsCloudVisualization\Images", currentFileName); + image.Save(filePath, ImageFormat.Png); + } + } + + } + } + + private Color GetColorBySector(CircleLayer.Sector s) + { + switch (s) + { + case Sector.Top_Right: + return Color.Chartreuse; + case Sector.Bottom_Right: + return Color.Brown; + case Sector.Bottom_Left: + return Color.DeepPink; + default: + return Color.DodgerBlue; + } } } } diff --git a/cs/TagsCloudVisualization/README.md b/cs/TagsCloudVisualization/README.md new file mode 100644 index 000000000..958981835 --- /dev/null +++ b/cs/TagsCloudVisualization/README.md @@ -0,0 +1,3 @@ +![Alt text](./Images/FIRSTa.png?raw=true "First") +![Alt text](./Images/sECOND.png?raw=true "Second") +![Alt text](./Images/third.png?raw=true "Third") diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index 346c906ef..53fdac821 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -1,207 +1,215 @@ using System.Collections.Generic; -using FluentAssertions; -using NUnit.Framework; using System.Drawing; using System.Linq; +using FluentAssertions; +using NUnit.Framework; using static TagsCloudVisualization.CircleLayer; -namespace TagsCloudVisualization.Tests +namespace TagsCloudVisualization.Tests; + +public class CircleLayerTests { - public class CircleLayerTests + private CircleLayer currentLayer; + private Size defaultRectangleSize; + private RectangleStorage storage; + + public static IEnumerable SimpleIntersectionInSector { - private CircleLayer currentLayer; - private Size defaultRectangleSize; - private RectangleStorage storage; - [SetUp] - public void SetUp() - { - var startRadius = 5; - var center = new Point(5, 5); - storage = new RectangleStorage(); - currentLayer = new CircleLayer(center, startRadius, storage); - defaultRectangleSize = new Size(3, 4); + get + { + yield return new TestCaseData( + new Rectangle(new Point(5, -1), new Size(5, 1)), + new Rectangle(new Point(8, -6), new Size(8, 7)), + new Point(9, 1), 0).SetName("WhenFoundIntersectionInTopRightSector"); + yield return new TestCaseData( + new Rectangle(new Point(8, 9), new Size(5, 1)), + new Rectangle(new Point(10, 5), new Size(8, 7)), + new Point(5, 10), 1).SetName("WhenFoundIntersectionInBottomRightSector"); + yield return new TestCaseData( + new Rectangle(new Point(-3, 9), new Size(5, 3)), + new Rectangle(new Point(-7, 8), new Size(8, 7)), + new Point(-1, 5), 2).SetName("WhenFoundIntersectionInBottomLeftSector"); + yield return new TestCaseData( + new Rectangle(new Point(-3, -2), new Size(4, 3)), + new Rectangle(new Point(-7, 1), new Size(8, 7)), + new Point(1, -1), 3).SetName("WhenFoundIntersectionInTopLeftSector"); } + } - [Test] - public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() - { - var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); - - possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(Sector.Top_Right, defaultRectangleSize)); + public static IEnumerable GetDataForIntersectionTests + { + get + { + yield return new TestCaseData(new Size[] + { new(1, 1), new(5, 8), new(4, 4), new(4, 4), new(4, 4) }, + new Rectangle(new Point(11, 5), new Size(6, 6)), + new Rectangle(new Point(10, 5), new Size(5, 8)), + new Point(4, 12)).SetName("ChangeCornerPositionForSector_WhenMoveRectangleClockwise"); + yield return new TestCaseData(new Size[] + { new(1, 1), new(1, 8), new(50, 50), new(1, 1), new(1, 1), new(1, 1) }, + new Rectangle(new Point(4, 10), new Size(1, 1)), + new Rectangle(new Point(-50, 10), new Size(50, 50)), + new Point(8, 11)).SetName("GetCorrectPosition_WhenRectanglesSidesMatch"); + yield return new TestCaseData(new Size[] + { new(6, 3), new(4, 2), new(1, 1), new(4, 4) }, + new Rectangle(new Point(5, -7), new Size(6, 5)), + new Rectangle(new Point(5, -3), new Size(6, 3)), + new Point(12, 0)).SetName("NotChangeSector_WhenRectangleForIntersectionBottomEqualCenterY_AfterMove"); ; } + } - [TestCase(1, Sector.Bottom_Right)] - [TestCase(2, Sector.Bottom_Left)] - [TestCase(3, Sector.Top_Left)] - public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int insertionsCount, Sector expected) - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, insertionsCount); + [SetUp] + public void SetUp() + { + var startRadius = 5; + var center = new Point(5, 5); + storage = new RectangleStorage(); + currentLayer = new CircleLayer(center, startRadius, storage); + defaultRectangleSize = new Size(3, 4); + } - var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); + [Test] + public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() + { + var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); - possibleRectangleLocation.Should().Be(GetCorrectRectangleLocationByExpectedSector(expected, defaultRectangleSize)); - } - + possibleRectangleLocation.Should() + .Be(GetCorrectRectangleLocationByExpectedSector(Sector.Top_Right, defaultRectangleSize)); + } - [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangles() - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); - var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); - var insertedRectangleId = storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); + [TestCase(1, Sector.Bottom_Right)] + [TestCase(2, Sector.Bottom_Left)] + [TestCase(3, Sector.Top_Left)] + [TestCase(4, Sector.Top_Right)] + [TestCase(0, Sector.Top_Right)] + public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int insertionsCount, Sector expected) + { + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, insertionsCount); - currentLayer.OnSuccessInsertRectangle(insertedRectangleId); + var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); - currentLayer.Radius.Should().Be(9); - } + possibleRectangleLocation.Should() + .Be(GetCorrectRectangleLocationByExpectedSector(expected, defaultRectangleSize)); + } - private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int additionsCount) - { - layer = GetLayerAfterFewInsertionsRectangle(layer, additionsCount, - new Size[additionsCount].Select(x => defaultRectangleSize).ToArray()); - return layer; - } - private Sector GetSectorByInsertionsCount(int count) - { - return (Sector)((count - 1) % 4); - } + [Test] + public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangles() + { + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); + var nextRectangleLocation = + GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); + var insertedRectangleId = storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); - private Point GetCorrectRectangleLocationByExpectedSector(Sector s, Size size) - { - switch (s) - { - case Sector.Top_Right: - return new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - size.Height); - case Sector.Bottom_Right: - return new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y); - case Sector.Bottom_Left: - return new Point(currentLayer.Center.X - size.Width, currentLayer.Center.Y + currentLayer.Radius); - default: - return new Point(currentLayer.Center.X - currentLayer.Radius - size.Width, - currentLayer.Center.Y - size.Height); - } - } + currentLayer.OnSuccessInsertRectangle(insertedRectangleId); - [Test] - public void CircleLayer_RectangleWithNewPositionAfterIntersection_ShouldNotIntersectSameRectangle() - { - var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); - var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); + currentLayer.Radius.Should().Be(9); + } + + private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int additionsCount) + { + layer = GetLayerAfterFewInsertionsRectangle(layer, additionsCount, + new Size[additionsCount].Select(x => defaultRectangleSize).ToArray()); + return layer; + } - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + private Sector GetSectorByInsertionsCount(int count) + { + return (Sector)((count - 1) % 4); + } - new Rectangle(newPosition, rectangleForInsertion.Size).IntersectsWith(intersectedRectangle).Should() - .BeFalse(); + private Point GetCorrectRectangleLocationByExpectedSector(Sector s, Size size) + { + switch (s) + { + case Sector.Top_Right: + return new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - size.Height); + case Sector.Bottom_Right: + return new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y); + case Sector.Bottom_Left: + return new Point(currentLayer.Center.X - size.Width, currentLayer.Center.Y + currentLayer.Radius); + default: + return new Point(currentLayer.Center.X - currentLayer.Radius - size.Width, + currentLayer.Center.Y - size.Height); } + } - [Test] - public void GetPositionWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_WhenFoundIntersectionInTopRightSector() - { - var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); - var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); + [Test] + public void CircleLayer_RectangleWithNewPositionAfterIntersection_ShouldNotIntersectSameRectangle() + { + var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); + var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); - var bottomLeftCorner = new Point(newPosition.X, newPosition.Y + intersectedRectangle.Height); + var newPosition = + currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); - CurrentLayerContainsPoint(bottomLeftCorner).Should().BeTrue(); - } + new Rectangle(newPosition, rectangleForInsertion.Size).IntersectsWith(intersectedRectangle).Should() + .BeFalse(); + } - public static IEnumerable SimpleIntersectionInSector - { - get - { - yield return new TestCaseData( - new Rectangle(new Point(5, -1), new Size(5, 1)), - new Rectangle(new Point(8, -6), new Size(8, 7)), - new Point(9, 1), 0).SetName("WhenFoundIntersectionInTopRightSector"); - yield return new TestCaseData( - new Rectangle(new Point(8, 9), new Size(5, 1)), - new Rectangle(new Point(10, 5), new Size(8, 7)), - new Point(5, 10), 1).SetName("WhenFoundIntersectionInBottomRightSector"); - yield return new TestCaseData( - new Rectangle(new Point(-3, 9), new Size(5, 3)), - new Rectangle(new Point(-7, 8), new Size(8, 7)), - new Point(-5, 5), 2).SetName("WhenFoundIntersectionInBottomLeftSector"); - yield return new TestCaseData( - new Rectangle(new(-3, -2), new(4, 3)), - new Rectangle(new(-7, 1), new(8, 7)), - new Point(1, -3), 3).SetName("WhenFoundIntersectionInTopLeftSector"); - } - } + [Test] + public void + GetPositionWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_WhenFoundIntersectionInTopRightSector() + { + var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); + var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); - [TestCaseSource("SimpleIntersectionInSector")] - public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition(Rectangle forInsertion, Rectangle intersected, Point expected, int additionsCount) - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, additionsCount); + var newPosition = + currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + var bottomLeftCorner = new Point(newPosition.X, newPosition.Y + intersectedRectangle.Height); - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); + CurrentLayerContainsPoint(bottomLeftCorner).Should().BeTrue(); + } - newPosition.Should().Be(expected); - } + [TestCaseSource(nameof(SimpleIntersectionInSector))] + public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition(Rectangle forInsertion, + Rectangle intersected, Point expected, int additionsCount) + { + currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, additionsCount); - private bool CurrentLayerContainsPoint(Point p) - { - return (p.X - currentLayer.Center.X) * (p.X - currentLayer.Center.X) + - (p.Y - currentLayer.Center.Y) * (p.Y - currentLayer.Center.Y) == currentLayer.Radius * currentLayer.Radius; - } + var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() - { - var sizes = new Size[] - { - new (8,1), new(7,8), new (4,4), new (4,4), new(4,4) - }; - var nextLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); + newPosition.Should().Be(expected); + } - nextLayer.Radius.Should().Be(10); - } + private bool CurrentLayerContainsPoint(Point p) + { + return (p.X - currentLayer.Center.X) * (p.X - currentLayer.Center.X) + + (p.Y - currentLayer.Center.Y) * (p.Y - currentLayer.Center.Y) == currentLayer.Radius * currentLayer.Radius; + } - public static IEnumerable GetDataForIntersectionTests + [Test] + public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() + { + var sizes = new Size[] { - get - { - yield return new TestCaseData(new Size[] - { new(1, 1), new(5, 8), new(4, 4), new(4, 4), new(4, 4) }, - new Rectangle(new(11, 5), new(6, 6)), - new Rectangle(new(10, 5), new(5, 8)), - new Point(-1, 12)).SetName("ChangeCornerPositionForSector_WhenMoveRectangleClockwise"); - yield return new TestCaseData(new Size[] - { new (1,1), new(1,8), new (4,2), new (4, 9), - new(1,1), new(1,1), new(1,1)}, - new Rectangle(new(-10, 2), new(8, 3)), - new Rectangle(new(-4, -4), new (4, 9)), - new Point(5, -7)).SetName("CreateNewCircle_IfNeedMoveRectangleFromLastSector"); - yield return new TestCaseData(new Size[] - { new (1,1), new(1,8), new (50, 50), new(1,1), new(1,1), new(1,1)}, - new Rectangle(new(4, 10), new(1, 1)), - new Rectangle(new(-50, 10), new(50, 50)), - new Point(-2, 9)).SetName("GetCorrectPosition_WhenRectanglesSidesMatch"); - - } - } + new(8, 1), new(7, 8), new(4, 4), new(4, 4), new(4, 4) + }; + var nextLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); - [TestCaseSource("GetDataForIntersectionTests")] - public void GetPositionWithoutIntersection_Should(Size[] sizes, Rectangle forInsertion, Rectangle intersected, Point expected) - { - var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); + nextLayer.Radius.Should().Be(10); + } - var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); + [TestCaseSource(nameof(GetDataForIntersectionTests))] + public void GetPositionWithoutIntersection_Should(Size[] sizes, Rectangle forInsertion, Rectangle intersected, + Point expected) + { + var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); - newPosition.Should().Be(expected); - } - - private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int insertionsCount, Size[] sizes) + var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); + + newPosition.Should().Be(expected); + } + + private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int insertionsCount, Size[] sizes) + { + for (var i = 1; i <= insertionsCount; i++) { - for (var i = 1; i <= insertionsCount; i++) - { - var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); - var rectangleForInsert = new Rectangle(location, sizes[i - 1]); - layer.OnSuccessInsertRectangle(storage.Add(rectangleForInsert)); - } - return layer; + var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); + var rectangleForInsert = new Rectangle(location, sizes[i - 1]); + layer.OnSuccessInsertRectangle(storage.Add(rectangleForInsert)); } + return layer; } -} +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index e8307e141..5deee02fc 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -7,7 +7,6 @@ namespace TagsCloudVisualization.Tests { public class CircularCloudLayouterTests { - private CircularCloudLayouter layouter; private Point defaultCenter; @@ -33,13 +32,6 @@ public void Insert_ShouldThrow(int width, int height) act.Should().Throw(); } - [Test] - public void GetRectangles_ShouldBeEmpty_BeforePutAnyRectangles() - { - layouter.GetRectangles() - .Should().BeEmpty(); - } - [Test] public void PutNextRectangle_ShouldAddRectangleToCenter_WhenRectangleFirst() { @@ -57,6 +49,8 @@ public void PutNextRectangle_ShouldCreateFirstCircleLayer_AfterPutFirstRectangle { var firstRectangleSize = new Size(6, 4); + layouter.CurrentLayer.Should().BeNull(); + layouter.PutNextRectangle(firstRectangleSize); layouter.CurrentLayer.Should().NotBeNull(); @@ -75,17 +69,6 @@ public void PutNextRectangle_ShouldCreateFirstCircleLayer_WithRadiusEqualHalfDia layouter.CurrentLayer.Radius.Should().Be(expected); } - [Test] - public void PutNextRectangle_ShouldAddRectangleToLayouter_AfterPut() - { - var firstRectangleSize = new Size(4, 4); - - layouter.PutNextRectangle(firstRectangleSize); - - layouter.GetRectangles() - .Should().NotBeEmpty().And.HaveCount(1); - } - [Test] public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoosePositionForRectangle() { @@ -104,7 +87,7 @@ public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoo } [Test] - public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection_WhenNeedOneMoveForDeleteIntersection() + public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection() { var firstRectangleSize = new Size(6, 4); var expected = new Point(14, 1); diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs new file mode 100644 index 000000000..1930633a2 --- /dev/null +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs @@ -0,0 +1,40 @@ +using System; +using System.Drawing; +using System.Linq; +using NUnit.Framework; + +namespace TagsCloudVisualization.Tests; + +public class CircularCloudLayouterVisualizationTests +{ + private readonly Size ImageSize = new(1000, 1000); + + [Test] + public void GenerateImage() + { + var center = new Point(ImageSize.Width / 2, ImageSize.Height / 2); + var visualizator = new CircularCloudVisualization(GenerateRectangles(center), ImageSize); + visualizator.CreateImage(); + } + + private RectangleStorage GenerateRectangles(Point center) + { + var rnd = new Random(); + var storage = new RectangleStorage(); + var layouter = new CircularCloudLayouter(center, storage); + for (var i = 0; i < 41; i++) layouter.PutNextRectangle(new Size(rnd.Next(50, 100), rnd.Next(50, 100))); + + return storage; + } + + [Test] + public void GenerateImageWithSaveEveryStep() + { + var rnd = new Random(); + var center = new Point(ImageSize.Width / 2, ImageSize.Height / 2); + var visualizator = new CircularCloudVisualization(new RectangleStorage(), ImageSize); + var layouter = new CircularCloudLayouter(center, new RectangleStorage()); + visualizator.CreateImageWithSaveEveryStep(layouter, + new Size[41].Select(x => new Size(15, 100)).ToArray()); + } +} \ No newline at end of file From badf496bc6d44f7565d6d8af7deb599e455b66f0 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sun, 17 Nov 2024 19:31:05 +0500 Subject: [PATCH 18/33] Add results for random generated data --- cs/TagsCloudVisualization/Images/FIRSTa.png | Bin 0 -> 31431 bytes cs/TagsCloudVisualization/Images/sECOND.png | Bin 0 -> 38559 bytes cs/TagsCloudVisualization/Images/third.png | Bin 0 -> 46775 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 cs/TagsCloudVisualization/Images/FIRSTa.png create mode 100644 cs/TagsCloudVisualization/Images/sECOND.png create mode 100644 cs/TagsCloudVisualization/Images/third.png diff --git a/cs/TagsCloudVisualization/Images/FIRSTa.png b/cs/TagsCloudVisualization/Images/FIRSTa.png new file mode 100644 index 0000000000000000000000000000000000000000..774375a9637076c23f8ba0348f64167e133bc5c0 GIT binary patch literal 31431 zcmeHQ4R}-Ky+=2;>)7yK_Xu*O_1@d(UbpqbVdtQPq_^sblR-BXYH0&gqzA>eLfRhF z(D8`8qk( z)(Pr_yF5=@3QtbX`~KhG|M&m>KTi1FPuB^*^^Jf1#=Lp+zV+jW9(-ipysr#LzW?cK z;9u6ZzJCe)ag+EF;r;X4?Mp|%U%mNb+!r)@ALh4+CEy=>NiRfc5RFh;Q`N0ivPudRyP;W&pbLI1skFr9MIl#6oY+l|CgsVK@(?_Z)2|J*n#C3LwN)(w=3 z&53}Ni>6#OiRl}Oqf$aQC3KU@@J3SlsVJIcoV9(aD4MG1eqQCQIc3h(-XP_oDHr9m zUTz?cN|lR}qTsshid{8FrG#!u=q53p61vx6O+V$LDHpv#T$CILb%cFktjuo;5~g!( zXQ30Sj@1G+S*LuIoDb_?h;+bhn-%Qb203sPFU@CUT?JuvQXX<@M#k+>0e)z^;q~|z zb&hRzkpsnN>5=C4_}753Dj~@`jWvrVrR+5Ze-0ZVJ?-FEb>f=lcJmr`mgS4TRXhc- zK3N)`?i24vqC-1VK6dBOB_s)E#P93d!*IsNksO+hEvc=)KF|3jQLxzkv+wxNWKa-B4qgC-zTWk|FI^O6@Do zXVdwJy9pMpVx-Wt3}uI)cuvkL$gZEa(@rDNiYoPQV<9i^xGOv^f!x)X$7yAN;Xjb5 z4||^F*wD!A(z`1ul|ldy-3-$xb$Vx5LntMECp9=cMA7U_7iW&kvzH_n4Aol9h#=@{ zTHwO+Eg9Ajs)C0^i%}WgWWjS;ud)N5h)sEQ3Ju144vdBTWMEjlUsGn^n#5 z*@_4lnJ|8>=lseANxNW+Z9W-7*G=lJ#TvVjAwDHWIQz@n-YbE_Qw>>3YbwaVIFr^B z^*#Biyof;WG^kMUsM9wG-ivyvj!pAu&r(+nOdCO&cyd;_7O;0NPJAvnrx zJp1CZQ!a7ud{4W^T{*-DhEYb2VOzRB+-4eU3$Fu%X9qI7mnT){_6Blsg`II+MPVeHymoPjYoWqwio5$s3@+edqtw5I-S+Tsl@ zVmXq-t6I!<(tmm%s+72Q_8#&2?Zy0BOGd77a2oEy?`N?qN`gXrQ2#-?enOv%mPE|p z&TA7=@Ka?vSJ+OM#Jze3)jDf(7dtbG0MaE95OKDT2V@HpfxiOtp7rf49D<7HryY-xzUU_iMbMYXdA%^hl|lmVb%g zf;mBMFIax+4sT0w;~#=_8{`*5D*6a|$w4>-%PmlZ6fDUTcUBZXvU<}9*r$`X{qjqU zN3x$B7MEay{MEGC8d^Pzzi1Ddze7b$!`t`+`A!R;I+rG`Xfv9+hr29Nawl0hG)l9$ zH?noR&T?JW*D^XLT}^~X*?HwJA-`!2JgGlQPNcUo(|$dU^2P3nT<{ifg1?hNuH5O# zUZ1-5i?UU$9x{}t$@!X`uTk^7CP?~U9fA(OUQ~^%TgEEwK;(!{u|xr2^Ub+n6Y_{H zYGlYX2+0^1l>iXex11%16OcOwyC*aX+l9L+BTiJkj_``RxZdp5<|C7?PU)mfsB&<9f)=AKx+xoYH)ULF za73E323h0C@nAW`pU|Me z@s8#qMBPR*FNtwa<(~l($C6{xTI~28drYZgOlArxTm#X~O`Sf2L1HBfRj&2PpHCyB znw7bVsqspcxLeXm>qon+`uwJqR*>=p#*#8S&9L>~mq`3TifUO$Y;#{cJ^r`iYMQ~k zl>}+P#vjlL5;#n+xYsy)lxGv6ninc6n-Gv|EIN}QAoD1{!A3R+bPkbwOBHT(RVGED z=H**s@&$XvSu&)OT3UZ3PLN+mts+BXY(>kf_tSS^bPj#zEb0{=_BZN5*0in1l_1`K z-0c}U=3{`5pfkspIxP4TGO zh#uQK!p|BGzmlk9{LsiEYh++E5Pi~)N&R>nKlh0^*<_Wc1E|`rqF||?71Bx%D~k>O zK9IHJnbMpRD-$YfFpUxuiKsdAWtd@)`5ZEy{XbBn^<+P}Pq6)t^jfH` zc*-vhtc$CAdrhox<9%9_CGb(O%FI(s)kSrbaA-NW2%UBiS4hh};K0J-x?jbM46kpO zW7+lSg?;WVW^vpo!BTCP1$fx#&%*tjfuNJN~{NbraGd_}B_3-z!C3 zJF48Y+B~WkdNNQQ?Wj9hdtV6FQZ%2r@!lR1>ek z&P;2H`1BjnOM0Z2u&u0oEsiHn;=`-96u;Vau&107SGhBD1c;h$!cSg!mbTG+ad(dd zSoHAUGAFsb{(U&t;E^`ik&`DO$}8|1A8+xf0$mWfVkO0(n|!WT|6YPDR_BhH_QhR; z12^jZP}$yK#cG`y?U6(dRqBRhi|aL5E>7FhgoHHQ-=;#|7fiVLV`7k##!H5sns}#i z>Z!)TSEfV7-qTXDhR)T%AXWE%g9;twO*^94`$iOd-lW8)-p{tayVqjE{Q@Cz)U(-L zId(U8T^xW_8Aij?c%BuMvGVQ>P5~fgsJ$6ijU_YeKK^zG`PXzr=9Gr_q~}q4Ekvtd zM;)s@X*nNHf;nQ_{U-9%D|z>F0d4kX4R<$^f5+=Kl^1MwdzWi`!(zn|BJGpCnB2R2 z=rkAmG=Sgy(CJ|lm5(^YiUFa@2+hGB=11v+KN>YI!6N5xzHmW9ODH8&knaaKp5?k& zvFCu=c6`n$JfNPqT1)4xtSk>t$V&1@WI;sp z@?FT}Co@F)h)nZFozCO8o8Jxj$Ey=uQz)-oG`U3~_+)a(01UN{(qe8s{1&b(q8}IoWyznY>=8qGY*2$wm%}djlV3_=nx%jMtAN*uWP*hopAL|0y8{z&?hWHcY zLL9OzUl2SdRL{l++j^<32w+N0Dp{^vg&)$l_UFU?d z371*i@w_6ps@z#_xg}f?(Voh{!HuPt(=}n$n28G4oJ6u3i77``Sy%VYq4jEOthB`~ zohhou!Ygp^O9ZJzP9iO@YY0lfJV=HR+7o#F|u9x4K3$puI36VLG3~LX; zC%&4+T}koT@D>ow!k*vL zk1sV_j}Yx>Qy|^i1PYHabu^m?Xf+<&~`{Fl6PEfcH-vLAn-u}GeWRKBSO9oq-sADa8UeoSax8hK&(RKi_2lHQr z(Dg*~cBuHo7_KN|#OM@;%4(E!5k85TS$>5r)?pL1$9cMP4 zRp$xQ1Er&2yZ)C@2|AE=)hAV!HH_9N`sHZ#KNij|lGsEOCT;vt-4EIzncbSEnDSo} zYW5gmptu&$+t(~-DE+nh+gk_>^y_mLZ54-W<^V6-J&6!r`$}3#km~--sdW&3%+9o- zAMR8CO^zeo%77@#)sc;jTZn6OQ(!(IcHapNoI5j(v|k&+UH8j~gqk^c-WvWN!9;@R zchIDbdh$bA`AAuq-r5b3{+92S={W1aV$*PLApZrHCFg>agwk~eXc~B&Pjav=gw@}wjsulE;A3L7;kMZ zG0gD!oj~=)v)+O6Sf@se7B~JPNaObPM3>hU%0+hLBjdbYiQJcGdWR?n{Tg2~D^OHf zZ+p(M$M(FU*1h@6=s5EJ5=sEsuJAtCXvjsUJrXBvs`Zy%4k#0uImaS*S2+gd5IP-hqk5n>qIT&v`e#Kte*ru9c+uAiLk#aWb@kNojGoV zQJ*bee8`wjkH1r^H3p?Z`aq})1ga(|-)l;AZMne^tmotiSdZ~fDo?u%@8OqOC=gSJ z`q5QXqBqQq+qYmfI}CvSbB^3V%a0xMmNNVC6%Na0J_t+wYDq6os>aKO9g- zrY1DWLsp;7u0KCYqS&-erNJB&&(J+iNA$ufriow=mZM1ouQ+qo!E&;Hx9?fl$25@3 z7->Xgp|T+flzwllVy%hVSZghK_Q@ye75tdF-A*!dz$jBPi_dye5=Ov@;r;Q+cLFB@FD#KXq?-Y zvMCgBl&rG0!sp3e2j)-H*;UJf0jkW@efN}r?VxfRV0VLJ{g(WQc#EG+b32EA)Mr8R z5jp|%RqHIpwQJZ(k`lkb8&_b*e~mr8p<^PD7I2s2JI2N(t?F>aM^7Y?rrMAH+F=P- zm8t0puM;Ki$=_^Q1Ds&!ShA3AthU~!CHjdpNoU1mpoL!<2=MHqIcjf$vN?!DbQQ+Z zeUKWysg?;;}?FIRXDJyi8<#!6q*MtwX%{=a;k&IwgCp`Ff_$wOK1?zpH6NN9By@=i7l)UP)xrf<4a(c8MfRT@ zZ=jBuAFZw?K*`um6*+-Jnyf4zm9Ok4&NLg{V?Fwd z$Wm-%9W2{#`AVd4kVL(?M30X5*6mTvz#heH|3|EUQ$HmUXcc1|(x z`q(N53TfF{sDL`%Pl^_4cwIN#^0ODz2b|x9QpaKA|M zE=qON6HzKUS$&6gME-phEMNUz@_3L$q!E@nCSMM zAt+9N)A$DnD~uPdlMjw`0y4k(^25|I-B-`ZNVi5C_Pj@9UNiCnPN_ymmFjAX*|PuW z9GAk6|F6IC<$e^4-Z;>ObiveL8SGJ!*{dOSG=1E6gh^Dnlk8tpO)p&Fa^Lm?MvtHa z)4EI?MrkrlWUaOYU@}r9iPqZ?2k`_NXv@`Hgw+xd~k zmV7z;iBCpD$)ev*JWMUCec|NCH&r1acxRS$T*+G;w;>yrMc9jrep^(lF#qQ^znE5a zhANA?C>4eAreri58u@LU*8}Fx1A~bN*(lCYHBm+fTvN*q8FR#AO*N>r5TM0U$%c52 zfNBToKimQ$GW$3aSEo7v<*UI*&6(riX>R9)9%CdFh(S4Id3<;0xstdDbi(A3ImJXA zGWefPn)iP{YTn34hK(dcpaVPp_C8>r9$wbRK$a9Tn&jBp=e*KnxiS(CQ4oUMY(tQf zCx|e!b=UO%+~c82I50J1aBOWK>1O9h;||jd!UGUM>^X2mUGyAm!=Q-C-iM>&MBvl= z!c9Fu9{VRaz>&Zd4B0vS-8XHbq1nS!!{`7>t zB<6B#hZ5PqPOe6eG`AHLuURB<#t)-Nf>r}TnLN|vpqeLYsXg{xvY*U0R~S8@B>+zc zSOjy1yrT%t1;@FJ#S&*=Fp8zJh<5x0(={Tdi!D2RL@7ORkZSLmwJU6B+gb)lHsYtz^g*mT>2EdXQe_BtjH1!f=2vp0T7>vpXllqM(Fha!`2iv)}0f- z%bob1MVA2?2E_+Jd_il*A{l?Hz0E($yqFN7iK;APH@s>-XS$%IRut7WzyWL(Ktth7 zH2AmavhGHraudHSD}l-0laqUZQpC@X&ic-5<63BJ-8~vn!QM1VS4~s|mO}aTF!eM* zX9M{&V*MN-0>l6JS9jANxC0G9{)lyT4H`8vNuMx8DiLpZ51WItj#l)L+g>q5G<01z zQ;z9N1l|28KZtCM=Ed(z=D?nR8+_uY*k!&J?z$M#lCEs^#c?7%#6KFXV~m=f>6q2^ zkQ2O(Z*WY~i0<%<71OE>(X6_9(;SfH52R&32G=P(O6qybQ66k1Rxo;@ys#~rEU)Ys zXrq=VQe;k4OZPM^Ivf$Tb{OOmO7J*EOUTt~Ipm0x6oks6nSRb9T~Q-k;7G%_AOsJn zJUd_qyNsOk*rH<<2U37Y0U{EV!ILg2Kt#(nQTppx(N+{_QLJi>(h4?R;V+Gp+vcPd zpeVv+1>x>p?eWn&jw(5SA0`J8D(kz4N6*r8|ZShxQ__K|A1Yn}hqoydhmIfVW6aeKKVjUS}$)u9x%g z#YMA*>d3ydS+8r(SwG_l%=qw`TF{p)1#)JwBNK30!;CCgnydwK9<^KBHx1N2 z#f*rv+1eeLG-W5taxAbalYHKXSl%I?0VP6LHLHyxqhv?%NwCJ=tuzROLAOvAboB%@ zc%tw=<3p&gX&s3O8kx|u@9Ludu15H5H;+F@sQ%&D1VZR9G!$9r%)0gnAVoMsGG&|jS6dAZ0-xX%@HiWhMkv+l!5>f=+qY^ur8l`#?(usLesSiE+8 zzDy*eR&_il1iAMq+nsEGB=TNeoQIw{gC!A4EosDy4itr3irAaM6stzre~bLWX|}Q@ zfT-+9mh;%8Jo*bah;Xmq6vsZ}4dS)c_-)SoAmyT5$faDA^Qa2fsjo+pPPu5JP7Y4$dOV=3<)~B?{bFR;oI&nt z59q4Hbjn3jE}F#jjl@wYp_>xA9A$U|Dg9IwO)}24DH=iH*$^D&ka*~6_ z*4kOynSRm~E6F*(=l49{=llHmJ?H=Za$C-~ANbw_ixw^V_RpVq{Fz0I?w>&Z{nj_Z z|JmAf@e26QeavTaezr)eOPmCM_&55dt(z7tI#siD{`tk=&;R3vCvusK7JcUo^6!1! zrEmXk(W1Ja{QU7vzpf~-4n55n{l&Y_8IrbdcOGiWw*An4f62GHH{1WuuKK_IZEojJ z=YMVe_xe|@&-^0@3j^S#Us+hSt_yjyi)t48la$AcZ+yASm(Sfty|DiJSB6r4EN8G*EuSOCg@kZT zek_#`6%ymM#cE<$NVrzY1Tiioc$lJ1r9`M9;LK7kG5E|-`kp<1XkAw)qi(Y*P+6Mf zXQL79c;aX(9$pIen}|yx1fE~9rG$|r_k05(&?SV>efzFkO4jl+5U(*;I$QawE+w3(iJ5%_C}UiIj^o~4RqROJxW_KV(ul2_f+$U zyomZ%X!C~UO7&uQyk1RZT87;kaddq#4Xin6qKVc(71<2^h|;y)q~K+aCc26FY}GHY z1UHZ3rmP?@^=gS~UDk)@tdX5CiT6;Kdf7x8B*((7Ha2VdoU6*R^SqYGg&Ne@y{en# z#}xE@{l0*RsO-}iO}A1-i`C>&UY_QYNhN`nF@j69moJz;mBEmQbim z>v@AB6gWBE9i{rr%fmt^pM=saLx^qJr|LG_lPGESRzrrHB;~2b2ixp?wbrY#_7hV2 zc(LG)+$kO))FTL^KKoWp@LO?%w7g zrNi+?c?#DFQzYz0UwPjush?s_MN6l0G8TEbq>S7-+n!p7NvURLk17?#464th_chxM zNklXXrPc2S8r_;28EFOQ`|R{9DYPXEj0g7>?R70O>0VQwf^BO8Xs?s&PQmq}#s2Jw zp1AZF$wC*IF$MfiN#rk&7t7INEF#fdM4}Xt?;PZo39M)>x;HZ{PmAIhjXKt;VAw}; zsP1wRT~r8>RIT)illbgw7~Vg4ZOPIratLuJypsai{}jb+H>?a>l9ft zT*<0+6-C z{Z5aLTaA0^1!O|rSXcw71cCDy4FrhG)t$=G1LhLRP2lMw6kJo_kDH2>#LzC(M1aWy zy8%M-sEtQ((iuHzh~pzQ3)w%_0#haS7Wml^H);#- zjj~zzeVPh@TGo_OVac>4^29?Wh%j+2mj?b^X+`|;+rXPR zTA0(EB877qR93x4*cwG}AxA%Uf3e>)0Plb`vkreVErTL%)}GK5fn?SEixFqPWRRDC z6Sejf8wZ3*Ef9N<*%H!-;jk7O2eSVvGXi)?W*H4EF{_#kO}C3L)$2};$yk&i=iMxG zE_4dl{s?iT1b?b22cD6C5#Ty!FwK=IH*jB~r+3$B2dRGeeQzb5+>Q5eMEDTZf4^rK zA$3m!1`OxIA3J&(mU!`GVqRb;+bLOMafqCWIAM&~8QU3mr8uh1-g}EPcJE_UrNJr5 z&su=^u39&~Hk7(iH|J%&YYI8wJFBZWT&lcFX4@9RxN(q_ zc_FQRzRfn39XAMPSkeYVs1-p<+f?$0dWO-|QKPh3)1mZkF}*wwy80CS@vL6i9L#+7 zt{URkV{r>0n={ZMo39K`>2MYE7w`(<^B6A+?#z1hsJpjrmDzl@Su14_z{{ms z%g}L6(Gc85qZEA7-l;O=JzlM})tb$i&jj{oa-Z$Xg;ddi!f!dZbfk{W<{kVH82qeH zg~Oe}r#YQw;pn5OgOJMkvtic8DE)5Ql#(J4DsVXBnOCIJ$@XZ_;+Cym`$C?{XkGII z;MULC?YPo0?7qw6H$n0MYiu#2N2OA4zVf!Ez~eXK0A}UWMjD-+(ZI;4m3IE4gu_-S zUQT2gS8KIlHC5XWHps>7XxQ)5*RD9d#%^;hKMd&2n4675p2E%F!yI%-qhWJUIr|O8 zn9*qZ!QP83*?fS3dzk2(gnEmbzS%#Y3XEj33!Ee1Bi>=P>3USK(R!A2ogISqFzalt zk(}6Geg*du1)R@oaA-tvDmUxVK}iFwYZm)z%`}=y-*7!!@E3djaeAXKjiLLhFoE6a#g^|1x5>z+H%Lp(joaOTD zXD`>oAMYKLihX48a}`XDO5%b_{&Sh=eiG1c{=Y3&^@@XZabZubifeOst~f{%vrk}lRt-jj=Koh@74P*Bg z`a3wb&Z!QX$4{Qxtyy9s0bdm;xV96dfE_Ea5`$YdcK_&Q)F|0J+bZ0p-*JZLS|m^U^BjTP z=J7u|2A(##8d9JX#QBB2wzf~6ei$$mT)3bjap9&27 zE?KsxzJVm$P|1RfZJV6se7_$-MZ#SfHOcT@Q*X}B=yw4bIt!DJBx z*@pIqRmJxKkq72?II1mLUoVg3^ZVO8=$Z?wI3~OmU=m1s>`VnGB<;a^aFctxe5)z8 zyCm^9ZKWQ$_9t>}GRa8uY<25(d077KrknYUJC!RLEK1MmIFYAIzu@l+IG+(*@V7aZ zW2Fj$UiDvgN3`XnFG0P%m?UZ%xv+*VnhX>Lx&K!?85rgq#QFy!@;3f{h8I!Ci~d8V z6K(anr)`sUa$T8FE>yp2E)!ZiF(V>uDC6(f)FGV*+cXu}V!tr_6#PSXSx+uqsU6Z5 zoGVpo%T1_K6E!Av=RCpkSi&avA4-lhU*##sT1ZCoG;Qrzs*#paiWPvcPS7L$BXzH{ z`!b|K8_B*E{F1x!N^kj~c5eDLPcgi{>j^4E8n?+j!Qa_1 znK&k9q*e)TY^;IlaRf;-1S7MmFxISn`CCxEW8&*gS@oqrNS50hhLR_{W{s={Anu zi z+J4{PH(W?NM>g&qY$~w3Mg$J-Z5c!jS8ZVW`Yg9)z2qq;1G1*dZcA;QZ|hZLg}Kvo zonaC7Ct-~MU-!_8zba#kj=s}Yv^TeK3p4K}(|Y^qfC}nNWeMeG$6@A`+?tBk+e4!} zVE~vjwHg5}nQW17>|vUi12$JyD-PEvMd@%85&KgWbQq-N$Tt&VmK1Fr@v? z0v>QnS~c1q*9B$D;>2cEze9jCkpSzLMCQZ2XfcWnr3Ixf*=w^6Hkn9)b`A($;GFmv|45GJ(p!kOY%QA-|O&x;!!7%?O}FKTe5&d-NY$| zF~PLNkqgaCEE%PX^-CbTae|}8SzIvvZ6a&@biV^CXjw-fZgo!f%4|nxR)xU61@eVC zkbcvxyLqAw*Tc^D9XtZM+@eaMVFA$UN>;e1(1m51jTSS_etLG=}fT49VvZ+2Ziudicfw_0x(~X@NskU*fJ_v-$rU2O_H-LbRp8Y67E?6B~js&Tnubjd^5RacVsX1 zcBo=EcV{GrHPAw{$xr${(~b!~Fh)AR4r*j)zrxNJx@7w$Bj)#x=_L)!-YVKbxlq{1 z%GA3L(MyZI7it}2E9Sf3+cn4>vH4EO+&5PWN5UKvxLYm~2>F^CUvGw$-!>#&2pQV=Q*vH}N`xy~5?Oo4Yq9hqdO3$Fl3Zjv=_;2N(e4O_8M81^)?H z`ZR4xc87M?CRuhWd?a4GoE{8pv{Xp#36QDxC!tPM8^cqx3-H?0M)!7_{pK1Ar%u3t zA2^W=f;%VeF$%=8E`v{Z?>2ge0Q)FbhMVMonMk}Si-2zq+|WLO&E_hAkR*%nRZ^KV zU$1+in%6tnD)FOze&G&3HZOP*b+r{)j!x$=h?n=aFXScjR{|-qo4Yq9haKY~_Xty* zupDY~`+FUa$V$c=xH54XD^9-E$lmJDV@glDog&gGnfm;v!9RP@VFJv0ha%8=?YDDW zi~Tha(iIrVUgqziTDwf}O`xq~%Z#RA$w7<|2)0d~3mv&b!bBXXL132va@gSDQ8%k5 zkT}d7^EFG}2T9Mg#}sa%;WBDABFQVt+0gkkgm`B=QDzFs#qKTovR2SzzQ@>tu>X>y6L6 z;IAc>@q&sqn1y-LPOe7!n2}*+fXD`Zg$55-GcBA_kdJ*wek@rZTk`e0tVB}pOj~ZC z@MN}xpQN_S#rh*nMY-oKP;sSpH#7~=yL^uI&c>O1bE;Tf|A)}g6Oe~U?y19xY%atD zo#Vd|nPW1JSrP&scSx-cyHiJ7`n>auTL^|2ZvO>+M$GuX(h#2)DD)J|$5Oy~E8_`n za4YoQX&K$)kmXXuq|-esHcRjfJXy6SioPPIJ3KrzdH(snoj{M?tHxpP{8;$xy zStC4w!D#iI*8Yad2c;(jA|`m(ns0En=y8ri>B)^Y%a&vtS!=bqDo1F|Qq5qIQoHvh z#vFNmAYQkpW+*-TVb&Np9~>UoxkVJW&CP0xbBoR8nA9k=V$3sVQXCr3)H2#y_jx?} zB3x$>n(T5IYz(N|-!?T>TyosEnm)0`e1;~vgr0`RGZ*M#n=PWn4h>`Ok_r6;ecb1> zzG@z!QO_ijcm;kZo9UFA4w7`kx#pTS?O?b>T~>0jHM^`46}$7&?n|iHnFGEAKDE=E zm=4`?SbrvEj)h}{6k@DxVSPo{I=?YB`5ZlrSAN% zOmvT=Tw#;!AVo3?7>;#^@j=11LAN&^dOENZJI96`aB6#+{bJmL@&J4qa6H}) z_KT8NoN7TA^VNkaM7^~CS82+GHNX9=jS7{QbLpP*PYW3VQ9pBbzMbxZ9R{BxkRZ>d zT+5nK3q;t_F7y~(0;}ghwG14pYim+DnaY`%sBcl!UvZm2Pjap6>P-jR>t#CZRpM7* z1zDagF`FcA^AUfpX1nxJ)&{2L^XLL%%gtp(8(7}!Q)0HJrT!_Ws3U?PNRv!0ZqD?H zx;R-^{;qRg2)fGW)HEp#4q(ql&4%hDYh;2)5FkWCmrw`;@^B3MV=x+3Ei(=}lGG-z zx%Y+YHF8$O0^B3pX{B@NsWm1u+7=W};)2GY^H%;uej|YKBd;5{rY3z}upwS|YFE21 z0;OW#q~%ZnJl^la8k)k{zRBTur8-W8#)G7?JctLvMj`1;T6^zc1ij46Y`(hRGLp#^ zq8&uYA>oi*GC)N5I&%+_NqmW6;nWnA`bcGnH1M@*h)J0VNuia^<_6zzQ~!;h;S zFQ!kpvdSJoJ@NSxvc2EZ8thvJfBfS-I09&pf6lo@#&k^h(e|#$P>3=sh-DAx&LW;N zUfBwhxoW4j{!(IIktG7x_70GLpI|YP)LOJn3S=g+!7PC(;6W@mF9i#{+$MboXD)zt zjcwKA$EWW_#YSg<9nk_H(g7f9i#F2eqF;x9#$+ zL&vRNIxnm2s9yKs1RnqvTc93!OkZSW&}axVL*dTCW6#`Z^jr0Ty$a|57UDpKT&;A) zCx>%ENfyy$gV#ij0#p~;v?C?_50i0lRc=jYKwamJfotHd| z+YKTZfBAh$^<#l8C@Qwvjc0GPoAp#*k8$w8JdS5?6wAwTml17gNErys16W<;`72GR zSzj}sP-qhkX*Gb;0*!IMPShCWj(QHvA0~dcLMB7F6#}#hr&?8Uqba&t7@lLl7i6!3 zDuu}%Hm|0y;uoy(e0jy3Z`Nhk-_(R%ExILVh2)RGsr(_SYQ8}hwAH&6yIhR9-Fl&* z*71mOP=BFs8vZ!rjMbj3woN!e5tirn+_-PnTv6O#g4{R3;dVKd?MbBtjU;<%&$Mx3 zNE)2~5lmIK%1$&4L8sU+8O+&SW4{G7D!6QpD0(MPPySy)=M&(_KV4;;E!6~6bd$Mm zNYyW=20c4;sUC;9<9e~ z7juMpMWC);?uWtrrH@MZWMi+OT1^@W1o|!21wpV^Y)KTA6AyTfU6bV~Tj?7Otk;AN zrswD*Fp2&)&8?KQn+@N$*){zM-AwBO&Pe@Gnw)WDvV9C2{Cb(5PNn`US=z^%W~ zZh0g)Zqf3_{U!CF0m0yu(8fBSR5+bwBww0K_kz!tBg^3Wfv+_2vj}b;jkX&9P#5i(JfU(IuC=rhq-? z1vEW4%0`1JUcl>W68G0? ztE<)(9mi=P?>CCdUyker(^1fABX_H0aWOM}{Dd1p9E(zPKj~R= z*2`oDJ1y~9dx49pfZXuftftkCo+0|iDJMS;H2D?Z66k)e`v&0MKQGuK_5=p`BN?ff zSENb$>%!ak=^FqtVTLKqBTML6-IN?QR4}*2G=yr=%(T1Y=0FGnNanFH)cX?zQ0(5xt$+VrRAc@)}wj zte%HDCa9Nuvtm+8QiurUXi7tqCh_i?$>Cb%>XdKLRIQHQ@@l7AS1v4;v*cv$suk+h zl{6FcrL!TIZvW724L$KG9Br$fVZXTflVSx+Jfu6N(GS^5OWGOjF#F0I>=*4lJl(q$ zA-407M`L^pJvde3!p0KI$vp=ycpY+Gy^h&N4^GvC`{jTX*>Hs`zMAV_ompI1m39U{ zdqX{$m(^%XJCnv}*O3fqgYI;LzqN0$&o%GTye63CQm$z_;bjML&T!anAY(^iBC+3F zwg(RWL(i~e%0-2IncQd|-fi3s*+1NDf580Ozm$OSybonc`tG+Xt=CJeI)6?I(m+uB za-0LKGAlweP4ULQGV3pl4=(?+%s9v?%INkM&{f*DA?1+ReE6X0LCsow+L_BC&d9#v zE004@4@Hvv)RU?YesHzTkPhvJpEX-{yA>PqQVoubz5S{W++$?=vzZ|}U0rFmy^aor z!kb+#w5?`Qp8YpXc^+JEO|s#TL@6m9C0Z<5Xb2g?ZeOZyicNh5%QEqoZFK2TL1ELA9xYz`n6!9P&=&M7VKc z2d6=N5g9;00d+gG8nhW&{(_yx23HS1Q#E3?4`N5WK@lM!&i-l zC>WIn@Ayb;W%*kGWQ@(}OO;YkaK{4XXjp@ty9U7*KF}S+8wmW!z&$Im!`w)zvJCAy ztr`;V`gsfBZz*uvg^TefGD{-gX4E1R`NtDNXKR7jd;TVeLB}Vk=pnOAhl~>-S6c1l zBausZ6_HvddZRQjyFT)?BI!q=4iO9#wP2=uHns%t9+~Hl-l!0a%ol!y7VE((h`SGV zB)|or`zC(XNWm4|5x*0N=;!!!cAS1p8*%3WRm_8idu5is4 z!+04eb#4zYlro7@U(ky*_CY3niqqhOQ=s!a;BC4Z>3C76dZKRZ@^~+N?T;_nEZ{5; z7}}YsN&p#j5VS!cXhWMfkWEHL|6{E^)e|Wbz9irYf}Focm%u7;&zc1OLDxN)`U}~%fD|`~#hD-$N1AZZ7mpI^%4xe7WcS&cgc^Ns zi#%lo$mO#~I|2gT>@u|;sXTGQ82PfzQW`|kFGUlYEO2lPjAE9n`aw}6(c)_a!C@Gi zkOv*0PkFX}{q^p%W%t>dgx2stTUyU%e}~6dA=OIcnUC4q0GcwzcnUe=4WHMbB}qn` zW0K}J~hKjVR-U_imIiR9<};bhyyEQ;~LtkQ(0^i5{>6X36)Cg4ymWB{DKk=n0Pj@^HnqpNE4SjL*^pq5zC&a7&D-QZ2vfDj~< zfFbn%ARf6L;PIpgd?)^Jl&}Lw$juOd{S$2Ppm+QUF%dQbJQE%C+(}GBAYchWUxaZ0 z2P*;%jl$^5xygmGzPgnTd2Zbq(8QpeNdmL~JBIOK3jI!SoN&8+dj6YVh5IEmr^N(? z9Ew3+dPU}4MhE0l{=q8`fy(Xs)s+9D9kBQiUK&U@McN}4uLH8 z%fT<;PbCTySwsnuvqO>v+8k0UrZ{&wNJDEki1&j><24@&PyPW~wF4Z{lYpZoxB8Wl zeFvWfHaQ(Fjz(7s%qOZnqoM+SEIXPVqhJh0y1%g*sBtZ+8j< z`Yz@IRKtV{>`e|VFDeRr-VOP>Ne{~p0;*D!`;-L=4p)2!5EtnNLZ3H!E=gD}*#9M{ z^H)%MSQAlI8kBPI4}K3V0eT-0y8)coVFnG92hx>BcNG6zbq>*&=wNVHq=yw$K_pSX zYh7!0uy{1>dbb870F-CQ^X(g*`j-p_|0L-tcdc75k;7H?&_FfGJB=Yy40{RLf1-FOryTFX?xwsy0VN?NV95CLrk?CfOLN~#dz4N&pMC5aG2YOT|X zMx8@M4RKJ56-dh6BqU6&MF9z@F$4&-A_hoEDiBUd4E*2koFoK9d)40PV;>)tbIx~p zzxVfhuipp%Tom|+$0j~DYSgGdys=>ZTcbveX+{4(`hV~@|H!y@6Mh>V`&Qs6g&wG1om`=5L zlTMuXbj>SiuPEFDImZ_>cFf+L-m+qkAm>l1Z@=)apXOg3y#HkXN!YI`?e8;lJX0!K zVnm_DZ?^=(F{Ve!5oNj~ZuzSjm0Z*;)nJjv-b&!b?W$UM zdVH)Vey$-3hzDs9y$#Y5w03p|98D#|y_zDItn#3Y4sxuW?fW}l#vA+k+6{?IikaU>Po-RgMX9`}E+FZGoSu|PU*(GRD?9l9<%B=A@ zwvM~o5pIsS0n{x9{Pc^T8+jkV;?~8_?Y}g}`+j(P4X`Z8y;^l2)XV@V=5)SWbwBJY z1VBCH6n8)9J_WGIpK~JrJ^&mDsNR2bH1D1;3jAR`VDnVx)(rvoU;)TAVajrUFSMz` z@=j#@^v@2PZ(5yn<#_xF zgybi@Kx&CocPCx2HD?QZ${=Aw%R~u#ZOWiox*ssrd5R-549Z0HW3lri;u<+@ho?fM zNT?+FW7Zw^s@ltlG%xO$VJPQ0eJCqR(yLm{g|y;xt_LUZFdE-M7K06FiS)X;N5i=@ zGt{cYw zF30A*l;L5{KkvHJ;k@BS&?#zn49x*4^jCa(#s2w$O+t%!{H@)Ut>t~X7XuyQ4TR;j zp2_%xI8B$Fq!-)OhlC+7v$`#H!jP5Ri+cq+`MB689TWm?F=a3!osPW_dwfDi+P3PX z?8XQ4A&fqkX{4}!M+a=2qDknavzQEn@oTh!`XsB9o)od)eyEczs+HVx4rUu}P=az= zaR^sVhny1*DkM{B#cO-)>Wr%517bVanYbZ{bir&~7x?s^a9JiD`OpJgI@!2ZLEmZ8 ze+7n?#G9c(vQ366z0{qAl@YNut*M1}H=If0;0J4THCR;Xrk!5T&J^eQkt-KFI0SHu zomAwnKI*Er%SCm`_~HB$N6(ijm4p(O*(d zKk8#=7nGjJU0#nlxSDWZ5OA3t|G>FSkZ-Ghupw=mI$brue!@A7BN^aMvIS2G9}ZB5 zT3oYYH+O`sF^+ub0WKZE)Mf9BWhv%^v4AX6vII*gX_!oe)dkuV@F$+4#{X{LuvoW^ z=Mm-++H~=%w>Ut6QRJSO&0~^VgY&s`=eB2uNX=!J4i|FKLQPky^lERzR-1?L)@UgJ z9cd1(@_T=C5f_$iHHo>aC2_ud6`3dBXLsl!Zq4jDheHaF^zH^EBfq-Wf_IL>Np@am zG6YfefmOzv+FL%_g!0a?(oLciMB$GX5(jrz+%O0Cs_Wxqz*)^qR%Vyzw%z2yIe6Gs zTwixRav%qhjox(2sxn5~Hs5@vH-D1dUrZPsJEx-UCDTT!5Sckfsv|Krq&&>mmhURi zY9=0RF{P;pG9rID@VVEOzOSdrPG?~vOXI(7tV zJA6YevHUwM_xK?@ic(tuLKCAge{*=mD>2RyM^?|jR%qU0l(Rbx@i%!@n$K*<_9eoH zj`sb6+NC2URejOt$V%?xipspjBNAppQH0#tWl(h6u1j49ZPe|ZJWr%IeD z{S8z5(*hgYwrwi0kpgRY07Qk>z^+M5RsG!#`toaomCx$TDwpP_QyJ{?SDipibWiZ)|J{tQX<*NpGqH`q zA9>bQycs*+##8r!M~2L3-}X}9KJU8By|I4;?DMVZbv0c_E5%&1KZ&f_7~Y;Pt$aD~ zQ!62^U5i+DhqOHD|13`w#M=o)kgDWC33*G&65Kq1^Z>kC3#3KA!sH#mOHh^~^w;&6)w00q!m? z&zrWFlfmuzTeIt@T+7KWtTi)lGN(6D-&BmB^(m~-2CvN?OI$j_9UO)M$l52gI}I_r^PJdG~p_PtBa1-l;pfgEl5ed zwcB<+CUqbtE~T&!GA>lGWBe=3%^H(7@eHR)d&vB`JFU23Ap+*h%ljUIO%s%?J$?za z3a4!?e@4|jT`kRs zW8+$ioL6>%*HtuwUK8fvl*7~La+he5Zg0L;;~Rc_M{RCtT%Wt;?Ve^*liXsyuk_y~ z0i3owKBkX#Wi%PzjO7eEo&K!U0hcSzCdwA^NS~E14mAHKdfckAzAL?~?j@@IrQ7^4 zLkO;JelbD-(5k!EyXwv)dO^?x&C?7WiB}rvmu&f}0{gm+WxG{VSwhpZ9eYyDH}@RI z%H&3+WlO(IITbtWBXeX1Ws9isHLo55<=%f~&`vtPIOXpnLSPRa{8*acdk6uLo9}wM zkwMTCX7sNcPr@#ZpKjQXRP7gi-wdLN*neRRFOOq_k%U zq_#@%E1g#k->p1{gF)+TcuFj!`}db{I+(i*7c23>lp?S?zDoI8dV)lY!K6gQUpbx5 zp3t$J%;@lS4ab9Jwb{6&QM><_gHK9qS}AKT-|BO*QlM*2h1dVNtuKK#gm|FCQLm=* z{$h4rdTn1=F;B4BxX8ul^%=O4v>_OmLC=KGgTc1AO~NS%X5dzCtX>^32mJOr?j zB&yYlWqI<&{_0kGeVZxR5I1z))15XY+t;l5RAu3L*9(=18~p?Z2sW6qF>B72wo*x= zfC|gaxg0Z@BPiAHGGl}(rn$a|W&Y5-CN7x61b@lrF*&(lVIv&>-#%5AbW+N{$-0(qjq`i zNktUEVwA-UVRoP$izO28g*{%UPfe0;B2$~%d7cUXS~IL@;PUR8ECRRN5!J{532r>H zf+&6uHt z_}EM`SUDywyJd)>f{=;Hq#xGBzPjVHkZ?Qgcy(HA$BTh4YlsH?4VW4{=F+=`229?2CsQ$5AX z5J@E~QmNl~%WKd56g?V6hVw^zV+jqvHM46ccqBWn_+trCDe(qfo%HgYz{U4FaG$Iu zGrQ0JC)#?_3~{n8CAGO!ackIS$V35OOL3~^`Fk!Jo`AbS!}UEfqbmCCTXieBH+WSp zT;%O{QEPLkx1{+|*z7J>|NF6y^W2Vx8Yl3$5Of2)u;;)%&1g$!Ng+{)$>?Z|NXs~N zKm4rC<&jM*%3rktC)1nuYM8FplNu*1W~5?O0(E_5?34FX6XVE5v4NA{gw4eD!|g?y zv1Lha^(T|`#_OJ4jjBS{v3PEJ)xX)?Y3%{R`bEm(gv`P0aAg@o-?{@lPJ!V9h;4%p z^a}`dNaDVsFyQWBW0TV92@9r+Qi=kUS2awZ$ao=VQ%6B@kT@tH(#X`XM9!YdiFnOh zE>F^VHV*BZX*+pU8CMXMj0Bmrd}Q6f&ANkaFmeckk&jvw+RtXcSTmyhMwH)(^80mw z&WQ4ZvZ)c}N7z^+%nwkvrFm7+Ypj1iq$vkV*oc%?jS;&MDI9n} zaG+-g@y~jaQ}-2p!5)R6>>%Oy$35Ev31$J3gfG4GD@yw7+%OMQ;zmiGYhWY{$J#9f z59!;S;wtnBZ!P$XW95qp7d!4~9r{u5z3RQD5%W2wK;bt$eZD2E<#Ydj^#v`-TzIuH zfe*=a%DTb*DKe;*iq=%>EsIirh6Y)b^@>}sdTYyH5NIhuJ?4{mz+~u6um_Wdot9I67-pNp|19-)mAQLlv(!3X!U~GWi`tv$mTA5O{1wK@@$Cp z_n>#DABY|Yi9< zV4jbB64iIbhrEAjU^X{SRg$o4EiqIPIPK9X_JCBOFP?99 zy~*SDWR#<@j86_>;*abBs=7jnUEg2QUg^B?_C#fq@-gKrodtr>L*L@; zi)8i1q$Ss$#H)sqedK&Y0ryw2N|m^ZM(hn+qM0*1Af;+uU&=!$ZS>{`VFZ zvU(5cW+WCpOWRbud>Ae5;p>dEhkR=%f_tvf4c?{;E}i-2Ge?bvkQ}m}0u?}vLN9KW z7C^k%~M`wVpwR%azB;km;#N&5}IaNdVa*G`AHwhaQKmnIX4#-T~bZ zVKE15x#scg(jw|cZbrTUd2842+;l;+9Wg^ZzKs%klf4rbUwqXmK66rh^d9R8&5MLE zcgfY9uU<=pBaz?7&Z6Iq<;6F;{)bXT@MHie^Q!&3oAmiL=&;Wm zzrov{@q<&ktY4-O-_6@XZpW`cq!*8P;d+A`_9Ue9HMRwW9Z&!09ilKy1%WR^oQLcH z9~8&0`%IvMm6n)}{PLvVSg=gNLCY3-pDaxl=}~21-zmNa`wMO_Pdc|4fr(p3;8KYd z1hPmULa-)4pEZ-h{J9?Nhj}KFd;1OjeTKKP?i>r{gygjPo)FSSp$6gjv}TlaYio)K zl-TzxE-u4s{Z7|ekAwOu?Gv=rL2c#z@&AMbh`iN7`fctdd*g!o@8GdAH?GWu;TYX-Q=00Lm$F4+go?UhSFBfmsG{Bc+Omou*T zSh}Fb+}_IO|o31v23AT_!?(6 zXSr5G?ntQQ1-=s}M4wVI9@S6ds)5@3IT_N*<1;fXr`Eez@!R-F)TdlEF)7Zx{i@tI zdGZ}82lZ|I$#`kTy;WTh=j=q0uxif9u6Nz@SEqXOok&yESN;5+W!QV<42Sb+eecbR zq4DDXt{LqUQ8t6_>l_v!&g3M{2dm{ih~;B>BW34f&V<-)q@JplmM@IT`Y3VxjAXvbnfN)L#Yd1o~R5yq0?~!%K1Mx3#-rCk6!zBmwsD}gq9J&*F zY1<8NL*i^DRrFNY{-!!j9~t_0m@>$kwK)yR7D!-%Ru*fu!a53IZ&2zS|db zUD5P0WE-YRVy2h4mlnz`OlX8*3}jZ-EEjp0A-Nf~4Y9dibnkq|4J!arEYJZHYZ+~6 z$<8WW0{Le%m@Uh<`Xom2&4z8z7Gb~sct&9ir3aFJQ9Zrg5uLl&O}ZA`NuerWWEEpf z70W1`Ovttl*OwQ5nQ-U2FV@rxy?!REy#k|J1Ui%{2|fgy3oL*21ad+RkWf(`aOuNN z-6{FsY~!u&byJw}!rAelh?aPrxC(ipVSS5o^6?Lc^^2$K+Xg8lV3&-R3%GB!Tp(Mq zuQs=fG$Ja$cv1PDI>H(|GfLZ&c6fvZHD%&_*(ANgTONrkCutu&sNrhqbgZIfkJZVF zG)j5Wd1Tlp6M(0ojcAphzE=63qC!;fe`h$s5!5q9%Tl;FQA*NeK`rkt>Q@_Cz2w5G zX$Z$y7H!&@%t2N>@ax)SmtBa4dq_<0&01AfRr+86NS_t8O&!k;0qt$`ZaXT}yO7g4 z(Epa#a!OoBtY4Swbi&(fCCC6-O4+HUIA(?O0Zkz%7~xj@(|gq_8{kK#Wk6hhzyXPt zwa%q*8iHwo?kethL{RPR{C+Ok4t15W1%sU3s@%O)b9yiiP|0i}_ZNYbX8VhbNE^EI zx2mkdYmk!)v34 zCsHa3uUKs~H2wI+$jc+j%OVwkSMko+VIcZPnTjnVprW>rw09~$%b@#Hun#ZVSAE!_N;m?iq(7@AH}xF8a=Klbm{W%l_rP7p zt-{3Y4|RU(B{B1oy5CnAVjrww(J+F+9p_~|BQRF?7gog?{w?WehZWn!sflNocfx*; z5y>d=i!=K5CQ*d$kn*o#S^E9Tjl89Tok`F(1J&riQQaWhv-Hvl-?S~!0bwmDYTTlxG-OVk=dWzJRSfADlt&M+S_M1yKfp+L|zhvD@ z=+kX&HIAsK_f3e6gsPI+VzVZpI;lpwP~V5et5-p4rO&^uN@1|Ni@SIUoh1)*940rO zaLHh$G*}E>;tP6R9qT#k#t+t6tp^Sv!-Ue)rsr$tkpeJJk-14jPg1K2u?5ym9|+hW zeO~j-RI8Fx`zd#X?Y-BA5E;>)O6;^#5T(R%zgr5oh(ZNMM>aB6XJsQblcSeXgqPKR z#ml8X>hK-RpI?YPNjiU{ofyKT6?e`|l5jQ^CQvXB*=PWkld@~xK4JkWKl?WnPwj8)@Yte zx^=FfwX>_;*1YF*AM^l-;2fL@1;s10n!{uZmtvWBB%#_D!~rNxYk8z&I#wjrEA&Y) zfd%^ZzT>L!FhpL6wRXIdD;Llvp>mA3twP?xC`K1>0WoQXzD2esawuEFMla!IWJpVc zY?hh!R}Xj-;C;Gmh@o`7TSa^oh1^l!GFy({!~HN3IDkCC_AJ-A5J`d(<7U(~nbK!% z{bUsz2nO7uRi_dHJdD)L-H)Wkwj2ZA4?<=}`yiRIUtBg+V!F`*v2KE+_W<4p0$aTr z1oo%!VOyT%a(42V=b@Jp7Q?~26_%rBg$~1ft=46Q zS>`nGzp*sN-TN3dkqe= zj;EY5yUw3K9f|@A2|bJ}rtdXkJjLmj)1QvjBuCX~xyp4dUVDNVcLStPhT8{>UeWl+0SSLz7OV?8Rp+dqwnYgyhcZl*7f=iWF(bS0mWk)$up zSSoIm9@xlDTPhJ7KyT$S!}iy%bzv7lQm)cLgC{3y}~ zjmZ*I%-j(rG@_3YnEn9JgxjD26!zbkmuWSHUwTUqvu>v*N7JM(w_d>5IW5LB5u*Lz z(_BIngm-R#c~we0Mc-aA+UvW({|_)?-0b{*ClB}Yem?{m;T1n1#Tp@nBczb~qaW#C zEh!B4JrJtRZlrtkheR38?T6IS@=#^Yo7lX?eV3oBclF6)l$k#>rY_wVx__0zd~&%o z3Y(KxQG$E{cE1KBv%Bodj&+4zOQgkMpVj8BR!Us*F4yF*N1+;jWn+D0lU)1wq>gm? zVQ63qC6hD$YsU7Q^#KaGMf^&fFG#(Yve$x-$I))ZnrDy%Ev(*Q|p{z>Q*^8-wp zxM{X7D%r&enyiQFcV>Cwl&}AesluH#nDte1bFM>pF!;I`x3P`Os=@2Y+$4jn#b9t< zn|0>ltxjkzE^bbG9e+MON-5dm4SsiNl+^j17hQ zuWlTmb2FfS(qE>bHj50M&CZ4}o}hJP(sus>5lCR=bl#ZTZ~34?x<%0RAB&PUyy@ow|t&KuR`=)kC>Ny`VHRSM=~c2(?okOz($AH78y9CTgFT2p2} z=2SHX8BZRJ`<+$7gL@Sub2F2PpKS18Q`I)Fq(g17FZ^XcgNZ91xKpk{0d>T<_t6#y zL@wH&#*3`+;EF=?G}5*1CMut*H*1u%o?2}*^ogW;Dl@HD@8XWvo;E?rKM&#BNx_yw z@$aeuy_z6Dlrfl-5gt{x7-I7sdi=OTskSH!TGrw(gR3#{6h7p@&4j;f((CbqHRl9h z0?!c6YX`^v{a-{?BsY`_-E_fXZ%H>_GpqB%Hd zq_s2r#Kv_xxb57=pte-REgYmJ3UDxkH?w zg7$K!kb_WY7EHlzS9*3OrrSQ2MarBKtSc|&l+C)K*Dmg-LIk+|cT`q~Tt;J+p6T1T z@15I;>u|R`QACrQB{rQsj9#S~`y2DZSMqj2Bi3jLZcguV?Vv-NLX<)?&%%TNY}V8` za-*E^_v5{T&vRj|&OJ4$Bbfb+a7Nq|7P`QJ!U%7gAn;Vg@B_g7)@>uj8NX?o>cG%K`aB zN~IaX~PQ5Xf0If0$EyI?~l#5U*use&$Um0N4lva zsV}<26*!+JQ&q( zfBKWhNefeGiZPgqp@pwG#5X;>ZMRA`@W?!4W+MaBV2}A;?66mEc2*B!JY$M za`>$_oNZ6)-#uQ^BZf@Dmacb=P{bV0Yd!_H%RXzrY{go=OraZ3J_E!wyUHcTks^R9 zs?(-HqK|ycb*Rfu26F+fwEe)=p1_v$L{%tK{ssIp-Y6ybl>oR18F(@-$`EA z)(qCaIR{xHh?#LZhE)xO)hx&qBvi*)HikD9y9p&&XVdj3dMa4wAa$#gNI?KsQ$=;M zOYKa8Dbwx*+7R)+Z?|X1ed}@kNKZBk1lzXy(#J0o*4JcndlYcLMtGmkwEn(n0RD`R zE?V2l43ET2deGK+Pt)}_B|BA|FZJwa0TI|6r_yW`Mt+TwD57=V?VqI5}a^}~dX&F`hMA#n}@W?il_&~owSka#bHp&!gPkg;L^=nX~S)l(N z>Cq3Xcs4pPpIM}A;mE<9Jm_gI=`dD82I@WO07ArDIi`P`3yjx9!Z3X^Tf0HXXH3tN zOPYv>78{PrzPl@%V@ z>EwECXK5sy;{_?~#-0S|%6)HyfH>ZnEY`WPzxg;85^r!4=v%|)CBXU7; zkt}K-hF_49C$A5ae;tecUS|h|&Sq^^q%>saWLB|_F_R4;kt|C=)IoNmn=nPbqcmr# zE(LoZ$bL%*`2X-jUX)jbn$r8a8b1$&>!aUa-TczD-IdOZbben zaq$sVef#`OFx(=k1g3Z<^sa}FZj}SDqP}`-x;?=cn%XS{;06@=>Ixss5NHjBBMFnS zHXCxsA^=Q+$e;M4=@MT--fRgpf+6eMxg?9@8b$8F2N)dR_H9*1g~}RaSj3qLC$t_G3Bu(!{#LFB@ZFr_t4HiRj)QiMaFM^(fG^j6wiBxzW!@ zQc2DSj89nMmiszZ5I@$QKwk-0ir|1wmUTx$&@elT0Ck?*MCe4wQz3C0myIhn+g8K% z8-yxvUdVAIQ>y>wf;$P3DZh^YnMOWhPul-3%Z1GFu3+{hc3nby1BHa$meE0%NuFwC zp`C`Ktwhx@JBvkgO~5JT=&6tT#2V>O~~D% zZ!cfC33)Yb;Hcl)->oCSQM;Y~>9}7yGzv;?+AL*(z8RWrBlTo6J6OZu5kT7PE6HQ_ zd0>0~)6d>zF8FiXaOVM}eP5jWT9dEJ-%0BMwVB<%4*GGRzB0hu`DHd=2X(fgs(3%l zw&f_X#Yoiq_?EVB|BP-BM>X*oY$>1U9xf8ltT_M&t4d$(VMDO8F}6j{t}_}F^#cex z&`kY)-?0`nP2o8ml?B1A2ic%;oV2ai`i2j?=3d1vK?J)ZnTN&l9T1<0R-qM+Khb7h0}=n0 z@+z}P?!dJ03tnMtliKD~ceC?QwR*V5(qOG`Ln9)tavj(Js23OIbq!e-q703ls2H

y9tYw8$sO&e~R+crkmCG__mfUD~cJ_i8HUiKz>(B;2sH8cyJ5K(n=N;Or}klxvSObUaYfK`3Ir0WwV{gBuo{ zK$YMmwJ`*roL`q%d zb58WfEyY_769TotXhk4m3@|>v0It2ZTbwzKw&Lyt(=?|yOa=k;VaggLxz@pf>jEAH z&1^TD2i+}{4@B0F3b)2TypiMeN@!ldG7zV^x)i2ox1<#?AUEP)p*srGy_zFFjkj23S9Dz54AJ1 zF2+ngPTaHi64`Dr+F;0r8LC`VpkT){`(GpYvRwp$LzRQS>WCXESU{H|*g(cp`pCJ%Wv zF*L7g=eyr7F4DWUI^Fg5S=12bxZ#H{G0c5sCjMVON3-K6HMAdSWjA7TNT*zKe!Di{ TxyDiO-y8mm<_lh1@!tOf@j>Uh literal 0 HcmV?d00001 From 23112ec423e96054e469157ae5217cdb989c1dc2 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sun, 17 Nov 2024 22:31:20 +0500 Subject: [PATCH 19/33] fix filepath --- cs/TagsCloudVisualization/CircularCloudVisualization.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cs/TagsCloudVisualization/CircularCloudVisualization.cs b/cs/TagsCloudVisualization/CircularCloudVisualization.cs index 12ba286a9..d8ee7a020 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualization.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualization.cs @@ -74,7 +74,7 @@ public void CreateImageWithSaveEveryStep(CircularCloudLayouter layouter, Size[] var r = layouter.PutNextRectangle(sizes[i]); var currentFileName = $"{startName}{i}{extension}"; graphics.DrawRectangle(new Pen(GetColorBySector(layouter.CurrentLayer.CurrentSector)), r); - var filePath = Path.Combine(@"C:\Users\Resh\Desktop\ShporaHomeworks\TagCloud1\tdd\cs\TagsCloudVisualization\Images", currentFileName); + var filePath = Path.Combine(Path.GetTempPath(), currentFileName); image.Save(filePath, ImageFormat.Png); } } From 80508bb09e6c38dfec26fd483d89fc5e1e22a626 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Sun, 17 Nov 2024 23:44:36 +0500 Subject: [PATCH 20/33] Add third task --- .../CircularCloudVisualization.cs | 27 +++++++++++++++---- .../Tests/CircularCloudLayouterTests.cs | 27 ++++++++++++++++--- ...CircularCloudLayouterVisualizationTests.cs | 1 + 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/cs/TagsCloudVisualization/CircularCloudVisualization.cs b/cs/TagsCloudVisualization/CircularCloudVisualization.cs index d8ee7a020..3a9c3b908 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualization.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualization.cs @@ -18,16 +18,18 @@ public class CircularCloudVisualization private readonly Color RECTANGLE_COLOR = Color.DarkBlue; private readonly Size ImageSize; private RectangleStorage rectangleStorage; + private int sizeFactor; - public CircularCloudVisualization(RectangleStorage rectangles, Size size) + public CircularCloudVisualization(RectangleStorage rectangles, Size imageSize) { rectangleStorage = rectangles; - ImageSize = size; + ImageSize = imageSize; + this.sizeFactor = sizeFactor; } - public void CreateImage() + public void CreateImage(string file = null) { - var filePath = Path.Combine(Path.GetTempPath(), "testImage1010.png"); + var filePath = file ?? Path.Combine(Path.GetTempPath(), "testImage1010.png"); using (var image = new Bitmap(ImageSize.Width, ImageSize.Height)) { using (Graphics graphics = Graphics.FromImage(image)) @@ -35,7 +37,7 @@ public void CreateImage() graphics.Clear(BACKGROUND_COLOR); DrawGrid(graphics); Pen pen = new Pen(RECTANGLE_COLOR); - var rectangles = rectangleStorage.GetAll(); + var rectangles = NormalizeSizes(rectangleStorage.GetAll()); graphics.DrawRectangle(new Pen(Color.Brown),rectangles.First()); graphics.DrawRectangles(pen, rectangles.Skip(1).ToArray()); } @@ -96,5 +98,20 @@ private Color GetColorBySector(CircleLayer.Sector s) return Color.DodgerBlue; } } + + private Rectangle[] NormalizeSizes(IEnumerable source) + { + double XLength = source.Max(r => r.Right) - source.Min(r => r.Left); + double YLength = source.Max(r => r.Bottom) - source.Min(r => r.Top); + var boundShift = 10; + var factorX = ImageSize.Width > XLength + ? (int)Math.Floor((ImageSize.Width - boundShift) / XLength) + : 1; + var factorY = ImageSize.Height> YLength + ? (int)Math.Floor((ImageSize.Height - boundShift) / YLength) + : 1; + return source.Select(r => new Rectangle(new Point(r.X * factorX,r.Y * factorY), + new Size(r.Width * factorX, r.Height * factorY))).ToArray(); + } } } diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index 5deee02fc..0a8d66f17 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -1,7 +1,11 @@ using System; using System.Drawing; +using System.Linq; using NUnit.Framework; using FluentAssertions; +using NUnit.Framework.Interfaces; +using System.IO; +using System.Reflection; namespace TagsCloudVisualization.Tests { @@ -9,12 +13,31 @@ public class CircularCloudLayouterTests { private CircularCloudLayouter layouter; private Point defaultCenter; + private RectangleStorage storage; [SetUp] public void SetUp() { defaultCenter = new Point(5, 5); - layouter = new CircularCloudLayouter(defaultCenter); + storage = new RectangleStorage(); + layouter = new CircularCloudLayouter(defaultCenter, storage); + } + + [TearDown] + public void TearDown() + { + if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) + { + var testObj = TestContext.CurrentContext.Test.Parent.Fixture as CircularCloudLayouterTests; + var info = typeof(CircularCloudLayouterTests) + .GetField("storage", BindingFlags.NonPublic | BindingFlags.Instance); + var st = info.GetValue(testObj); + + var visualizator = new CircularCloudVisualization(st as RectangleStorage, new Size(1000, 1000)); + var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); + visualizator.CreateImage(pathFile); + TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); + } } [TestCase(0, 4, TestName = "WhenWidthZero")] @@ -74,7 +97,6 @@ public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoo { var firstRectangleSize = new Size(4, 4); var expectedRadius = 7; - var storage = new RectangleStorage(); layouter = new CircularCloudLayouter(defaultCenter, storage); var expected = new Point(defaultCenter.X, defaultCenter.Y - expectedRadius); layouter.PutNextRectangle(firstRectangleSize); @@ -91,7 +113,6 @@ public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutInt { var firstRectangleSize = new Size(6, 4); var expected = new Point(14, 1); - var storage = new RectangleStorage(); layouter = new CircularCloudLayouter(defaultCenter, storage); var sizes = new Size[] { new(4, 7), new(4, 4), new(4, 4), new(4, 4)}; layouter.PutNextRectangle(firstRectangleSize); diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs index 1930633a2..7c8c0325c 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using System.IO; using System.Linq; using NUnit.Framework; From 3eb403a025ca942a9adf25b3167de52eb02d2372 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Wed, 20 Nov 2024 22:25:08 +0500 Subject: [PATCH 21/33] Fix visualizer and add .csproj --- .../CircularCloudVisualizer.cs | 75 +++++++++++++++++++ .../TagsCloudVisualization.csproj | 23 ++++++ 2 files changed, 98 insertions(+) create mode 100644 cs/TagsCloudVisualization/CircularCloudVisualizer.cs create mode 100644 cs/TagsCloudVisualization/TagsCloudVisualization.csproj diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs new file mode 100644 index 000000000..66b9731c4 --- /dev/null +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace TagsCloudVisualization +{ + public class CircularCloudVisualizer + { + private readonly Color backgroundColor = Color.White; + private readonly Color rectangleColor = Color.DarkBlue; + private readonly Size imageSize; + private readonly RectangleStorage rectangleStorage; + + public CircularCloudVisualizer(RectangleStorage rectangles, Size imageSize) + { + rectangleStorage = rectangles; + this.imageSize = imageSize; + } + + public void CreateImage(string? filePath = null, bool withSaveSteps = false) + { + var rectangles = NormalizeSizes(rectangleStorage.GetAll()); + + using var image = new Bitmap(imageSize.Width, imageSize.Height); + using var graphics = Graphics.FromImage(image); + graphics.Clear(backgroundColor); + var pen = new Pen(rectangleColor); + + for (var i = 0; i < rectangles.Length; i++) + { + var nextRectangle = rectangles[i]; + graphics.DrawRectangle(pen, nextRectangle); + if (withSaveSteps) + { + SaveImage(image, $"{filePath}Step{1}"); + } + } + SaveImage(image, filePath); + } + + private void SaveImage(Bitmap image, string? filePath = null) + { + var rnd = new Random(); + filePath = filePath ?? Path.Combine(Path.GetTempPath(), $"testImage{rnd.Next()}.png"); + image.Save(filePath, ImageFormat.Png); + } + + private Rectangle[] NormalizeSizes(IEnumerable source) + { + var sourceToArray = source.ToArray(); + + var XLength = sourceToArray.Max(r => r.Right) - sourceToArray.Min(r => r.Left); + var YLength = sourceToArray.Max(r => r.Bottom) - sourceToArray.Min(r => r.Top); + + var factorX = GetNormalizeFactorByAxis(imageSize.Width, XLength); + var factorY = GetNormalizeFactorByAxis(imageSize.Height, YLength); + + return sourceToArray.Select(r => new Rectangle( + new Point(r.X * factorX, r.Y * factorY), + new Size(r.Width * factorX, r.Height * factorY))) + .ToArray(); + } + + private int GetNormalizeFactorByAxis(int imageSizeOnAxis, int rectanglesSizeOnAxis) + { + const int boundShift = 10; + double imageSizeOnAxisWithShiftForBounds = imageSizeOnAxis - boundShift; + var stretchFactor = (int)Math.Floor(imageSizeOnAxisWithShiftForBounds / rectanglesSizeOnAxis); + return imageSizeOnAxisWithShiftForBounds > rectanglesSizeOnAxis ? stretchFactor : 1; + } + } +} diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj new file mode 100644 index 000000000..1a44a26a4 --- /dev/null +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -0,0 +1,23 @@ + + + + Exe + net8.0 + disable + enable + TagsCloudVisualization.Program + + + + + + + + + + + + + + + From cb4cb27e3e4e606f0ad4c7d747f9671fa8c01edb Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 21 Nov 2024 02:27:39 +0500 Subject: [PATCH 22/33] Fix naming --- cs/TagsCloudVisualization/CircleLayer.cs | 215 +++++++++--------- .../CircularCloudLayouter.cs | 130 +++++------ .../CircularCloudVisualization.cs | 117 ---------- .../CircularCloudVisualizer.cs | 12 +- cs/TagsCloudVisualization/PointExtensions.cs | 17 ++ 5 files changed, 178 insertions(+), 313 deletions(-) delete mode 100644 cs/TagsCloudVisualization/CircularCloudVisualization.cs create mode 100644 cs/TagsCloudVisualization/PointExtensions.cs diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index 36e5322a8..34c66b478 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -9,59 +9,57 @@ public class CircleLayer { public enum Sector { - Top_Right, - Bottom_Right, - Bottom_Left, - Top_Left + TopRight, + BottomRight, + BottomLeft, + TopLeft } public Point Center { get; } public int Radius { get; private set; } - public Sector CurrentSector - { - get => currentSector; - } + private Sector currentSector; private readonly RectangleStorage storage; - private readonly List layerRectangles = new(); + private readonly List layerRectangles = []; - public CircleLayer(Point center, int radius, RectangleStorage storage) + private CircleLayer(Point center, int radius, RectangleStorage storage) { Center = center; Radius = radius; - currentSector = Sector.Top_Right; + currentSector = Sector.TopRight; this.storage = storage; } + public CircleLayer(Point center, RectangleStorage storage) : this(center, 0, storage) + { } + public void OnSuccessInsertRectangle(int addedRectangleId) { - currentSector = GetNextClockwiseSector(); + if (addedRectangleId != 0) + { + currentSector = GetNextClockwiseSector(); + } layerRectangles.Add(addedRectangleId); - if (ShouldCreateNewCircle()) + if (ShouldCreateNewLayer()) CreateNextLayerAndChangeCurrentOnNext(); } - private bool ShouldCreateNewCircle() + private bool ShouldCreateNewLayer() { - return currentSector == Sector.Top_Right; + return currentSector == Sector.TopRight; } private Sector GetNextClockwiseSector() { - return currentSector == Sector.Top_Left ? Sector.Top_Right : currentSector + 1; + return currentSector == Sector.TopLeft ? Sector.TopRight : currentSector + 1; } private void CreateNextLayerAndChangeCurrentOnNext() { var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer(), storage); - ChangeCurrentLayerBy(nextLayer); - } - - private void ChangeCurrentLayerBy(CircleLayer next) - { - Radius = next.Radius; - currentSector = next.currentSector; + Radius = nextLayer.Radius; + currentSector = nextLayer.currentSector; var rectanglesForNextRadius = RemoveRectangleInCircle(); layerRectangles.Clear(); layerRectangles.AddRange(rectanglesForNextRadius); @@ -81,52 +79,55 @@ private List RemoveRectangleInCircle() .ToList(); } - private int CalculateDistanceBetweenCenterAndRectangleFarCorner(Rectangle r) + private int CalculateDistanceBetweenCenterAndRectangleFarCorner(Rectangle rectangle) { - var d1 = CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Top)); - var d2 = CalculateDistanceBetweenPoints(Center, new Point(r.Right, r.Bottom)); - var d3 = CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Bottom)); - var d4 = CalculateDistanceBetweenPoints(Center, new Point(r.Left, r.Top)); - return Math.Max(Math.Max(d1, d2), Math.Max(d3, d4)); + var distanceToCorners = new List { + Center.CalculateDistanceBetween(new Point(rectangle.Right, rectangle.Top)), + Center.CalculateDistanceBetween(new Point(rectangle.Right, rectangle.Bottom)), + Center.CalculateDistanceBetween(new Point(rectangle.Left, rectangle.Bottom)), + Center.CalculateDistanceBetween(new Point(rectangle.Left, rectangle.Top)) + }; + return distanceToCorners.Max(); } - private int CalculateDistanceBetweenPoints(Point p1, Point p2) + private Point PutToCenter(Size rectangleSize) { - return (int)Math.Ceiling(Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y))); - } + var rectangleX = Center.X - rectangleSize.Width / 2; + var rectangleY = Center.Y - rectangleSize.Height / 2; + return new Point(rectangleX, rectangleY); + } public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) { - var rectangleStartPositionOnCircle = GetStartSectorPointOnCircleBySector(currentSector); - switch (currentSector) + if (Radius == 0) { - case Sector.Top_Right: - return new Point(rectangleStartPositionOnCircle.X, - rectangleStartPositionOnCircle.Y - rectangleSize.Height); - case Sector.Bottom_Right: - return rectangleStartPositionOnCircle; - case Sector.Bottom_Left: - return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, - rectangleStartPositionOnCircle.Y); - default: - return new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, - rectangleStartPositionOnCircle.Y - rectangleSize.Height); + return PutToCenter(rectangleSize); } + var rectangleStartPositionOnCircle = GetStartSectorPointOnCircleBySector(currentSector); + return currentSector switch + { + Sector.TopRight => new Point(rectangleStartPositionOnCircle.X, + rectangleStartPositionOnCircle.Y -= rectangleSize.Height), + Sector.BottomRight => + rectangleStartPositionOnCircle, + Sector.BottomLeft => + new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, + rectangleStartPositionOnCircle.Y), + _ => + new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, + rectangleStartPositionOnCircle.Y - rectangleSize.Height), + }; } private Point GetStartSectorPointOnCircleBySector(Sector s) { - switch (s) + return s switch { - case Sector.Top_Right: - return new Point(Center.X, Center.Y - Radius); - case Sector.Bottom_Right: - return new Point(Center.X + Radius, Center.Y); - case Sector.Bottom_Left: - return new Point(Center.X, Center.Y + Radius); - default: - return new Point(Center.X - Radius, Center.Y); - } + Sector.TopRight => new Point(Center.X, Center.Y - Radius), + Sector.BottomRight => new Point(Center.X + Radius, Center.Y), + Sector.BottomLeft => new Point(Center.X, Center.Y + Radius), + _ => new Point(Center.X - Radius, Center.Y), + }; } public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rectangle intersected) @@ -134,12 +135,11 @@ public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rec if (IsNextPositionMoveToAnotherSector(forInsertion.Location, forInsertion.Size)) { currentSector = GetNextClockwiseSector(); - if (ShouldCreateNewCircle()) CreateNextLayerAndChangeCurrentOnNext(); + if (ShouldCreateNewLayer()) CreateNextLayerAndChangeCurrentOnNext(); forInsertion.Location = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); } var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); - return nextPosition; } @@ -148,16 +148,16 @@ private bool IsNextPositionMoveToAnotherSector(Point next, Size forInsertionSize return IsRectangleIntersectSymmetryAxis(new Rectangle(next, forInsertionSize)); } - private bool IsRectangleIntersectSymmetryAxis(Rectangle r) + private bool IsRectangleIntersectSymmetryAxis(Rectangle rectangle) { - return (r.Left < Center.X && r.Right > Center.X) || (r.Bottom > Center.Y && r.Top < Center.Y); + return (rectangle.Left < Center.X && rectangle.Right > Center.X) || (rectangle.Bottom > Center.Y && rectangle.Top < Center.Y); } - private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangle forInsertion, + private Point CalculateNewPositionWithoutIntersectionBySector(Sector whereIntersected, Rectangle forInsertion, Rectangle intersected) { - bool isMovingAxisIsX = IsMovingAxisIsXBySector(s); - var distanceForMoving = CalculateDistanceForMovingBySector(s, forInsertion, intersected); + bool isMovingAxisIsX = IsMovingAxisIsXBySector(whereIntersected); + var distanceForMoving = CalculateDistanceForMovingBySector(whereIntersected, forInsertion, intersected); int distanceForBringBackOnCircle; if (IsRectangleBetweenSectors(distanceForMoving, forInsertion.Location, isMovingAxisIsX)) @@ -167,7 +167,7 @@ private Point CalculateNewPositionWithoutIntersectionBySector(Sector s, Rectangl else { var nearestForCenterCorner = - CalculateCornerNearestForCenterAfterMove(s, distanceForMoving, forInsertion); + CalculateCornerNearestForCenterAfterMove(whereIntersected, distanceForMoving, forInsertion); distanceForBringBackOnCircle = CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX, forInsertion); } @@ -186,7 +186,7 @@ private bool IsRectangleBetweenSectors(int distanceForMoving, Point forInsertion return distanceForMoving > distanceToCenter; } - private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX, Rectangle r) + private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX, Rectangle forInsertion) { Func getAxisForBringBackOnCircle = isMovingAxisIsX ? p => p.Y : p => p.X; Func getStaticAxis = isMovingAxisIsX ? p => p.X : p => p.Y; @@ -194,16 +194,15 @@ private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCo var distanceOnStaticAxis = Math.Abs(getStaticAxis(nearestForCenterCorner) - getStaticAxis(Center)); var distanceOnAxisForBringBackOnCircle = Math.Abs(getAxisForBringBackOnCircle(nearestForCenterCorner) - getAxisForBringBackOnCircle(Center)); - var distanceBetweenCornerAndCenter = CalculateDistanceBetweenPoints(Center, nearestForCenterCorner); + var distanceBetweenCornerAndCenter = Center.CalculateDistanceBetween(nearestForCenterCorner); if (distanceBetweenCornerAndCenter > Radius) { - - return CalculateMoveMultiplierForMoveToCenter(!isMovingAxisIsX, r) + return CalculateMoveMultiplierForMoveToCenter(!isMovingAxisIsX, forInsertion) * WhenRectangleOutsideCircle(distanceOnStaticAxis, distanceBetweenCornerAndCenter, distanceOnAxisForBringBackOnCircle); } - return CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, r) + return CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion) * WhenRectangleInCircle(distanceOnStaticAxis, distanceOnAxisForBringBackOnCircle); } @@ -224,75 +223,67 @@ private int CalculatePartCathetus(int hypotenuse, double a, int b) return (int)Math.Ceiling(Math.Sqrt(Math.Abs(hypotenuse * hypotenuse - a * a))) - b; } - private Point CalculateCornerNearestForCenterAfterMove(Sector s, int distanceForMoving, Rectangle r) + private Point CalculateCornerNearestForCenterAfterMove(Sector whereIntersected, int distanceForMoving, Rectangle forMove) { - var isAxisForMoveIsX = IsMovingAxisIsXBySector(s); - var moveMultiplier = CalculateMoveMultiplierForMoveClockwise(isAxisForMoveIsX, r); + var isAxisForMoveIsX = IsMovingAxisIsXBySector(whereIntersected); + var moveMultiplier = CalculateMoveMultiplierForMoveClockwise(isAxisForMoveIsX, forMove); distanceForMoving *= moveMultiplier; - var nearestCorner = GetCornerNearestForCenterBySector(s, r); + var nearestCorner = GetCornerNearestForCenterBySector(whereIntersected, forMove); return isAxisForMoveIsX ? new Point(nearestCorner.X + distanceForMoving, nearestCorner.Y) : new Point(nearestCorner.X, nearestCorner.Y + distanceForMoving); } - private int CalculateMoveMultiplierForMoveFromCenter(bool isAxisForMoveIsX, Rectangle r) + private int CalculateMoveMultiplierForMoveFromCenter(bool isAxisForMoveIsX, Rectangle forMove) { - if (r.Bottom < Center.Y && r.Left > Center.X) return isAxisForMoveIsX ? 1 : -1; - if (r.Bottom < Center.Y && r.Right < Center.X) return -1; - if (r.Top > Center.Y && r.Left > Center.X) return 1; - if (r.Top > Center.Y && r.Right < Center.X) return isAxisForMoveIsX ? -1 : 1; - return isAxisForMoveIsX ? r.Bottom < Center.Y ? -1 : 1 - : r.Left > Center.X ? 1 : -1; + if (forMove.Bottom < Center.Y && forMove.Left > Center.X) return isAxisForMoveIsX ? 1 : -1; + if (forMove.Bottom < Center.Y && forMove.Right < Center.X) return -1; + if (forMove.Top > Center.Y && forMove.Left > Center.X) return 1; + if (forMove.Top > Center.Y && forMove.Right < Center.X) return isAxisForMoveIsX ? -1 : 1; + return isAxisForMoveIsX ? forMove.Bottom < Center.Y ? -1 : 1 + : forMove.Left > Center.X ? 1 : -1; } - private int CalculateMoveMultiplierForMoveToCenter(bool isAxisForMoveIsX, Rectangle r) + private int CalculateMoveMultiplierForMoveToCenter(bool isAxisForMoveIsX, Rectangle forMove) { - return CalculateMoveMultiplierForMoveFromCenter(isAxisForMoveIsX, r) * -1; + return CalculateMoveMultiplierForMoveFromCenter(isAxisForMoveIsX, forMove) * -1; } - private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Rectangle r) + private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Rectangle forMove) { - if (r.Bottom < Center.Y && r.Left > Center.X) return 1; - if (r.Bottom < Center.Y && r.Right < Center.X) return isAxisForMoveIsX ? 1 : -1; - if (r.Top > Center.Y && r.Left > Center.X) return isAxisForMoveIsX ? -1 : 1; - if (r.Top > Center.Y && r.Right < Center.X) return -1; - return isAxisForMoveIsX ? r.Bottom < Center.Y ? 1 : -1 - : r.Left > Center.X ? -1 : 1; + if (forMove.Bottom < Center.Y && forMove.Left > Center.X) return 1; + if (forMove.Bottom < Center.Y && forMove.Right < Center.X) return isAxisForMoveIsX ? 1 : -1; + if (forMove.Top > Center.Y && forMove.Left > Center.X) return isAxisForMoveIsX ? -1 : 1; + if (forMove.Top > Center.Y && forMove.Right < Center.X) return -1; + return isAxisForMoveIsX ? forMove.Bottom < Center.Y ? 1 : -1 + : forMove.Left > Center.X ? -1 : 1; } - private int CalculateDistanceForMovingBySector(Sector s, Rectangle forInsertion, Rectangle intersected) + private int CalculateDistanceForMovingBySector(Sector whereIntersected, Rectangle forInsertion, Rectangle intersected) { - switch (s) + return whereIntersected switch { - case Sector.Top_Right: - return Math.Abs(forInsertion.Top - intersected.Bottom); - case Sector.Bottom_Right: - return Math.Abs(forInsertion.Right - intersected.Left); - case Sector.Bottom_Left: - return Math.Abs(forInsertion.Bottom - intersected.Top); - default: - return Math.Abs(forInsertion.Left - intersected.Right); - } + Sector.TopRight => Math.Abs(forInsertion.Top - intersected.Bottom), + Sector.BottomRight => Math.Abs(forInsertion.Right - intersected.Left), + Sector.BottomLeft => Math.Abs(forInsertion.Bottom - intersected.Top), + _ => Math.Abs(forInsertion.Left - intersected.Right), + }; } - private Point GetCornerNearestForCenterBySector(Sector s, Rectangle r) + private Point GetCornerNearestForCenterBySector(Sector rectangleLocationSector, Rectangle forInsertion) { - switch (s) + return rectangleLocationSector switch { - case Sector.Top_Right: - return new Point(r.Left, r.Bottom); - case Sector.Bottom_Right: - return new Point(r.Left, r.Top); - case Sector.Bottom_Left: - return new Point(r.Right, r.Top); - default: - return new Point(r.Right, r.Bottom); - } + Sector.TopRight => new Point(forInsertion.Left, forInsertion.Bottom), + Sector.BottomRight => new Point(forInsertion.Left, forInsertion.Top), + Sector.BottomLeft => new Point(forInsertion.Right, forInsertion.Top), + _ => new Point(forInsertion.Right, forInsertion.Bottom), + }; } - private bool IsMovingAxisIsXBySector(Sector s) + private bool IsMovingAxisIsXBySector(Sector forInsertionRectangleSector) { - return s == Sector.Bottom_Right || s == Sector.Top_Left; + return forInsertionRectangleSector == Sector.BottomRight || forInsertionRectangleSector == Sector.TopLeft; } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 1a5449582..52d1f5357 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -11,36 +11,27 @@ public class CircularCloudLayouter private readonly RectangleStorage storage = new(); private readonly BruteForceNearestFinder nearestFinder; + public CircleLayer CurrentLayer { get; } + public CircularCloudLayouter(Point center) { this.center = center; nearestFinder = new BruteForceNearestFinder(); + CurrentLayer = new(center, storage); } internal CircularCloudLayouter(Point center, RectangleStorage storage) : this(center) { this.storage = storage; + CurrentLayer = new(center, storage); } - public CircleLayer CurrentLayer { get; private set; } - public Rectangle PutNextRectangle(Size rectangleSize) { ValidateRectangleSize(rectangleSize); - Point firstRectanglePosition; - var isFirstRectangle = IsFirstRectangle(); - if (isFirstRectangle) - { - CreateFirstLayer(rectangleSize); - firstRectanglePosition = PutRectangleToCenter(rectangleSize); - } - else - { - firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); - } - + var firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); var id = SaveRectangle(firstRectanglePosition, rectangleSize); - var rectangleWithOptimalPosition = OptimiseRectanglePosition(id, isFirstRectangle); + var rectangleWithOptimalPosition = OptimiseRectanglePosition(id); return rectangleWithOptimalPosition; } @@ -50,80 +41,83 @@ private int SaveRectangle(Point firstLocation, Size rectangleSize) return id; } - public Rectangle OptimiseRectanglePosition(int id, bool isFirstRectangle) + private Rectangle OptimiseRectanglePosition(int id) { - if (isFirstRectangle) return storage.GetById(id); PutRectangleOnCircleWithoutIntersection(id); return TryMoveRectangleCloserToCenter(id); } public Rectangle PutRectangleOnCircleWithoutIntersection(int id) { - var r = storage.GetById(id); - var intersected = GetRectangleIntersection(r); + var forOptimise = storage.GetById(id); + var intersected = GetRectangleIntersection(forOptimise); - while (RectangleHasIntersection(intersected)) + while (intersected != default && intersected.Value != default) { - var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(r, intersected.Value); - r.Location = possiblePosition; - intersected = GetRectangleIntersection(r); + var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(forOptimise, intersected.Value); + forOptimise.Location = possiblePosition; + intersected = GetRectangleIntersection(forOptimise); } CurrentLayer.OnSuccessInsertRectangle(id); - return r; + return forOptimise; } - private bool RectangleHasIntersection(Rectangle? intersected) + internal Rectangle TryMoveRectangleCloserToCenter(int id) { - return intersected != default && intersected.Value != default; + var rectangleForMoving = storage.GetById(id); + var toCenter = GetDirectionsForMovingToCenter(rectangleForMoving); + foreach (var direction in toCenter) + { + rectangleForMoving.Location = MoveToCenterByDirection(rectangleForMoving, direction); + } + return rectangleForMoving; } - public Rectangle TryMoveRectangleCloserToCenter(int id) + private Point MoveToCenterByDirection(Rectangle forMoving, Direction toCenter) { - var rectangleForMoving = storage.GetById(id); - var directionsForMoving = GetDirectionsForMovingToCenter(rectangleForMoving); - var distancesForMove = directionsForMoving - .Select(d => (Nearest: nearestFinder.FindNearestByDirection(rectangleForMoving, d, storage.GetAll()), - Direction: d)) - .Where(tuple => tuple.Nearest != null) - .Select(t => ( - DistanceCalculator: nearestFinder.GetMinDistanceCalculatorBy(t.Direction), t.Nearest, t.Direction)) - .Select(t => (Distance: t.DistanceCalculator(t.Nearest.Value, rectangleForMoving), t.Direction)) - .ToArray(); - rectangleForMoving.Location = MoveByDirections(rectangleForMoving.Location, distancesForMove); - return rectangleForMoving; + var nearest = nearestFinder.FindNearestByDirection(forMoving, toCenter, storage.GetAll()); + if (nearest == null) return forMoving.Location; + var distanceCalculator = nearestFinder.GetMinDistanceCalculatorBy(toCenter); + var distanceForMove = distanceCalculator(nearest.Value, forMoving); + return MoveByDirection(forMoving.Location, distanceForMove, toCenter); } - private Point MoveByDirections(Point p, (int Distance, Direction Direction)[] t) + private Point MoveByDirection(Point forMoving, int distance, Direction toCenter) { - foreach (var moveInfo in t) + var factorForDistanceByX = toCenter switch { - var factorForDistanceByX = moveInfo.Direction == Direction.Left ? -1 : - moveInfo.Direction == Direction.Right ? 1 : 0; - var factorForDistanceByY = moveInfo.Direction == Direction.Top ? -1 : - moveInfo.Direction == Direction.Bottom ? 1 : 0; - p.X += moveInfo.Distance * factorForDistanceByX; - p.Y += moveInfo.Distance * factorForDistanceByY; - } - - return p; + Direction.Left => -1, + Direction.Right => 1, + _ => 0 + }; + var factorForDistanceByY = toCenter switch + { + Direction.Top => -1, + Direction.Bottom => 1, + _ => 0 + }; + forMoving.X += distance * factorForDistanceByX; + forMoving.Y += distance * factorForDistanceByY; + + return forMoving; } - private List GetDirectionsForMovingToCenter(Rectangle r) + private List GetDirectionsForMovingToCenter(Rectangle forMoving) { var directions = new List(); - if (r.Bottom < center.Y) directions.Add(Direction.Bottom); - if (r.Left > center.X) directions.Add(Direction.Left); - if (r.Right < center.X) directions.Add(Direction.Right); - if (r.Top > center.Y) directions.Add(Direction.Top); + if (forMoving.Bottom < center.Y) directions.Add(Direction.Bottom); + if (forMoving.Left > center.X) directions.Add(Direction.Left); + if (forMoving.Right < center.X) directions.Add(Direction.Right); + if (forMoving.Top > center.Y) directions.Add(Direction.Top); return directions; } - private void ValidateRectangleSize(Size s) + private void ValidateRectangleSize(Size forInsertion) { - if (s.Width <= 0 || s.Height <= 0) - throw new ArgumentException($"Rectangle has incorrect size: width = {s.Width}, height = {s.Height}"); + if (forInsertion.Width <= 0 || forInsertion.Height <= 0) + throw new ArgumentException($"Rectangle has incorrect size: width = {forInsertion.Width}, height = {forInsertion.Height}"); } private Rectangle? GetRectangleIntersection(Rectangle forInsertion) @@ -131,24 +125,4 @@ private void ValidateRectangleSize(Size s) return storage.GetAll() .FirstOrDefault(r => forInsertion.IntersectsWith(r) && forInsertion != r); } - - private void CreateFirstLayer(Size firstRectangle) - { - var radius = Math.Ceiling(Math.Sqrt(firstRectangle.Width * firstRectangle.Width + - firstRectangle.Height * firstRectangle.Height) / 2.0); - CurrentLayer = new CircleLayer(center, (int)radius, storage); - } - - private Point PutRectangleToCenter(Size rectangleSize) - { - var rectangleX = center.X - rectangleSize.Width / 2; - var rectangleY = center.Y - rectangleSize.Height / 2; - - return new Point(rectangleX, rectangleY); - } - - private bool IsFirstRectangle() - { - return storage.GetAll().FirstOrDefault() == default; - } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudVisualization.cs b/cs/TagsCloudVisualization/CircularCloudVisualization.cs deleted file mode 100644 index 3a9c3b908..000000000 --- a/cs/TagsCloudVisualization/CircularCloudVisualization.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Runtime.CompilerServices; -using System.Security.Cryptography; -using static TagsCloudVisualization.CircleLayer; - -namespace TagsCloudVisualization -{ - public class CircularCloudVisualization - { - private readonly Color BACKGROUND_COLOR = Color.White; - private readonly Color RECTANGLE_COLOR = Color.DarkBlue; - private readonly Size ImageSize; - private RectangleStorage rectangleStorage; - private int sizeFactor; - - public CircularCloudVisualization(RectangleStorage rectangles, Size imageSize) - { - rectangleStorage = rectangles; - ImageSize = imageSize; - this.sizeFactor = sizeFactor; - } - - public void CreateImage(string file = null) - { - var filePath = file ?? Path.Combine(Path.GetTempPath(), "testImage1010.png"); - using (var image = new Bitmap(ImageSize.Width, ImageSize.Height)) - { - using (Graphics graphics = Graphics.FromImage(image)) - { - graphics.Clear(BACKGROUND_COLOR); - DrawGrid(graphics); - Pen pen = new Pen(RECTANGLE_COLOR); - var rectangles = NormalizeSizes(rectangleStorage.GetAll()); - graphics.DrawRectangle(new Pen(Color.Brown),rectangles.First()); - graphics.DrawRectangles(pen, rectangles.Skip(1).ToArray()); - } - image.Save(filePath, ImageFormat.Png); - } - } - - private void DrawGrid(Graphics g, int cellsCount = 100, int cellSize = 10) - { - Pen p = new Pen(Color.DarkGray); - - for (int y = 0; y < cellsCount; ++y) - { - g.DrawLine(p, 0, y * cellSize, cellsCount * cellSize, y * cellSize); - } - - for (int x = 0; x < cellsCount; ++x) - { - g.DrawLine(p, x * cellSize, 0, x * cellSize, cellsCount * cellSize); - } - } - - public void CreateImageWithSaveEveryStep(CircularCloudLayouter layouter, Size[] sizes) - { - var startName = "testImageStep"; - var extension = ".png"; - using (var image = new Bitmap(ImageSize.Width, ImageSize.Height)) - { - using (Graphics graphics = Graphics.FromImage(image)) - { - graphics.Clear(BACKGROUND_COLOR); - DrawGrid(graphics); - Pen pen = new Pen(RECTANGLE_COLOR); - for (var i = 0; i < sizes.Length; i++) - { - var r = layouter.PutNextRectangle(sizes[i]); - var currentFileName = $"{startName}{i}{extension}"; - graphics.DrawRectangle(new Pen(GetColorBySector(layouter.CurrentLayer.CurrentSector)), r); - var filePath = Path.Combine(Path.GetTempPath(), currentFileName); - image.Save(filePath, ImageFormat.Png); - } - } - - } - } - - private Color GetColorBySector(CircleLayer.Sector s) - { - switch (s) - { - case Sector.Top_Right: - return Color.Chartreuse; - case Sector.Bottom_Right: - return Color.Brown; - case Sector.Bottom_Left: - return Color.DeepPink; - default: - return Color.DodgerBlue; - } - } - - private Rectangle[] NormalizeSizes(IEnumerable source) - { - double XLength = source.Max(r => r.Right) - source.Min(r => r.Left); - double YLength = source.Max(r => r.Bottom) - source.Min(r => r.Top); - var boundShift = 10; - var factorX = ImageSize.Width > XLength - ? (int)Math.Floor((ImageSize.Width - boundShift) / XLength) - : 1; - var factorY = ImageSize.Height> YLength - ? (int)Math.Floor((ImageSize.Height - boundShift) / YLength) - : 1; - return source.Select(r => new Rectangle(new Point(r.X * factorX,r.Y * factorY), - new Size(r.Width * factorX, r.Height * factorY))).ToArray(); - } - } -} diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs index 66b9731c4..43dacc87b 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -44,7 +44,7 @@ public void CreateImage(string? filePath = null, bool withSaveSteps = false) private void SaveImage(Bitmap image, string? filePath = null) { var rnd = new Random(); - filePath = filePath ?? Path.Combine(Path.GetTempPath(), $"testImage{rnd.Next()}.png"); + filePath ??= Path.Combine(Path.GetTempPath(), $"testImage{rnd.Next()}.png"); image.Save(filePath, ImageFormat.Png); } @@ -52,11 +52,11 @@ private Rectangle[] NormalizeSizes(IEnumerable source) { var sourceToArray = source.ToArray(); - var XLength = sourceToArray.Max(r => r.Right) - sourceToArray.Min(r => r.Left); - var YLength = sourceToArray.Max(r => r.Bottom) - sourceToArray.Min(r => r.Top); + var xLength = sourceToArray.Max(r => r.Right) - sourceToArray.Min(r => r.Left); + var yLength = sourceToArray.Max(r => r.Bottom) - sourceToArray.Min(r => r.Top); - var factorX = GetNormalizeFactorByAxis(imageSize.Width, XLength); - var factorY = GetNormalizeFactorByAxis(imageSize.Height, YLength); + var factorX = GetNormalizeFactorByAxis(imageSize.Width, xLength); + var factorY = GetNormalizeFactorByAxis(imageSize.Height, yLength); return sourceToArray.Select(r => new Rectangle( new Point(r.X * factorX, r.Y * factorY), @@ -64,7 +64,7 @@ private Rectangle[] NormalizeSizes(IEnumerable source) .ToArray(); } - private int GetNormalizeFactorByAxis(int imageSizeOnAxis, int rectanglesSizeOnAxis) + private static int GetNormalizeFactorByAxis(int imageSizeOnAxis, int rectanglesSizeOnAxis) { const int boundShift = 10; double imageSizeOnAxisWithShiftForBounds = imageSizeOnAxis - boundShift; diff --git a/cs/TagsCloudVisualization/PointExtensions.cs b/cs/TagsCloudVisualization/PointExtensions.cs new file mode 100644 index 000000000..c038ba1af --- /dev/null +++ b/cs/TagsCloudVisualization/PointExtensions.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization +{ + public static class PointExtensions + { + public static int CalculateDistanceBetween(this Point p1, Point p2) + { + return (int)Math.Ceiling(Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y))); + } + } +} From 9d33c50dc111e09f099713f70b31f66de1a90c64 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 21 Nov 2024 03:15:44 +0500 Subject: [PATCH 23/33] Replace DrawGrid to extensions --- .../CircularCloudVisualizer.cs | 1 + .../GraphicsExtensions.cs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 cs/TagsCloudVisualization/GraphicsExtensions.cs diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs index 43dacc87b..73c24a51e 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -27,6 +27,7 @@ public void CreateImage(string? filePath = null, bool withSaveSteps = false) using var image = new Bitmap(imageSize.Width, imageSize.Height); using var graphics = Graphics.FromImage(image); graphics.Clear(backgroundColor); + graphics.DrawGrid(); var pen = new Pen(rectangleColor); for (var i = 0; i < rectangles.Length; i++) diff --git a/cs/TagsCloudVisualization/GraphicsExtensions.cs b/cs/TagsCloudVisualization/GraphicsExtensions.cs new file mode 100644 index 000000000..9f27921ef --- /dev/null +++ b/cs/TagsCloudVisualization/GraphicsExtensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization +{ + public static class GraphicsExtensions + { + public static void DrawGrid(this Graphics graphics, int cellsCount = 100, int cellSize = 10) + { + Pen p = new Pen(Color.DarkGray); + + for (int y = 0; y < cellsCount; ++y) + { + graphics.DrawLine(p, 0, y * cellSize, cellsCount * cellSize, y * cellSize); + } + + for (int x = 0; x < cellsCount; ++x) + { + graphics.DrawLine(p, x * cellSize, 0, x * cellSize, cellsCount * cellSize); + } + } + } +} From d4550a04641f662e777759c2280af88e555c0e25 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 21 Nov 2024 13:23:55 +0500 Subject: [PATCH 24/33] Remove storage --- cs/TagsCloudVisualization/CircleLayer.cs | 70 ++++++++++--------- .../CircularCloudLayouter.cs | 43 +++++------- .../CircularCloudVisualizer.cs | 6 +- cs/TagsCloudVisualization/RectangleStorage.cs | 67 ------------------ cs/TagsCloudVisualization/RectangleWrapper.cs | 46 ++++++++++++ .../Tests/CircleLayerTests.cs | 49 +++++++------ .../Tests/CircularCloudLayouterTests.cs | 35 +++++----- ...CircularCloudLayouterVisualizationTests.cs | 43 ++++++------ 8 files changed, 168 insertions(+), 191 deletions(-) delete mode 100644 cs/TagsCloudVisualization/RectangleStorage.cs create mode 100644 cs/TagsCloudVisualization/RectangleWrapper.cs diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index 34c66b478..d93d94fb9 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -20,10 +20,10 @@ public enum Sector private Sector currentSector; - private readonly RectangleStorage storage; + private readonly List storage; private readonly List layerRectangles = []; - private CircleLayer(Point center, int radius, RectangleStorage storage) + private CircleLayer(Point center, int radius, List storage) { Center = center; Radius = radius; @@ -31,16 +31,14 @@ private CircleLayer(Point center, int radius, RectangleStorage storage) this.storage = storage; } - public CircleLayer(Point center, RectangleStorage storage) : this(center, 0, storage) - { } + public CircleLayer(Point center, List storage) : this(center, 0, storage) + { + } - public void OnSuccessInsertRectangle(int addedRectangleId) + public void OnSuccessInsertRectangle() { - if (addedRectangleId != 0) - { - currentSector = GetNextClockwiseSector(); - } - layerRectangles.Add(addedRectangleId); + if (storage.Count != 1) currentSector = GetNextClockwiseSector(); + layerRectangles.Add(storage.Count - 1); if (ShouldCreateNewLayer()) CreateNextLayerAndChangeCurrentOnNext(); } @@ -68,20 +66,21 @@ private void CreateNextLayerAndChangeCurrentOnNext() private int CalculateRadiusForNextLayer() { return layerRectangles - .Select(id => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage.GetById(id))) + .Select(ind => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage[ind])) .Min(); } private List RemoveRectangleInCircle() { return layerRectangles - .Where(id => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage.GetById(id)) > Radius) + .Where(i => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage[i]) > Radius) .ToList(); } private int CalculateDistanceBetweenCenterAndRectangleFarCorner(Rectangle rectangle) { - var distanceToCorners = new List { + var distanceToCorners = new List + { Center.CalculateDistanceBetween(new Point(rectangle.Right, rectangle.Top)), Center.CalculateDistanceBetween(new Point(rectangle.Right, rectangle.Bottom)), Center.CalculateDistanceBetween(new Point(rectangle.Left, rectangle.Bottom)), @@ -97,12 +96,10 @@ private Point PutToCenter(Size rectangleSize) return new Point(rectangleX, rectangleY); } + public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) { - if (Radius == 0) - { - return PutToCenter(rectangleSize); - } + if (Radius == 0) return PutToCenter(rectangleSize); var rectangleStartPositionOnCircle = GetStartSectorPointOnCircleBySector(currentSector); return currentSector switch { @@ -112,10 +109,10 @@ public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) rectangleStartPositionOnCircle, Sector.BottomLeft => new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, - rectangleStartPositionOnCircle.Y), + rectangleStartPositionOnCircle.Y), _ => new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, - rectangleStartPositionOnCircle.Y - rectangleSize.Height), + rectangleStartPositionOnCircle.Y - rectangleSize.Height) }; } @@ -126,7 +123,7 @@ private Point GetStartSectorPointOnCircleBySector(Sector s) Sector.TopRight => new Point(Center.X, Center.Y - Radius), Sector.BottomRight => new Point(Center.X + Radius, Center.Y), Sector.BottomLeft => new Point(Center.X, Center.Y + Radius), - _ => new Point(Center.X - Radius, Center.Y), + _ => new Point(Center.X - Radius, Center.Y) }; } @@ -138,6 +135,7 @@ public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rec if (ShouldCreateNewLayer()) CreateNextLayerAndChangeCurrentOnNext(); forInsertion.Location = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); } + var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); return nextPosition; @@ -150,14 +148,16 @@ private bool IsNextPositionMoveToAnotherSector(Point next, Size forInsertionSize private bool IsRectangleIntersectSymmetryAxis(Rectangle rectangle) { - return (rectangle.Left < Center.X && rectangle.Right > Center.X) || (rectangle.Bottom > Center.Y && rectangle.Top < Center.Y); + return (rectangle.Left < Center.X && rectangle.Right > Center.X) || + (rectangle.Bottom > Center.Y && rectangle.Top < Center.Y); } private Point CalculateNewPositionWithoutIntersectionBySector(Sector whereIntersected, Rectangle forInsertion, Rectangle intersected) { - bool isMovingAxisIsX = IsMovingAxisIsXBySector(whereIntersected); - var distanceForMoving = CalculateDistanceForMovingBySector(whereIntersected, forInsertion, intersected); + var isMovingAxisIsX = IsMovingAxisIsXBySector(whereIntersected); + var distanceForMoving = + CalculateDistanceForMoveClockwiseToPositionWithoutIntersection(whereIntersected, forInsertion, intersected); int distanceForBringBackOnCircle; if (IsRectangleBetweenSectors(distanceForMoving, forInsertion.Location, isMovingAxisIsX)) @@ -171,6 +171,7 @@ private Point CalculateNewPositionWithoutIntersectionBySector(Sector whereInters distanceForBringBackOnCircle = CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX, forInsertion); } + distanceForMoving *= CalculateMoveMultiplierForMoveClockwise(isMovingAxisIsX, forInsertion); distanceForBringBackOnCircle *= CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion); return isMovingAxisIsX @@ -186,7 +187,8 @@ private bool IsRectangleBetweenSectors(int distanceForMoving, Point forInsertion return distanceForMoving > distanceToCenter; } - private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX, Rectangle forInsertion) + private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX, + Rectangle forInsertion) { Func getAxisForBringBackOnCircle = isMovingAxisIsX ? p => p.Y : p => p.X; Func getStaticAxis = isMovingAxisIsX ? p => p.X : p => p.Y; @@ -196,17 +198,16 @@ private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCo getAxisForBringBackOnCircle(Center)); var distanceBetweenCornerAndCenter = Center.CalculateDistanceBetween(nearestForCenterCorner); if (distanceBetweenCornerAndCenter > Radius) - { return CalculateMoveMultiplierForMoveToCenter(!isMovingAxisIsX, forInsertion) * WhenRectangleOutsideCircle(distanceOnStaticAxis, distanceBetweenCornerAndCenter, - distanceOnAxisForBringBackOnCircle); - } + distanceOnAxisForBringBackOnCircle); return CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion) * WhenRectangleInCircle(distanceOnStaticAxis, distanceOnAxisForBringBackOnCircle); } - private int WhenRectangleOutsideCircle(int distanceOnStaticAxis, int distanceBetweenCornerAndCenter, int distanceOnAxisForBringBackOnCircle) + private int WhenRectangleOutsideCircle(int distanceOnStaticAxis, int distanceBetweenCornerAndCenter, + int distanceOnAxisForBringBackOnCircle) { var inCircleCathetusPart = Math.Sqrt(Math.Abs(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)); return CalculatePartCathetus(distanceBetweenCornerAndCenter, inCircleCathetusPart, @@ -223,7 +224,8 @@ private int CalculatePartCathetus(int hypotenuse, double a, int b) return (int)Math.Ceiling(Math.Sqrt(Math.Abs(hypotenuse * hypotenuse - a * a))) - b; } - private Point CalculateCornerNearestForCenterAfterMove(Sector whereIntersected, int distanceForMoving, Rectangle forMove) + private Point CalculateCornerNearestForCenterAfterMove(Sector whereIntersected, int distanceForMoving, + Rectangle forMove) { var isAxisForMoveIsX = IsMovingAxisIsXBySector(whereIntersected); var moveMultiplier = CalculateMoveMultiplierForMoveClockwise(isAxisForMoveIsX, forMove); @@ -257,17 +259,19 @@ private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Recta if (forMove.Top > Center.Y && forMove.Right < Center.X) return -1; return isAxisForMoveIsX ? forMove.Bottom < Center.Y ? 1 : -1 : forMove.Left > Center.X ? -1 : 1; - } - private int CalculateDistanceForMovingBySector(Sector whereIntersected, Rectangle forInsertion, Rectangle intersected) + private int CalculateDistanceForMoveClockwiseToPositionWithoutIntersection( + Sector whereIntersected, + Rectangle forInsertion, + Rectangle intersected) { return whereIntersected switch { Sector.TopRight => Math.Abs(forInsertion.Top - intersected.Bottom), Sector.BottomRight => Math.Abs(forInsertion.Right - intersected.Left), Sector.BottomLeft => Math.Abs(forInsertion.Bottom - intersected.Top), - _ => Math.Abs(forInsertion.Left - intersected.Right), + _ => Math.Abs(forInsertion.Left - intersected.Right) }; } @@ -278,7 +282,7 @@ private Point GetCornerNearestForCenterBySector(Sector rectangleLocationSector, Sector.TopRight => new Point(forInsertion.Left, forInsertion.Bottom), Sector.BottomRight => new Point(forInsertion.Left, forInsertion.Top), Sector.BottomLeft => new Point(forInsertion.Right, forInsertion.Top), - _ => new Point(forInsertion.Right, forInsertion.Bottom), + _ => new Point(forInsertion.Right, forInsertion.Bottom) }; } diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 52d1f5357..88b741577 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -8,7 +8,7 @@ namespace TagsCloudVisualization; public class CircularCloudLayouter { private readonly Point center; - private readonly RectangleStorage storage = new(); + private readonly List storage = []; private readonly BruteForceNearestFinder nearestFinder; public CircleLayer CurrentLayer { get; } @@ -20,7 +20,7 @@ public CircularCloudLayouter(Point center) CurrentLayer = new(center, storage); } - internal CircularCloudLayouter(Point center, RectangleStorage storage) : this(center) + internal CircularCloudLayouter(Point center, List storage) : this(center) { this.storage = storage; CurrentLayer = new(center, storage); @@ -29,43 +29,37 @@ internal CircularCloudLayouter(Point center, RectangleStorage storage) : this(ce public Rectangle PutNextRectangle(Size rectangleSize) { ValidateRectangleSize(rectangleSize); + var firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); - var id = SaveRectangle(firstRectanglePosition, rectangleSize); - var rectangleWithOptimalPosition = OptimiseRectanglePosition(id); + var forInsertion = new Rectangle(firstRectanglePosition, rectangleSize); + var rectangleWithOptimalPosition = OptimiseRectanglePosition(forInsertion); + storage.Add(rectangleWithOptimalPosition); + CurrentLayer.OnSuccessInsertRectangle(); return rectangleWithOptimalPosition; } - private int SaveRectangle(Point firstLocation, Size rectangleSize) + private Rectangle OptimiseRectanglePosition(Rectangle forInsertion) { - var id = storage.Add(new Rectangle(firstLocation, rectangleSize)); - return id; + PutRectangleOnCircleWithoutIntersection(forInsertion); + return TryMoveRectangleCloserToCenter(forInsertion); } - private Rectangle OptimiseRectanglePosition(int id) + public Rectangle PutRectangleOnCircleWithoutIntersection(RectangleWrapper forOptimise) { - PutRectangleOnCircleWithoutIntersection(id); - return TryMoveRectangleCloserToCenter(id); - } - - public Rectangle PutRectangleOnCircleWithoutIntersection(int id) - { - var forOptimise = storage.GetById(id); var intersected = GetRectangleIntersection(forOptimise); - while (intersected != default && intersected.Value != default) + while (intersected != null && intersected.Value != default) { var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(forOptimise, intersected.Value); forOptimise.Location = possiblePosition; intersected = GetRectangleIntersection(forOptimise); } - CurrentLayer.OnSuccessInsertRectangle(id); return forOptimise; } - internal Rectangle TryMoveRectangleCloserToCenter(int id) + internal Rectangle TryMoveRectangleCloserToCenter(RectangleWrapper rectangleForMoving) { - var rectangleForMoving = storage.GetById(id); var toCenter = GetDirectionsForMovingToCenter(rectangleForMoving); foreach (var direction in toCenter) { @@ -77,14 +71,14 @@ internal Rectangle TryMoveRectangleCloserToCenter(int id) private Point MoveToCenterByDirection(Rectangle forMoving, Direction toCenter) { - var nearest = nearestFinder.FindNearestByDirection(forMoving, toCenter, storage.GetAll()); + var nearest = nearestFinder.FindNearestByDirection(forMoving, toCenter, storage.Select(r => (Rectangle)r)); if (nearest == null) return forMoving.Location; var distanceCalculator = nearestFinder.GetMinDistanceCalculatorBy(toCenter); var distanceForMove = distanceCalculator(nearest.Value, forMoving); return MoveByDirection(forMoving.Location, distanceForMove, toCenter); } - private Point MoveByDirection(Point forMoving, int distance, Direction toCenter) + private static Point MoveByDirection(Point forMoving, int distance, Direction toCenter) { var factorForDistanceByX = toCenter switch { @@ -114,7 +108,7 @@ private List GetDirectionsForMovingToCenter(Rectangle forMoving) return directions; } - private void ValidateRectangleSize(Size forInsertion) + private static void ValidateRectangleSize(Size forInsertion) { if (forInsertion.Width <= 0 || forInsertion.Height <= 0) throw new ArgumentException($"Rectangle has incorrect size: width = {forInsertion.Width}, height = {forInsertion.Height}"); @@ -122,7 +116,8 @@ private void ValidateRectangleSize(Size forInsertion) private Rectangle? GetRectangleIntersection(Rectangle forInsertion) { - return storage.GetAll() - .FirstOrDefault(r => forInsertion.IntersectsWith(r) && forInsertion != r); + if (storage.Count == 0) return null; + return storage.Select(r => (Rectangle)r).FirstOrDefault(r => forInsertion != r + && forInsertion.IntersectsWith(r)); } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs index 73c24a51e..f6a28b540 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -12,9 +12,9 @@ public class CircularCloudVisualizer private readonly Color backgroundColor = Color.White; private readonly Color rectangleColor = Color.DarkBlue; private readonly Size imageSize; - private readonly RectangleStorage rectangleStorage; + private readonly List rectangleStorage; - public CircularCloudVisualizer(RectangleStorage rectangles, Size imageSize) + public CircularCloudVisualizer(List rectangles, Size imageSize) { rectangleStorage = rectangles; this.imageSize = imageSize; @@ -22,7 +22,7 @@ public CircularCloudVisualizer(RectangleStorage rectangles, Size imageSize) public void CreateImage(string? filePath = null, bool withSaveSteps = false) { - var rectangles = NormalizeSizes(rectangleStorage.GetAll()); + var rectangles = NormalizeSizes(rectangleStorage.Select(r => (Rectangle)r)); using var image = new Bitmap(imageSize.Width, imageSize.Height); using var graphics = Graphics.FromImage(image); diff --git a/cs/TagsCloudVisualization/RectangleStorage.cs b/cs/TagsCloudVisualization/RectangleStorage.cs deleted file mode 100644 index a5ea62ad9..000000000 --- a/cs/TagsCloudVisualization/RectangleStorage.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Collections.Generic; -using System.Drawing; - -namespace TagsCloudVisualization; - -public class RectangleStorage -{ - private readonly List elements = new(); - - public int Add(Rectangle r) - { - elements.Add(r); - return elements.Count - 1; - } - - public IEnumerable GetAll() - { - foreach (var rectangle in elements) yield return rectangle; - } - - public RectangleWrapper GetById(int id) - { - return elements[id]; - } - - public class RectangleWrapper - { - public RectangleWrapper(Rectangle v) - { - Value = v; - } - - private Rectangle Value { get; set; } - - public Size Size - { - get => Value.Size; - set => Value = new Rectangle(Location, value); - } - - public Point Location - { - get => Value.Location; - set => Value = new Rectangle(value, Size); - } - - public int Top => Value.Top; - public int Bottom => Value.Bottom; - public int Left => Value.Left; - public int Right => Value.Right; - - public static implicit operator RectangleWrapper(Rectangle v) - { - return new RectangleWrapper(v); - } - - public static implicit operator Rectangle(RectangleWrapper r) - { - return r.Value; - } - - public override bool Equals(object? obj) - { - return (obj as RectangleWrapper)?.Value.Equals(Value) ?? (obj as Rectangle?)?.Equals(Value) ?? false; - } - } -} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/RectangleWrapper.cs b/cs/TagsCloudVisualization/RectangleWrapper.cs new file mode 100644 index 000000000..539083c01 --- /dev/null +++ b/cs/TagsCloudVisualization/RectangleWrapper.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace TagsCloudVisualization; + +public class RectangleWrapper +{ + public RectangleWrapper(Rectangle value) + { + Value = value; + } + + private Rectangle Value { get; set; } + + public Size Size + { + get => Value.Size; + set => Value = new Rectangle(Location, value); + } + + public Point Location + { + get => Value.Location; + set => Value = new Rectangle(value, Size); + } + + public int Top => Value.Top; + public int Bottom => Value.Bottom; + public int Left => Value.Left; + public int Right => Value.Right; + + public static implicit operator RectangleWrapper(Rectangle value) + { + return new RectangleWrapper(value); + } + + public static implicit operator Rectangle(RectangleWrapper wrapper) + { + return wrapper.Value; + } + + public override bool Equals(object? obj) + { + return (obj as RectangleWrapper)?.Value.Equals(Value) ?? (obj as Rectangle?)?.Equals(Value) ?? false; + } +} diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index 53fdac821..33717ca84 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -11,7 +11,7 @@ public class CircleLayerTests { private CircleLayer currentLayer; private Size defaultRectangleSize; - private RectangleStorage storage; + private List storage; public static IEnumerable SimpleIntersectionInSector { @@ -61,10 +61,12 @@ public static IEnumerable GetDataForIntersectionTests [SetUp] public void SetUp() { - var startRadius = 5; var center = new Point(5, 5); - storage = new RectangleStorage(); - currentLayer = new CircleLayer(center, startRadius, storage); + storage = new (); + currentLayer = new CircleLayer(center, storage); + var first = new Rectangle(currentLayer.CalculateTopLeftRectangleCornerPosition(new Size(8, 6)), new Size(8, 6)); + storage.Add(first); + currentLayer.OnSuccessInsertRectangle(first); defaultRectangleSize = new Size(3, 4); } @@ -74,14 +76,14 @@ public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); possibleRectangleLocation.Should() - .Be(GetCorrectRectangleLocationByExpectedSector(Sector.Top_Right, defaultRectangleSize)); + .Be(GetCorrectRectangleLocationByExpectedSector(Sector.TopRight, defaultRectangleSize)); } - [TestCase(1, Sector.Bottom_Right)] - [TestCase(2, Sector.Bottom_Left)] - [TestCase(3, Sector.Top_Left)] - [TestCase(4, Sector.Top_Right)] - [TestCase(0, Sector.Top_Right)] + [TestCase(1, Sector.BottomRight)] + [TestCase(2, Sector.BottomLeft)] + [TestCase(3, Sector.TopLeft)] + [TestCase(4, Sector.TopRight)] + [TestCase(0, Sector.TopRight)] public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int insertionsCount, Sector expected) { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, insertionsCount); @@ -99,9 +101,9 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterTo currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); var nextRectangleLocation = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); - var insertedRectangleId = storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); + storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); - currentLayer.OnSuccessInsertRectangle(insertedRectangleId); + currentLayer.OnSuccessInsertRectangle(storage.Last()); currentLayer.Radius.Should().Be(9); } @@ -118,20 +120,16 @@ private Sector GetSectorByInsertionsCount(int count) return (Sector)((count - 1) % 4); } - private Point GetCorrectRectangleLocationByExpectedSector(Sector s, Size size) + private Point GetCorrectRectangleLocationByExpectedSector(Sector expected, Size size) { - switch (s) + return expected switch { - case Sector.Top_Right: - return new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - size.Height); - case Sector.Bottom_Right: - return new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y); - case Sector.Bottom_Left: - return new Point(currentLayer.Center.X - size.Width, currentLayer.Center.Y + currentLayer.Radius); - default: - return new Point(currentLayer.Center.X - currentLayer.Radius - size.Width, - currentLayer.Center.Y - size.Height); - } + Sector.TopRight => new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - size.Height), + Sector.BottomRight => new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y), + Sector.BottomLeft => new Point(currentLayer.Center.X - size.Width, currentLayer.Center.Y + currentLayer.Radius), + _ => new Point(currentLayer.Center.X - currentLayer.Radius - size.Width, + currentLayer.Center.Y - size.Height), + }; } [Test] @@ -207,7 +205,8 @@ private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int i { var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); var rectangleForInsert = new Rectangle(location, sizes[i - 1]); - layer.OnSuccessInsertRectangle(storage.Add(rectangleForInsert)); + storage.Add(rectangleForInsert); + layer.OnSuccessInsertRectangle(storage.Last()); } return layer; diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index 0a8d66f17..6801e89ef 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -6,6 +6,8 @@ using NUnit.Framework.Interfaces; using System.IO; using System.Reflection; +using System.Collections.Generic; +using System.Diagnostics; namespace TagsCloudVisualization.Tests { @@ -13,13 +15,13 @@ public class CircularCloudLayouterTests { private CircularCloudLayouter layouter; private Point defaultCenter; - private RectangleStorage storage; + private List storage; [SetUp] public void SetUp() { defaultCenter = new Point(5, 5); - storage = new RectangleStorage(); + storage = []; layouter = new CircularCloudLayouter(defaultCenter, storage); } @@ -28,12 +30,12 @@ public void TearDown() { if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) { - var testObj = TestContext.CurrentContext.Test.Parent.Fixture as CircularCloudLayouterTests; + var testObj = TestContext.CurrentContext.Test.Parent?.Fixture as CircularCloudLayouterTests; var info = typeof(CircularCloudLayouterTests) .GetField("storage", BindingFlags.NonPublic | BindingFlags.Instance); - var st = info.GetValue(testObj); + var st = info?.GetValue(testObj); - var visualizator = new CircularCloudVisualization(st as RectangleStorage, new Size(1000, 1000)); + var visualizator = new CircularCloudVisualizer(st as List ?? [], new Size(1000, 1000)); var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); visualizator.CreateImage(pathFile); TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); @@ -68,14 +70,8 @@ public void PutNextRectangle_ShouldAddRectangleToCenter_WhenRectangleFirst() } [Test] - public void PutNextRectangle_ShouldCreateFirstCircleLayer_AfterPutFirstRectangle() + public void PutNextRectangle_ShouldCreateFirstCircleLayer_AfterCreation() { - var firstRectangleSize = new Size(6, 4); - - layouter.CurrentLayer.Should().BeNull(); - - layouter.PutNextRectangle(firstRectangleSize); - layouter.CurrentLayer.Should().NotBeNull(); } @@ -103,7 +99,7 @@ public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoo var rPos = layouter.CurrentLayer.CalculateTopLeftRectangleCornerPosition(firstRectangleSize); ; - var secondRectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(storage.Add(new (rPos, firstRectangleSize))).Location; + var secondRectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(new(new(rPos, firstRectangleSize))).Location; secondRectangleLocation.Should().Be(expected); } @@ -114,24 +110,25 @@ public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutInt var firstRectangleSize = new Size(6, 4); var expected = new Point(14, 1); layouter = new CircularCloudLayouter(defaultCenter, storage); - var sizes = new Size[] { new(4, 7), new(4, 4), new(4, 4), new(4, 4)}; + var sizes = new Size[] { new(4, 7), new(4, 4), new(4, 4), new(4, 4) }; layouter.PutNextRectangle(firstRectangleSize); layouter = InsertionsWithoutCompress(4, layouter, sizes, storage); var rectangleWithIntersection = new Rectangle(layouter.CurrentLayer.CalculateTopLeftRectangleCornerPosition(new(3, 3)), new(3, 3)); - var rectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(storage.Add(rectangleWithIntersection)).Location; + var rectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(rectangleWithIntersection).Location; rectangleLocation.Should().Be(expected); } - private CircularCloudLayouter InsertionsWithoutCompress(int insertionsCount, CircularCloudLayouter l, Size[] sizes, RectangleStorage storage) + private static CircularCloudLayouter InsertionsWithoutCompress(int insertionsCount, CircularCloudLayouter l, Size[] sizes, List storage) { for (var i = 0; i < insertionsCount; i++) { var pos = l.CurrentLayer.CalculateTopLeftRectangleCornerPosition(sizes[i]); - var r = new Rectangle(pos, sizes[i]); - l.PutRectangleOnCircleWithoutIntersection(storage.Add(r)); + var forInsertion = new Rectangle(pos, sizes[i]); + storage.Add(forInsertion); + l.PutRectangleOnCircleWithoutIntersection(forInsertion); } return l; @@ -150,4 +147,4 @@ public void PutNextRectangle_ShouldTryMoveRectangleCloserToCenter_WhenItPossible second.Location.Should().Be(expectedSecondRectangleLocation); } } -} +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs index 7c8c0325c..b08d35f44 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs @@ -1,41 +1,44 @@ using System; +using System.Collections.Generic; using System.Drawing; -using System.IO; -using System.Linq; using NUnit.Framework; namespace TagsCloudVisualization.Tests; public class CircularCloudLayouterVisualizationTests { - private readonly Size ImageSize = new(1000, 1000); + private Size imageSize; + private Point center; + private CircularCloudVisualizer visualizer; - [Test] - public void GenerateImage() + [SetUp] + public void SetUp() { - var center = new Point(ImageSize.Width / 2, ImageSize.Height / 2); - var visualizator = new CircularCloudVisualization(GenerateRectangles(center), ImageSize); - visualizator.CreateImage(); + imageSize = new(1000, 1000); + center = new Point(imageSize.Width / 2, imageSize.Height / 2); + visualizer = new CircularCloudVisualizer(GenerateRectangles(center, 100, 10, 100), imageSize); } - private RectangleStorage GenerateRectangles(Point center) + [Test] + public void GenerateImage() { - var rnd = new Random(); - var storage = new RectangleStorage(); - var layouter = new CircularCloudLayouter(center, storage); - for (var i = 0; i < 41; i++) layouter.PutNextRectangle(new Size(rnd.Next(50, 100), rnd.Next(50, 100))); - - return storage; + visualizer.CreateImage(); } [Test] public void GenerateImageWithSaveEveryStep() + { + visualizer.CreateImage(withSaveSteps: true); + } + + private static List GenerateRectangles(Point center, int maxSize, int minSize, int count) { var rnd = new Random(); - var center = new Point(ImageSize.Width / 2, ImageSize.Height / 2); - var visualizator = new CircularCloudVisualization(new RectangleStorage(), ImageSize); - var layouter = new CircularCloudLayouter(center, new RectangleStorage()); - visualizator.CreateImageWithSaveEveryStep(layouter, - new Size[41].Select(x => new Size(15, 100)).ToArray()); + var storage = new List(); + var layouter = new CircularCloudLayouter(center, storage); + for (var i = 0; i < count; i++) layouter.PutNextRectangle(new Size(rnd.Next(minSize, maxSize), + rnd.Next(minSize, maxSize))); + + return storage; } } \ No newline at end of file From 067800a75411e2fdbd86076764173a2ca3c77b67 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 21 Nov 2024 19:55:27 +0500 Subject: [PATCH 25/33] Fix intelisense and add compressor --- .../BruteForceNearestFinder.cs | 17 ++- cs/TagsCloudVisualization/CircleLayer.cs | 27 ++--- .../CircularCloudLayouter.cs | 105 ++++-------------- .../CircularCloudVisualizer.cs | 17 ++- cs/TagsCloudVisualization/CloudCompressor.cs | 67 +++++++++++ .../GraphicsExtensions.cs | 2 +- cs/TagsCloudVisualization/PointExtensions.cs | 4 +- cs/TagsCloudVisualization/RectangleWrapper.cs | 46 -------- .../Tests/BruteForceNearestFinderTests.cs | 10 +- .../Tests/CircleLayerTests.cs | 20 ++-- .../Tests/CircularCloudLayouterTests.cs | 46 ++------ 11 files changed, 143 insertions(+), 218 deletions(-) create mode 100644 cs/TagsCloudVisualization/CloudCompressor.cs delete mode 100644 cs/TagsCloudVisualization/RectangleWrapper.cs diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index 1f94c93b4..c8f3f7053 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -2,15 +2,12 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; -using System.Runtime.InteropServices.ComTypes; -using System.Text; -using System.Threading.Tasks; namespace TagsCloudVisualization { public class BruteForceNearestFinder { - public Rectangle? FindNearestByDirection(Rectangle r, Direction direction, IEnumerable rectangles) + public Rectangle? FindNearestByDirection(Rectangle r, Direction direction, List rectangles) { if (rectangles.FirstOrDefault() == default) return null; @@ -24,13 +21,13 @@ public class BruteForceNearestFinder public Func GetMinDistanceCalculatorBy(Direction direction) { - switch (direction) + return direction switch { - case Direction.Left: return (possibleNearest, rectangleForFind) => rectangleForFind.Left - possibleNearest.Right; - case Direction.Right: return (possibleNearest, rectangleForFind) => possibleNearest.Left - rectangleForFind.Right; - case Direction.Top: return (possibleNearest, rectangleForFind) => rectangleForFind.Top - possibleNearest.Bottom; - default: return (possibleNearest, rectangleForFind) => possibleNearest.Top - rectangleForFind.Bottom; - } + Direction.Left => (possibleNearest, rectangleForFind) => rectangleForFind.Left - possibleNearest.Right, + Direction.Right => (possibleNearest, rectangleForFind) => possibleNearest.Left - rectangleForFind.Right, + Direction.Top => (possibleNearest, rectangleForFind) => rectangleForFind.Top - possibleNearest.Bottom, + _ => (possibleNearest, rectangleForFind) => possibleNearest.Top - rectangleForFind.Bottom, + }; } } } diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index d93d94fb9..edb6a94ef 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -20,10 +20,10 @@ public enum Sector private Sector currentSector; - private readonly List storage; + private readonly List storage; private readonly List layerRectangles = []; - private CircleLayer(Point center, int radius, List storage) + private CircleLayer(Point center, int radius, List storage) { Center = center; Radius = radius; @@ -31,12 +31,12 @@ private CircleLayer(Point center, int radius, List storage) this.storage = storage; } - public CircleLayer(Point center, List storage) : this(center, 0, storage) - { - } + public CircleLayer(Point center, List storage) : this(center, 0, storage) + { } public void OnSuccessInsertRectangle() { + if (storage.Count == 0) throw new InvalidOperationException("Rectangle was not added"); if (storage.Count != 1) currentSector = GetNextClockwiseSector(); layerRectangles.Add(storage.Count - 1); if (ShouldCreateNewLayer()) @@ -97,7 +97,7 @@ private Point PutToCenter(Size rectangleSize) return new Point(rectangleX, rectangleY); } - public Point CalculateTopLeftRectangleCornerPosition(Size rectangleSize) + public Point AddNextRectangle(Size rectangleSize) { if (Radius == 0) return PutToCenter(rectangleSize); var rectangleStartPositionOnCircle = GetStartSectorPointOnCircleBySector(currentSector); @@ -129,11 +129,11 @@ private Point GetStartSectorPointOnCircleBySector(Sector s) public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rectangle intersected) { - if (IsNextPositionMoveToAnotherSector(forInsertion.Location, forInsertion.Size)) + if (IsRectangleIntersectSymmetryAxis(new Rectangle(forInsertion.Location, forInsertion.Size))) { currentSector = GetNextClockwiseSector(); if (ShouldCreateNewLayer()) CreateNextLayerAndChangeCurrentOnNext(); - forInsertion.Location = CalculateTopLeftRectangleCornerPosition(forInsertion.Size); + forInsertion.Location = AddNextRectangle(forInsertion.Size); } var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); @@ -141,11 +141,6 @@ public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rec return nextPosition; } - private bool IsNextPositionMoveToAnotherSector(Point next, Size forInsertionSize) - { - return IsRectangleIntersectSymmetryAxis(new Rectangle(next, forInsertionSize)); - } - private bool IsRectangleIntersectSymmetryAxis(Rectangle rectangle) { return (rectangle.Left < Center.X && rectangle.Right > Center.X) || @@ -262,9 +257,7 @@ private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Recta } private int CalculateDistanceForMoveClockwiseToPositionWithoutIntersection( - Sector whereIntersected, - Rectangle forInsertion, - Rectangle intersected) + Sector whereIntersected, Rectangle forInsertion, Rectangle intersected) { return whereIntersected switch { @@ -275,7 +268,7 @@ private int CalculateDistanceForMoveClockwiseToPositionWithoutIntersection( }; } - private Point GetCornerNearestForCenterBySector(Sector rectangleLocationSector, Rectangle forInsertion) + private static Point GetCornerNearestForCenterBySector(Sector rectangleLocationSector, Rectangle forInsertion) { return rectangleLocationSector switch { diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 88b741577..af4fa6261 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -7,105 +7,48 @@ namespace TagsCloudVisualization; public class CircularCloudLayouter { - private readonly Point center; - private readonly List storage = []; - private readonly BruteForceNearestFinder nearestFinder; - + private readonly List storage; + private readonly CloudCompressor compressor; + public CircleLayer CurrentLayer { get; } - public CircularCloudLayouter(Point center) - { - this.center = center; - nearestFinder = new BruteForceNearestFinder(); - CurrentLayer = new(center, storage); - } + public CircularCloudLayouter(Point center) : this(center, []) + { } - internal CircularCloudLayouter(Point center, List storage) : this(center) + internal CircularCloudLayouter(Point center, List storage) { this.storage = storage; CurrentLayer = new(center, storage); + compressor = new(center, storage); } - public Rectangle PutNextRectangle(Size rectangleSize) + public Rectangle PutNextRectangle(Size nextRectangle) { - ValidateRectangleSize(rectangleSize); - - var firstRectanglePosition = CurrentLayer.CalculateTopLeftRectangleCornerPosition(rectangleSize); - var forInsertion = new Rectangle(firstRectanglePosition, rectangleSize); - var rectangleWithOptimalPosition = OptimiseRectanglePosition(forInsertion); + ValidateRectangleSize(nextRectangle); + + var inserted = PutRectangleWithoutIntersection(nextRectangle); + var rectangleWithOptimalPosition = compressor.CompressCloudAfterInsertion(inserted); + storage.Add(rectangleWithOptimalPosition); CurrentLayer.OnSuccessInsertRectangle(); - return rectangleWithOptimalPosition; - } - private Rectangle OptimiseRectanglePosition(Rectangle forInsertion) - { - PutRectangleOnCircleWithoutIntersection(forInsertion); - return TryMoveRectangleCloserToCenter(forInsertion); + return rectangleWithOptimalPosition; } - - public Rectangle PutRectangleOnCircleWithoutIntersection(RectangleWrapper forOptimise) + + public Rectangle PutRectangleWithoutIntersection(Size forInsertionSize) { - var intersected = GetRectangleIntersection(forOptimise); + var firstRectanglePosition = CurrentLayer.AddNextRectangle(forInsertionSize); + var forInsertion = new Rectangle(firstRectanglePosition, forInsertionSize); + var intersected = GetRectangleIntersection(forInsertion); while (intersected != null && intersected.Value != default) { - var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(forOptimise, intersected.Value); - forOptimise.Location = possiblePosition; - intersected = GetRectangleIntersection(forOptimise); + var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected.Value); + forInsertion.Location = possiblePosition; + intersected = GetRectangleIntersection(forInsertion); } - return forOptimise; - } - - internal Rectangle TryMoveRectangleCloserToCenter(RectangleWrapper rectangleForMoving) - { - var toCenter = GetDirectionsForMovingToCenter(rectangleForMoving); - foreach (var direction in toCenter) - { - rectangleForMoving.Location = MoveToCenterByDirection(rectangleForMoving, direction); - } - return rectangleForMoving; - } - - - private Point MoveToCenterByDirection(Rectangle forMoving, Direction toCenter) - { - var nearest = nearestFinder.FindNearestByDirection(forMoving, toCenter, storage.Select(r => (Rectangle)r)); - if (nearest == null) return forMoving.Location; - var distanceCalculator = nearestFinder.GetMinDistanceCalculatorBy(toCenter); - var distanceForMove = distanceCalculator(nearest.Value, forMoving); - return MoveByDirection(forMoving.Location, distanceForMove, toCenter); - } - - private static Point MoveByDirection(Point forMoving, int distance, Direction toCenter) - { - var factorForDistanceByX = toCenter switch - { - Direction.Left => -1, - Direction.Right => 1, - _ => 0 - }; - var factorForDistanceByY = toCenter switch - { - Direction.Top => -1, - Direction.Bottom => 1, - _ => 0 - }; - forMoving.X += distance * factorForDistanceByX; - forMoving.Y += distance * factorForDistanceByY; - - return forMoving; - } - - private List GetDirectionsForMovingToCenter(Rectangle forMoving) - { - var directions = new List(); - if (forMoving.Bottom < center.Y) directions.Add(Direction.Bottom); - if (forMoving.Left > center.X) directions.Add(Direction.Left); - if (forMoving.Right < center.X) directions.Add(Direction.Right); - if (forMoving.Top > center.Y) directions.Add(Direction.Top); - return directions; + return forInsertion; } private static void ValidateRectangleSize(Size forInsertion) @@ -117,7 +60,7 @@ private static void ValidateRectangleSize(Size forInsertion) private Rectangle? GetRectangleIntersection(Rectangle forInsertion) { if (storage.Count == 0) return null; - return storage.Select(r => (Rectangle)r).FirstOrDefault(r => forInsertion != r + return storage.FirstOrDefault(r => forInsertion != r && forInsertion.IntersectsWith(r)); } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs index f6a28b540..9b99d7525 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -12,9 +12,9 @@ public class CircularCloudVisualizer private readonly Color backgroundColor = Color.White; private readonly Color rectangleColor = Color.DarkBlue; private readonly Size imageSize; - private readonly List rectangleStorage; + private readonly List rectangleStorage; - public CircularCloudVisualizer(List rectangles, Size imageSize) + public CircularCloudVisualizer(List rectangles, Size imageSize) { rectangleStorage = rectangles; this.imageSize = imageSize; @@ -22,7 +22,8 @@ public CircularCloudVisualizer(List rectangles, Size imageSize public void CreateImage(string? filePath = null, bool withSaveSteps = false) { - var rectangles = NormalizeSizes(rectangleStorage.Select(r => (Rectangle)r)); + var rectangles = rectangleStorage.Select(r => (Rectangle)r).ToArray(); + rectangles = NormalizeSizes(rectangles); using var image = new Bitmap(imageSize.Width, imageSize.Height); using var graphics = Graphics.FromImage(image); @@ -36,7 +37,7 @@ public void CreateImage(string? filePath = null, bool withSaveSteps = false) graphics.DrawRectangle(pen, nextRectangle); if (withSaveSteps) { - SaveImage(image, $"{filePath}Step{1}"); + SaveImage(image, filePath); } } SaveImage(image, filePath); @@ -51,15 +52,13 @@ private void SaveImage(Bitmap image, string? filePath = null) private Rectangle[] NormalizeSizes(IEnumerable source) { - var sourceToArray = source.ToArray(); - - var xLength = sourceToArray.Max(r => r.Right) - sourceToArray.Min(r => r.Left); - var yLength = sourceToArray.Max(r => r.Bottom) - sourceToArray.Min(r => r.Top); + var xLength = source.Max(r => r.Right) - source.Min(r => r.Left); + var yLength = source.Max(r => r.Bottom) - source.Min(r => r.Top); var factorX = GetNormalizeFactorByAxis(imageSize.Width, xLength); var factorY = GetNormalizeFactorByAxis(imageSize.Height, yLength); - return sourceToArray.Select(r => new Rectangle( + return source.Select(r => new Rectangle( new Point(r.X * factorX, r.Y * factorY), new Size(r.Width * factorX, r.Height * factorY))) .ToArray(); diff --git a/cs/TagsCloudVisualization/CloudCompressor.cs b/cs/TagsCloudVisualization/CloudCompressor.cs new file mode 100644 index 000000000..24addd20e --- /dev/null +++ b/cs/TagsCloudVisualization/CloudCompressor.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace TagsCloudVisualization +{ + internal class CloudCompressor + { + private readonly BruteForceNearestFinder nearestFinder = new (); + private readonly Point compressionPoint; + private readonly List cloud; + + public CloudCompressor(Point compressTo, List cloud) + { + compressionPoint = compressTo; + this.cloud = cloud; + } + + public Rectangle CompressCloudAfterInsertion(Rectangle insertionRectangle) + { + var toCompressionPoint = GetDirectionsForMovingForCompress(insertionRectangle); + foreach (var direction in toCompressionPoint) + { + insertionRectangle.Location = CalculateRectangleLocationAfterCompress(insertionRectangle, direction); + } + return insertionRectangle; + } + + private Point CalculateRectangleLocationAfterCompress(Rectangle forMoving, Direction toCenter) + { + var nearest = nearestFinder.FindNearestByDirection(forMoving, toCenter, cloud); + if (nearest == null) return forMoving.Location; + var distanceCalculator = nearestFinder.GetMinDistanceCalculatorBy(toCenter); + var distanceForMove = distanceCalculator(nearest.Value, forMoving); + return MoveByDirection(forMoving.Location, distanceForMove, toCenter); + } + + private static Point MoveByDirection(Point forMoving, int distance, Direction whereMoving) + { + var factorForDistanceByX = whereMoving switch + { + Direction.Left => -1, + Direction.Right => 1, + _ => 0 + }; + var factorForDistanceByY = whereMoving switch + { + Direction.Top => -1, + Direction.Bottom => 1, + _ => 0 + }; + forMoving.X += distance * factorForDistanceByX; + forMoving.Y += distance * factorForDistanceByY; + + return forMoving; + } + + private List GetDirectionsForMovingForCompress(Rectangle forMoving) + { + var directions = new List(); + if (forMoving.Bottom < compressionPoint.Y) directions.Add(Direction.Bottom); + if (forMoving.Left > compressionPoint.X) directions.Add(Direction.Left); + if (forMoving.Right < compressionPoint.X) directions.Add(Direction.Right); + if (forMoving.Top > compressionPoint.Y) directions.Add(Direction.Top); + return directions; + } + } +} diff --git a/cs/TagsCloudVisualization/GraphicsExtensions.cs b/cs/TagsCloudVisualization/GraphicsExtensions.cs index 9f27921ef..01fc09426 100644 --- a/cs/TagsCloudVisualization/GraphicsExtensions.cs +++ b/cs/TagsCloudVisualization/GraphicsExtensions.cs @@ -11,7 +11,7 @@ public static class GraphicsExtensions { public static void DrawGrid(this Graphics graphics, int cellsCount = 100, int cellSize = 10) { - Pen p = new Pen(Color.DarkGray); + Pen p = new (Color.DarkGray); for (int y = 0; y < cellsCount; ++y) { diff --git a/cs/TagsCloudVisualization/PointExtensions.cs b/cs/TagsCloudVisualization/PointExtensions.cs index c038ba1af..51bdf6af0 100644 --- a/cs/TagsCloudVisualization/PointExtensions.cs +++ b/cs/TagsCloudVisualization/PointExtensions.cs @@ -9,9 +9,9 @@ namespace TagsCloudVisualization { public static class PointExtensions { - public static int CalculateDistanceBetween(this Point p1, Point p2) + public static int CalculateDistanceBetween(this Point current, Point other) { - return (int)Math.Ceiling(Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y))); + return (int)Math.Ceiling(Math.Sqrt((current.X - other.X) * (current.X - other.X) + (current.Y - other.Y) * (current.Y - other.Y))); } } } diff --git a/cs/TagsCloudVisualization/RectangleWrapper.cs b/cs/TagsCloudVisualization/RectangleWrapper.cs deleted file mode 100644 index 539083c01..000000000 --- a/cs/TagsCloudVisualization/RectangleWrapper.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using System.Drawing; - -namespace TagsCloudVisualization; - -public class RectangleWrapper -{ - public RectangleWrapper(Rectangle value) - { - Value = value; - } - - private Rectangle Value { get; set; } - - public Size Size - { - get => Value.Size; - set => Value = new Rectangle(Location, value); - } - - public Point Location - { - get => Value.Location; - set => Value = new Rectangle(value, Size); - } - - public int Top => Value.Top; - public int Bottom => Value.Bottom; - public int Left => Value.Left; - public int Right => Value.Right; - - public static implicit operator RectangleWrapper(Rectangle value) - { - return new RectangleWrapper(value); - } - - public static implicit operator Rectangle(RectangleWrapper wrapper) - { - return wrapper.Value; - } - - public override bool Equals(object? obj) - { - return (obj as RectangleWrapper)?.Value.Equals(Value) ?? (obj as Rectangle?)?.Equals(Value) ?? false; - } -} diff --git a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs index 9610b9920..8d2eb2c18 100644 --- a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs +++ b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; using NUnit.Framework; using FluentAssertions; using System.Drawing; @@ -22,7 +18,7 @@ public void FindNearest_ShouldReturnNull_OnEmptyRectangles() { var rectangleForFind = new Rectangle(new Point(5, 7), new Size(4, 2)); - finder.FindNearestByDirection(rectangleForFind, Direction.Top, Array.Empty()).Should().BeNull(); + finder.FindNearestByDirection(rectangleForFind, Direction.Top, []).Should().BeNull(); } [TestCase(4, 10, Direction.Top)] @@ -38,7 +34,7 @@ public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRecta var addedRectangle1 = new Rectangle(new Point(2, 2), new Size(3, 4)); var addedRectangle2 = new Rectangle(new Point(5, 7), new Size(4, 2)); var rectangleForFind = new Rectangle(new Point(x, y), new Size(2, 1)); - var rectangles = new[] { addedRectangle1, addedRectangle2 }; + var rectangles = new List { addedRectangle1, addedRectangle2 }; var nearest = finder.FindNearestByDirection(rectangleForFind, direction, rectangles); diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index 33717ca84..01ddc6ea5 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -11,7 +11,7 @@ public class CircleLayerTests { private CircleLayer currentLayer; private Size defaultRectangleSize; - private List storage; + private List storage; public static IEnumerable SimpleIntersectionInSector { @@ -54,7 +54,7 @@ public static IEnumerable GetDataForIntersectionTests { new(6, 3), new(4, 2), new(1, 1), new(4, 4) }, new Rectangle(new Point(5, -7), new Size(6, 5)), new Rectangle(new Point(5, -3), new Size(6, 3)), - new Point(12, 0)).SetName("NotChangeSector_WhenRectangleForIntersectionBottomEqualCenterY_AfterMove"); ; + new Point(12, 0)).SetName("NotChangeSector_WhenRectangleForIntersectionBottomEqualCenterY_AfterMove"); } } @@ -62,18 +62,18 @@ public static IEnumerable GetDataForIntersectionTests public void SetUp() { var center = new Point(5, 5); - storage = new (); + storage = []; currentLayer = new CircleLayer(center, storage); - var first = new Rectangle(currentLayer.CalculateTopLeftRectangleCornerPosition(new Size(8, 6)), new Size(8, 6)); + var first = new Rectangle(currentLayer.AddNextRectangle(new Size(8, 6)), new Size(8, 6)); storage.Add(first); - currentLayer.OnSuccessInsertRectangle(first); + currentLayer.OnSuccessInsertRectangle(); defaultRectangleSize = new Size(3, 4); } [Test] public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() { - var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); + var possibleRectangleLocation = currentLayer.AddNextRectangle(defaultRectangleSize); possibleRectangleLocation.Should() .Be(GetCorrectRectangleLocationByExpectedSector(Sector.TopRight, defaultRectangleSize)); @@ -88,7 +88,7 @@ public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int in { currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, insertionsCount); - var possibleRectangleLocation = currentLayer.CalculateTopLeftRectangleCornerPosition(defaultRectangleSize); + var possibleRectangleLocation = currentLayer.AddNextRectangle(defaultRectangleSize); possibleRectangleLocation.Should() .Be(GetCorrectRectangleLocationByExpectedSector(expected, defaultRectangleSize)); @@ -103,7 +103,7 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterTo GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); - currentLayer.OnSuccessInsertRectangle(storage.Last()); + currentLayer.OnSuccessInsertRectangle(); currentLayer.Radius.Should().Be(9); } @@ -111,7 +111,7 @@ public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterTo private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int additionsCount) { layer = GetLayerAfterFewInsertionsRectangle(layer, additionsCount, - new Size[additionsCount].Select(x => defaultRectangleSize).ToArray()); + new Size[additionsCount].Select(_ => defaultRectangleSize).ToArray()); return layer; } @@ -206,7 +206,7 @@ private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int i var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); var rectangleForInsert = new Rectangle(location, sizes[i - 1]); storage.Add(rectangleForInsert); - layer.OnSuccessInsertRectangle(storage.Last()); + layer.OnSuccessInsertRectangle(); } return layer; diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index 6801e89ef..cb447038b 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -1,13 +1,11 @@ using System; using System.Drawing; -using System.Linq; using NUnit.Framework; using FluentAssertions; using NUnit.Framework.Interfaces; using System.IO; using System.Reflection; using System.Collections.Generic; -using System.Diagnostics; namespace TagsCloudVisualization.Tests { @@ -15,7 +13,7 @@ public class CircularCloudLayouterTests { private CircularCloudLayouter layouter; private Point defaultCenter; - private List storage; + private List storage; [SetUp] public void SetUp() @@ -35,9 +33,9 @@ public void TearDown() .GetField("storage", BindingFlags.NonPublic | BindingFlags.Instance); var st = info?.GetValue(testObj); - var visualizator = new CircularCloudVisualizer(st as List ?? [], new Size(1000, 1000)); + var visualizer = new CircularCloudVisualizer(st as List ?? [], new Size(1000, 1000)); var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); - visualizator.CreateImage(pathFile); + visualizer.CreateImage(pathFile); TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); } } @@ -88,50 +86,28 @@ public void PutNextRectangle_ShouldCreateFirstCircleLayer_WithRadiusEqualHalfDia layouter.CurrentLayer.Radius.Should().Be(expected); } - [Test] - public void PutRectangleOnCircleWithoutIntersection_ShouldUseCircleLayer_ForChoosePositionForRectangle() - { - var firstRectangleSize = new Size(4, 4); - var expectedRadius = 7; - layouter = new CircularCloudLayouter(defaultCenter, storage); - var expected = new Point(defaultCenter.X, defaultCenter.Y - expectedRadius); - layouter.PutNextRectangle(firstRectangleSize); - var rPos = layouter.CurrentLayer.CalculateTopLeftRectangleCornerPosition(firstRectangleSize); - - ; - var secondRectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(new(new(rPos, firstRectangleSize))).Location; - - secondRectangleLocation.Should().Be(expected); - } - [Test] public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection() { - var firstRectangleSize = new Size(6, 4); var expected = new Point(14, 1); - layouter = new CircularCloudLayouter(defaultCenter, storage); - var sizes = new Size[] { new(4, 7), new(4, 4), new(4, 4), new(4, 4) }; - layouter.PutNextRectangle(firstRectangleSize); - layouter = InsertionsWithoutCompress(4, layouter, sizes, storage); - var rectangleWithIntersection = - new Rectangle(layouter.CurrentLayer.CalculateTopLeftRectangleCornerPosition(new(3, 3)), new(3, 3)); - var rectangleLocation = layouter.PutRectangleOnCircleWithoutIntersection(rectangleWithIntersection).Location; + var sizes = new Size[] { new (6, 4), new(4, 7), new(4, 4), new(4, 4), new(4, 4) }; + layouter = InsertionsWithoutCompress(layouter, sizes, storage); + var rectangleLocation = layouter.PutRectangleWithoutIntersection(new(3, 3)).Location; rectangleLocation.Should().Be(expected); } - private static CircularCloudLayouter InsertionsWithoutCompress(int insertionsCount, CircularCloudLayouter l, Size[] sizes, List storage) + private static CircularCloudLayouter InsertionsWithoutCompress(CircularCloudLayouter layouter, Size[] sizes, List storage) { - for (var i = 0; i < insertionsCount; i++) + for (var i = 0; i < sizes.Length; i++) { - var pos = l.CurrentLayer.CalculateTopLeftRectangleCornerPosition(sizes[i]); - var forInsertion = new Rectangle(pos, sizes[i]); + var forInsertion = layouter.PutRectangleWithoutIntersection(sizes[i]); storage.Add(forInsertion); - l.PutRectangleOnCircleWithoutIntersection(forInsertion); + layouter.CurrentLayer.OnSuccessInsertRectangle(); } - return l; + return layouter; } [Test] From 4dfb06b83aeea424088374a840c5f8a80a49be4a Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Thu, 21 Nov 2024 23:23:22 +0500 Subject: [PATCH 26/33] new realisation for circleLayer --- .../BruteForceNearestFinder.cs | 13 +- cs/TagsCloudVisualization/CircleLayer.cs | 280 ++---------------- .../CircularCloudLayouter.cs | 7 +- .../CircularCloudVisualizer.cs | 29 +- .../Tests/BruteForceNearestFinderTests.cs | 10 +- .../Tests/CircleLayerTests.cs | 201 +------------ .../Tests/CircularCloudLayouterTests.cs | 187 ++++++------ ...CircularCloudLayouterVisualizationTests.cs | 10 +- 8 files changed, 140 insertions(+), 597 deletions(-) diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index c8f3f7053..a05bce078 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -5,21 +5,22 @@ namespace TagsCloudVisualization { - public class BruteForceNearestFinder + public static class BruteForceNearestFinder { - public Rectangle? FindNearestByDirection(Rectangle r, Direction direction, List rectangles) + public static Rectangle? FindNearestByDirection(Rectangle r, Direction direction, List rectangles) { if (rectangles.FirstOrDefault() == default) return null; var calculator = GetMinDistanceCalculatorBy(direction); var nearestByDirection = rectangles - .Select(possibleNearest => (Distance: calculator(possibleNearest, r), CurrentEl: possibleNearest)) - .Where(el => el.Distance >= 0).ToList(); + .Select(possibleNearest => (Distance: calculator(possibleNearest, r), Nearest: possibleNearest )) + .Where(el => el.Distance >= 0) + .ToList(); - return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.Distance).CurrentEl : null; + return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.Distance).Nearest : null; } - public Func GetMinDistanceCalculatorBy(Direction direction) + public static Func GetMinDistanceCalculatorBy(Direction direction) { return direction switch { diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CircleLayer.cs index edb6a94ef..5adee8868 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CircleLayer.cs @@ -1,286 +1,42 @@ using System; -using System.Collections.Generic; using System.Drawing; -using System.Linq; namespace TagsCloudVisualization; public class CircleLayer { - public enum Sector - { - TopRight, - BottomRight, - BottomLeft, - TopLeft - } - public Point Center { get; } public int Radius { get; private set; } - - private Sector currentSector; - private readonly List storage; - private readonly List layerRectangles = []; - - private CircleLayer(Point center, int radius, List storage) + private const int DeltaRadius = 5; + private int currentPositionDegrees; + + public CircleLayer(Point center) { Center = center; - Radius = radius; - currentSector = Sector.TopRight; - this.storage = storage; - } + Radius = 5; + } - public CircleLayer(Point center, List storage) : this(center, 0, storage) - { } - - public void OnSuccessInsertRectangle() - { - if (storage.Count == 0) throw new InvalidOperationException("Rectangle was not added"); - if (storage.Count != 1) currentSector = GetNextClockwiseSector(); - layerRectangles.Add(storage.Count - 1); - if (ShouldCreateNewLayer()) - CreateNextLayerAndChangeCurrentOnNext(); - } - - private bool ShouldCreateNewLayer() + private void Expand() { - return currentSector == Sector.TopRight; + Radius += DeltaRadius; } - private Sector GetNextClockwiseSector() + public Point GetNextRectanglePosition() { - return currentSector == Sector.TopLeft ? Sector.TopRight : currentSector + 1; + currentPositionDegrees = GetNextPosition(); + var positionAngleInRadians = currentPositionDegrees * Math.PI / 180.0; + return new Point(Center.X + (int)Math.Ceiling(Radius * Math.Cos(positionAngleInRadians)), + Center.Y + (int)Math.Ceiling(Radius * Math.Sin(positionAngleInRadians))); } - private void CreateNextLayerAndChangeCurrentOnNext() + private int GetNextPosition() { - var nextLayer = new CircleLayer(Center, CalculateRadiusForNextLayer(), storage); - Radius = nextLayer.Radius; - currentSector = nextLayer.currentSector; - var rectanglesForNextRadius = RemoveRectangleInCircle(); - layerRectangles.Clear(); - layerRectangles.AddRange(rectanglesForNextRadius); - } - - private int CalculateRadiusForNextLayer() - { - return layerRectangles - .Select(ind => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage[ind])) - .Min(); - } - - private List RemoveRectangleInCircle() - { - return layerRectangles - .Where(i => CalculateDistanceBetweenCenterAndRectangleFarCorner(storage[i]) > Radius) - .ToList(); - } - - private int CalculateDistanceBetweenCenterAndRectangleFarCorner(Rectangle rectangle) - { - var distanceToCorners = new List + if (currentPositionDegrees++ > 360) { - Center.CalculateDistanceBetween(new Point(rectangle.Right, rectangle.Top)), - Center.CalculateDistanceBetween(new Point(rectangle.Right, rectangle.Bottom)), - Center.CalculateDistanceBetween(new Point(rectangle.Left, rectangle.Bottom)), - Center.CalculateDistanceBetween(new Point(rectangle.Left, rectangle.Top)) - }; - return distanceToCorners.Max(); - } - - private Point PutToCenter(Size rectangleSize) - { - var rectangleX = Center.X - rectangleSize.Width / 2; - var rectangleY = Center.Y - rectangleSize.Height / 2; - - return new Point(rectangleX, rectangleY); - } - - public Point AddNextRectangle(Size rectangleSize) - { - if (Radius == 0) return PutToCenter(rectangleSize); - var rectangleStartPositionOnCircle = GetStartSectorPointOnCircleBySector(currentSector); - return currentSector switch - { - Sector.TopRight => new Point(rectangleStartPositionOnCircle.X, - rectangleStartPositionOnCircle.Y -= rectangleSize.Height), - Sector.BottomRight => - rectangleStartPositionOnCircle, - Sector.BottomLeft => - new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, - rectangleStartPositionOnCircle.Y), - _ => - new Point(rectangleStartPositionOnCircle.X - rectangleSize.Width, - rectangleStartPositionOnCircle.Y - rectangleSize.Height) - }; - } - - private Point GetStartSectorPointOnCircleBySector(Sector s) - { - return s switch - { - Sector.TopRight => new Point(Center.X, Center.Y - Radius), - Sector.BottomRight => new Point(Center.X + Radius, Center.Y), - Sector.BottomLeft => new Point(Center.X, Center.Y + Radius), - _ => new Point(Center.X - Radius, Center.Y) - }; - } - - public Point GetRectanglePositionWithoutIntersection(Rectangle forInsertion, Rectangle intersected) - { - if (IsRectangleIntersectSymmetryAxis(new Rectangle(forInsertion.Location, forInsertion.Size))) - { - currentSector = GetNextClockwiseSector(); - if (ShouldCreateNewLayer()) CreateNextLayerAndChangeCurrentOnNext(); - forInsertion.Location = AddNextRectangle(forInsertion.Size); + currentPositionDegrees = 0; + Expand(); } - - var nextPosition = CalculateNewPositionWithoutIntersectionBySector(currentSector, forInsertion, intersected); - - return nextPosition; - } - - private bool IsRectangleIntersectSymmetryAxis(Rectangle rectangle) - { - return (rectangle.Left < Center.X && rectangle.Right > Center.X) || - (rectangle.Bottom > Center.Y && rectangle.Top < Center.Y); - } - - private Point CalculateNewPositionWithoutIntersectionBySector(Sector whereIntersected, Rectangle forInsertion, - Rectangle intersected) - { - var isMovingAxisIsX = IsMovingAxisIsXBySector(whereIntersected); - var distanceForMoving = - CalculateDistanceForMoveClockwiseToPositionWithoutIntersection(whereIntersected, forInsertion, intersected); - - int distanceForBringBackOnCircle; - if (IsRectangleBetweenSectors(distanceForMoving, forInsertion.Location, isMovingAxisIsX)) - { - distanceForBringBackOnCircle = Radius; - } - else - { - var nearestForCenterCorner = - CalculateCornerNearestForCenterAfterMove(whereIntersected, distanceForMoving, forInsertion); - distanceForBringBackOnCircle = - CalculateDeltaForBringRectangleBackOnCircle(nearestForCenterCorner, isMovingAxisIsX, forInsertion); - } - - distanceForMoving *= CalculateMoveMultiplierForMoveClockwise(isMovingAxisIsX, forInsertion); - distanceForBringBackOnCircle *= CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion); - return isMovingAxisIsX - ? new Point(forInsertion.X + distanceForMoving, forInsertion.Y + distanceForBringBackOnCircle) - : new Point(forInsertion.X + distanceForBringBackOnCircle, forInsertion.Y + distanceForMoving); - } - - private bool IsRectangleBetweenSectors(int distanceForMoving, Point forInsertionLocation, bool isMovingAxisIsX) - { - var distanceToCenter = Math.Abs(isMovingAxisIsX - ? forInsertionLocation.X - Center.X - : forInsertionLocation.Y - Center.Y); - return distanceForMoving > distanceToCenter; - } - - private int CalculateDeltaForBringRectangleBackOnCircle(Point nearestForCenterCorner, bool isMovingAxisIsX, - Rectangle forInsertion) - { - Func getAxisForBringBackOnCircle = isMovingAxisIsX ? p => p.Y : p => p.X; - Func getStaticAxis = isMovingAxisIsX ? p => p.X : p => p.Y; - - var distanceOnStaticAxis = Math.Abs(getStaticAxis(nearestForCenterCorner) - getStaticAxis(Center)); - var distanceOnAxisForBringBackOnCircle = Math.Abs(getAxisForBringBackOnCircle(nearestForCenterCorner) - - getAxisForBringBackOnCircle(Center)); - var distanceBetweenCornerAndCenter = Center.CalculateDistanceBetween(nearestForCenterCorner); - if (distanceBetweenCornerAndCenter > Radius) - return CalculateMoveMultiplierForMoveToCenter(!isMovingAxisIsX, forInsertion) - * WhenRectangleOutsideCircle(distanceOnStaticAxis, distanceBetweenCornerAndCenter, - distanceOnAxisForBringBackOnCircle); - - return CalculateMoveMultiplierForMoveFromCenter(!isMovingAxisIsX, forInsertion) - * WhenRectangleInCircle(distanceOnStaticAxis, distanceOnAxisForBringBackOnCircle); - } - - private int WhenRectangleOutsideCircle(int distanceOnStaticAxis, int distanceBetweenCornerAndCenter, - int distanceOnAxisForBringBackOnCircle) - { - var inCircleCathetusPart = Math.Sqrt(Math.Abs(Radius * Radius - distanceOnStaticAxis * distanceOnStaticAxis)); - return CalculatePartCathetus(distanceBetweenCornerAndCenter, inCircleCathetusPart, - distanceOnAxisForBringBackOnCircle); - } - - private int WhenRectangleInCircle(int distanceOnStaticAxis, int distanceOnAxisForBringBackOnCircle) - { - return CalculatePartCathetus(Radius, distanceOnStaticAxis, distanceOnAxisForBringBackOnCircle); - } - - private int CalculatePartCathetus(int hypotenuse, double a, int b) - { - return (int)Math.Ceiling(Math.Sqrt(Math.Abs(hypotenuse * hypotenuse - a * a))) - b; - } - - private Point CalculateCornerNearestForCenterAfterMove(Sector whereIntersected, int distanceForMoving, - Rectangle forMove) - { - var isAxisForMoveIsX = IsMovingAxisIsXBySector(whereIntersected); - var moveMultiplier = CalculateMoveMultiplierForMoveClockwise(isAxisForMoveIsX, forMove); - distanceForMoving *= moveMultiplier; - var nearestCorner = GetCornerNearestForCenterBySector(whereIntersected, forMove); - return isAxisForMoveIsX - ? new Point(nearestCorner.X + distanceForMoving, nearestCorner.Y) - : new Point(nearestCorner.X, nearestCorner.Y + distanceForMoving); - } - - private int CalculateMoveMultiplierForMoveFromCenter(bool isAxisForMoveIsX, Rectangle forMove) - { - if (forMove.Bottom < Center.Y && forMove.Left > Center.X) return isAxisForMoveIsX ? 1 : -1; - if (forMove.Bottom < Center.Y && forMove.Right < Center.X) return -1; - if (forMove.Top > Center.Y && forMove.Left > Center.X) return 1; - if (forMove.Top > Center.Y && forMove.Right < Center.X) return isAxisForMoveIsX ? -1 : 1; - return isAxisForMoveIsX ? forMove.Bottom < Center.Y ? -1 : 1 - : forMove.Left > Center.X ? 1 : -1; - } - - private int CalculateMoveMultiplierForMoveToCenter(bool isAxisForMoveIsX, Rectangle forMove) - { - return CalculateMoveMultiplierForMoveFromCenter(isAxisForMoveIsX, forMove) * -1; - } - - private int CalculateMoveMultiplierForMoveClockwise(bool isAxisForMoveIsX, Rectangle forMove) - { - if (forMove.Bottom < Center.Y && forMove.Left > Center.X) return 1; - if (forMove.Bottom < Center.Y && forMove.Right < Center.X) return isAxisForMoveIsX ? 1 : -1; - if (forMove.Top > Center.Y && forMove.Left > Center.X) return isAxisForMoveIsX ? -1 : 1; - if (forMove.Top > Center.Y && forMove.Right < Center.X) return -1; - return isAxisForMoveIsX ? forMove.Bottom < Center.Y ? 1 : -1 - : forMove.Left > Center.X ? -1 : 1; - } - - private int CalculateDistanceForMoveClockwiseToPositionWithoutIntersection( - Sector whereIntersected, Rectangle forInsertion, Rectangle intersected) - { - return whereIntersected switch - { - Sector.TopRight => Math.Abs(forInsertion.Top - intersected.Bottom), - Sector.BottomRight => Math.Abs(forInsertion.Right - intersected.Left), - Sector.BottomLeft => Math.Abs(forInsertion.Bottom - intersected.Top), - _ => Math.Abs(forInsertion.Left - intersected.Right) - }; - } - - private static Point GetCornerNearestForCenterBySector(Sector rectangleLocationSector, Rectangle forInsertion) - { - return rectangleLocationSector switch - { - Sector.TopRight => new Point(forInsertion.Left, forInsertion.Bottom), - Sector.BottomRight => new Point(forInsertion.Left, forInsertion.Top), - Sector.BottomLeft => new Point(forInsertion.Right, forInsertion.Top), - _ => new Point(forInsertion.Right, forInsertion.Bottom) - }; - } - - private bool IsMovingAxisIsXBySector(Sector forInsertionRectangleSector) - { - return forInsertionRectangleSector == Sector.BottomRight || forInsertionRectangleSector == Sector.TopLeft; + return currentPositionDegrees; } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index af4fa6261..8ec09e74c 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -18,7 +18,7 @@ public CircularCloudLayouter(Point center) : this(center, []) internal CircularCloudLayouter(Point center, List storage) { this.storage = storage; - CurrentLayer = new(center, storage); + CurrentLayer = new(center); compressor = new(center, storage); } @@ -30,20 +30,19 @@ public Rectangle PutNextRectangle(Size nextRectangle) var rectangleWithOptimalPosition = compressor.CompressCloudAfterInsertion(inserted); storage.Add(rectangleWithOptimalPosition); - CurrentLayer.OnSuccessInsertRectangle(); return rectangleWithOptimalPosition; } public Rectangle PutRectangleWithoutIntersection(Size forInsertionSize) { - var firstRectanglePosition = CurrentLayer.AddNextRectangle(forInsertionSize); + var firstRectanglePosition = CurrentLayer.GetNextRectanglePosition(); var forInsertion = new Rectangle(firstRectanglePosition, forInsertionSize); var intersected = GetRectangleIntersection(forInsertion); while (intersected != null && intersected.Value != default) { - var possiblePosition = CurrentLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected.Value); + var possiblePosition = CurrentLayer.GetNextRectanglePosition(); forInsertion.Location = possiblePosition; intersected = GetRectangleIntersection(forInsertion); } diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs index 9b99d7525..2ee4a32e6 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -22,15 +22,14 @@ public CircularCloudVisualizer(List rectangles, Size imageSize) public void CreateImage(string? filePath = null, bool withSaveSteps = false) { - var rectangles = rectangleStorage.Select(r => (Rectangle)r).ToArray(); - rectangles = NormalizeSizes(rectangles); + var rectangles = rectangleStorage.ToArray(); using var image = new Bitmap(imageSize.Width, imageSize.Height); using var graphics = Graphics.FromImage(image); graphics.Clear(backgroundColor); graphics.DrawGrid(); var pen = new Pen(rectangleColor); - + for (var i = 0; i < rectangles.Length; i++) { var nextRectangle = rectangles[i]; @@ -49,27 +48,5 @@ private void SaveImage(Bitmap image, string? filePath = null) filePath ??= Path.Combine(Path.GetTempPath(), $"testImage{rnd.Next()}.png"); image.Save(filePath, ImageFormat.Png); } - - private Rectangle[] NormalizeSizes(IEnumerable source) - { - var xLength = source.Max(r => r.Right) - source.Min(r => r.Left); - var yLength = source.Max(r => r.Bottom) - source.Min(r => r.Top); - - var factorX = GetNormalizeFactorByAxis(imageSize.Width, xLength); - var factorY = GetNormalizeFactorByAxis(imageSize.Height, yLength); - - return source.Select(r => new Rectangle( - new Point(r.X * factorX, r.Y * factorY), - new Size(r.Width * factorX, r.Height * factorY))) - .ToArray(); - } - - private static int GetNormalizeFactorByAxis(int imageSizeOnAxis, int rectanglesSizeOnAxis) - { - const int boundShift = 10; - double imageSizeOnAxisWithShiftForBounds = imageSizeOnAxis - boundShift; - var stretchFactor = (int)Math.Floor(imageSizeOnAxisWithShiftForBounds / rectanglesSizeOnAxis); - return imageSizeOnAxisWithShiftForBounds > rectanglesSizeOnAxis ? stretchFactor : 1; - } } -} +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs index 8d2eb2c18..21dae2883 100644 --- a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs +++ b/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs @@ -7,18 +7,12 @@ namespace TagsCloudVisualization.Tests { public class BruteForceNearestFinderTests { - private BruteForceNearestFinder finder; - [SetUp] - public void SetUp() - { - finder = new BruteForceNearestFinder(); - } [Test] public void FindNearest_ShouldReturnNull_OnEmptyRectangles() { var rectangleForFind = new Rectangle(new Point(5, 7), new Size(4, 2)); - finder.FindNearestByDirection(rectangleForFind, Direction.Top, []).Should().BeNull(); + BruteForceNearestFinder.FindNearestByDirection(rectangleForFind, Direction.Top, []).Should().BeNull(); } [TestCase(4, 10, Direction.Top)] @@ -36,7 +30,7 @@ public void FindNearest_ShouldReturnNearestRectangleByDirection_ForArgumentRecta var rectangleForFind = new Rectangle(new Point(x, y), new Size(2, 1)); var rectangles = new List { addedRectangle1, addedRectangle2 }; - var nearest = finder.FindNearestByDirection(rectangleForFind, direction, rectangles); + var nearest = BruteForceNearestFinder.FindNearestByDirection(rectangleForFind, direction, rectangles); nearest.Should().Be(isFirstNearest ? addedRectangle1 : addedRectangle2); } diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs index 01ddc6ea5..f5777d1c3 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs @@ -1,214 +1,43 @@ -using System.Collections.Generic; -using System.Drawing; -using System.Linq; +using System.Drawing; using FluentAssertions; using NUnit.Framework; -using static TagsCloudVisualization.CircleLayer; namespace TagsCloudVisualization.Tests; public class CircleLayerTests { private CircleLayer currentLayer; - private Size defaultRectangleSize; - private List storage; - - public static IEnumerable SimpleIntersectionInSector - { - get - { - yield return new TestCaseData( - new Rectangle(new Point(5, -1), new Size(5, 1)), - new Rectangle(new Point(8, -6), new Size(8, 7)), - new Point(9, 1), 0).SetName("WhenFoundIntersectionInTopRightSector"); - yield return new TestCaseData( - new Rectangle(new Point(8, 9), new Size(5, 1)), - new Rectangle(new Point(10, 5), new Size(8, 7)), - new Point(5, 10), 1).SetName("WhenFoundIntersectionInBottomRightSector"); - yield return new TestCaseData( - new Rectangle(new Point(-3, 9), new Size(5, 3)), - new Rectangle(new Point(-7, 8), new Size(8, 7)), - new Point(-1, 5), 2).SetName("WhenFoundIntersectionInBottomLeftSector"); - yield return new TestCaseData( - new Rectangle(new Point(-3, -2), new Size(4, 3)), - new Rectangle(new Point(-7, 1), new Size(8, 7)), - new Point(1, -1), 3).SetName("WhenFoundIntersectionInTopLeftSector"); - } - } - - public static IEnumerable GetDataForIntersectionTests - { - get - { - yield return new TestCaseData(new Size[] - { new(1, 1), new(5, 8), new(4, 4), new(4, 4), new(4, 4) }, - new Rectangle(new Point(11, 5), new Size(6, 6)), - new Rectangle(new Point(10, 5), new Size(5, 8)), - new Point(4, 12)).SetName("ChangeCornerPositionForSector_WhenMoveRectangleClockwise"); - yield return new TestCaseData(new Size[] - { new(1, 1), new(1, 8), new(50, 50), new(1, 1), new(1, 1), new(1, 1) }, - new Rectangle(new Point(4, 10), new Size(1, 1)), - new Rectangle(new Point(-50, 10), new Size(50, 50)), - new Point(8, 11)).SetName("GetCorrectPosition_WhenRectanglesSidesMatch"); - yield return new TestCaseData(new Size[] - { new(6, 3), new(4, 2), new(1, 1), new(4, 4) }, - new Rectangle(new Point(5, -7), new Size(6, 5)), - new Rectangle(new Point(5, -3), new Size(6, 3)), - new Point(12, 0)).SetName("NotChangeSector_WhenRectangleForIntersectionBottomEqualCenterY_AfterMove"); - } - } [SetUp] public void SetUp() { var center = new Point(5, 5); - storage = []; - currentLayer = new CircleLayer(center, storage); - var first = new Rectangle(currentLayer.AddNextRectangle(new Size(8, 6)), new Size(8, 6)); - storage.Add(first); - currentLayer.OnSuccessInsertRectangle(); - defaultRectangleSize = new Size(3, 4); - } - - [Test] - public void CircleLayer_InsertFirstForLayerRectangle_InTopRightSectorStart() - { - var possibleRectangleLocation = currentLayer.AddNextRectangle(defaultRectangleSize); - - possibleRectangleLocation.Should() - .Be(GetCorrectRectangleLocationByExpectedSector(Sector.TopRight, defaultRectangleSize)); - } - - [TestCase(1, Sector.BottomRight)] - [TestCase(2, Sector.BottomLeft)] - [TestCase(3, Sector.TopLeft)] - [TestCase(4, Sector.TopRight)] - [TestCase(0, Sector.TopRight)] - public void CircleLayer_InsertRectangleInNextSector_AfterSuccessInsertion(int insertionsCount, Sector expected) - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, insertionsCount); - - var possibleRectangleLocation = currentLayer.AddNextRectangle(defaultRectangleSize); - - possibleRectangleLocation.Should() - .Be(GetCorrectRectangleLocationByExpectedSector(expected, defaultRectangleSize)); - } - - - [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeIntMinDistanceFromCenterToInsertedRectangles() - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, 3); - var nextRectangleLocation = - GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(4), defaultRectangleSize); - storage.Add(new Rectangle(nextRectangleLocation, new Size(2, 2))); - - currentLayer.OnSuccessInsertRectangle(); - - currentLayer.Radius.Should().Be(9); - } - - private CircleLayer GetLayerAfterFewInsertionsRectangleWithSameSize(CircleLayer layer, int additionsCount) - { - layer = GetLayerAfterFewInsertionsRectangle(layer, additionsCount, - new Size[additionsCount].Select(_ => defaultRectangleSize).ToArray()); - return layer; - } - - private Sector GetSectorByInsertionsCount(int count) - { - return (Sector)((count - 1) % 4); - } - - private Point GetCorrectRectangleLocationByExpectedSector(Sector expected, Size size) - { - return expected switch - { - Sector.TopRight => new Point(currentLayer.Center.X, currentLayer.Center.Y - currentLayer.Radius - size.Height), - Sector.BottomRight => new Point(currentLayer.Center.X + currentLayer.Radius, currentLayer.Center.Y), - Sector.BottomLeft => new Point(currentLayer.Center.X - size.Width, currentLayer.Center.Y + currentLayer.Radius), - _ => new Point(currentLayer.Center.X - currentLayer.Radius - size.Width, - currentLayer.Center.Y - size.Height), - }; + currentLayer = new CircleLayer(center); } [Test] - public void CircleLayer_RectangleWithNewPositionAfterIntersection_ShouldNotIntersectSameRectangle() + public void GetNextRectanglePosition_ShouldTryPutRectangleOnCircle() { - var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); - var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); + var firstRectangleLocation = currentLayer.GetNextRectanglePosition(); + var secondRectangleLocation = currentLayer.GetNextRectanglePosition(); - var newPosition = - currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); + var radius = currentLayer.Center.CalculateDistanceBetween(firstRectangleLocation); - new Rectangle(newPosition, rectangleForInsertion.Size).IntersectsWith(intersectedRectangle).Should() - .BeFalse(); + radius.Should().Be(currentLayer.Center.CalculateDistanceBetween(secondRectangleLocation)); } [Test] - public void - GetPositionWithoutIntersection_ShouldPlaceBottomLeftCornerOnCircle_WhenFoundIntersectionInTopRightSector() - { - var rectangleForInsertion = new Rectangle(new Point(5, -1), new Size(5, 1)); - var intersectedRectangle = new Rectangle(new Point(8, -6), new Size(8, 7)); - - var newPosition = - currentLayer.GetRectanglePositionWithoutIntersection(rectangleForInsertion, intersectedRectangle); - var bottomLeftCorner = new Point(newPosition.X, newPosition.Y + intersectedRectangle.Height); - - CurrentLayerContainsPoint(bottomLeftCorner).Should().BeTrue(); - } - - [TestCaseSource(nameof(SimpleIntersectionInSector))] - public void GetPositionWithoutIntersection_ReturnCorrectRectanglePosition(Rectangle forInsertion, - Rectangle intersected, Point expected, int additionsCount) - { - currentLayer = GetLayerAfterFewInsertionsRectangleWithSameSize(currentLayer, additionsCount); - - var newPosition = currentLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - - newPosition.Should().Be(expected); - } - - private bool CurrentLayerContainsPoint(Point p) + public void GetNextRectanglePosition_MustExpandCircle_WhenTryPutRectangleOnFullCircle() { - return (p.X - currentLayer.Center.X) * (p.X - currentLayer.Center.X) + - (p.Y - currentLayer.Center.Y) * (p.Y - currentLayer.Center.Y) == currentLayer.Radius * currentLayer.Radius; - } - - [Test] - public void CircleLayer_RadiusNextCircleLayer_ShouldBeCeilingToInt() - { - var sizes = new Size[] + var firstPoint = currentLayer.GetNextRectanglePosition(); + for (int i = 0; i < 360; i++) { - new(8, 1), new(7, 8), new(4, 4), new(4, 4), new(4, 4) - }; - var nextLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); - - nextLayer.Radius.Should().Be(10); - } - - [TestCaseSource(nameof(GetDataForIntersectionTests))] - public void GetPositionWithoutIntersection_Should(Size[] sizes, Rectangle forInsertion, Rectangle intersected, - Point expected) - { - var fullLayer = GetLayerAfterFewInsertionsRectangle(currentLayer, sizes.Length, sizes); - - var newPosition = fullLayer.GetRectanglePositionWithoutIntersection(forInsertion, intersected); - - newPosition.Should().Be(expected); - } - - private CircleLayer GetLayerAfterFewInsertionsRectangle(CircleLayer layer, int insertionsCount, Size[] sizes) - { - for (var i = 1; i <= insertionsCount; i++) - { - var location = GetCorrectRectangleLocationByExpectedSector(GetSectorByInsertionsCount(i), sizes[i - 1]); - var rectangleForInsert = new Rectangle(location, sizes[i - 1]); - storage.Add(rectangleForInsert); - layer.OnSuccessInsertRectangle(); + currentLayer.GetNextRectanglePosition(); } - return layer; + var finalPoint = currentLayer.GetNextRectanglePosition(); + + finalPoint.CalculateDistanceBetween(currentLayer.Center).Should() + .BeGreaterThan(firstPoint.CalculateDistanceBetween(currentLayer.Center)); } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs index cb447038b..9e29b5ee6 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs @@ -1,126 +1,115 @@ using System; +using System.Collections.Generic; using System.Drawing; -using NUnit.Framework; -using FluentAssertions; -using NUnit.Framework.Interfaces; using System.IO; +using System.Linq; using System.Reflection; -using System.Collections.Generic; +using FluentAssertions; +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace TagsCloudVisualization.Tests; -namespace TagsCloudVisualization.Tests +public class CircularCloudLayouterTests { - public class CircularCloudLayouterTests - { - private CircularCloudLayouter layouter; - private Point defaultCenter; - private List storage; + private CircularCloudLayouter layouter; + private Point defaultCenter; + private List storage; - [SetUp] - public void SetUp() + public static IEnumerable IntersectionTestsData + { + get { - defaultCenter = new Point(5, 5); - storage = []; - layouter = new CircularCloudLayouter(defaultCenter, storage); + yield return new TestCaseData(new Size[] + { + new(1, 1), new(1, 1), new(1, 1), new(400, 400), + new(1, 4), new(6, 6) + }) + .SetName("WhenAddedSmallRectanglesWithOneVeryBig"); + yield return new TestCaseData(new Size[] + { + new(100, 100), new(123, 121), new(100, 100), new(400, 400), + new(100, 400), new(600, 128) + }) + .SetName("WhenAddedBigRectangles"); + yield return new TestCaseData(new Size[] { new(4, 4), new(4, 4), new(4, 4), new(4, 4), new(4, 4) }) + .SetName("WhenAddedRectanglesHasSameSize"); } + } - [TearDown] - public void TearDown() - { - if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) - { - var testObj = TestContext.CurrentContext.Test.Parent?.Fixture as CircularCloudLayouterTests; - var info = typeof(CircularCloudLayouterTests) - .GetField("storage", BindingFlags.NonPublic | BindingFlags.Instance); - var st = info?.GetValue(testObj); - - var visualizer = new CircularCloudVisualizer(st as List ?? [], new Size(1000, 1000)); - var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); - visualizer.CreateImage(pathFile); - TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); - } - } + [SetUp] + public void SetUp() + { + defaultCenter = new Point(5, 5); + storage = []; + layouter = new CircularCloudLayouter(defaultCenter, storage); + } - [TestCase(0, 4, TestName = "WhenWidthZero")] - [TestCase(3, 0, TestName = "WhenHeightZero")] - [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] - [TestCase(3, -4, TestName = "WhenHeightNegative")] - [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] - [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] - public void Insert_ShouldThrow(int width, int height) + [TearDown] + public void TearDown() + { + if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) { - var inCorrectSize = new Size(width, height); - - Action act = () => layouter.PutNextRectangle(inCorrectSize); - - act.Should().Throw(); + var testObj = TestContext.CurrentContext.Test.Parent?.Fixture as CircularCloudLayouterTests; + var info = typeof(CircularCloudLayouterTests) + .GetField("storage", BindingFlags.NonPublic | BindingFlags.Instance); + var st = info?.GetValue(testObj); + + var visualizer = new CircularCloudVisualizer(st as List ?? [], new Size(1000, 1000)); + var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); + visualizer.CreateImage(pathFile); + TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); } + } - [Test] - public void PutNextRectangle_ShouldAddRectangleToCenter_WhenRectangleFirst() - { - var firstRectangleSize = new Size(6, 4); - var expected = new Rectangle(new Point(2, 3), firstRectangleSize); - - var nextRectangle = layouter.PutNextRectangle(firstRectangleSize); - - nextRectangle - .Should().Be(expected); - } + [TestCase(0, 4, TestName = "WhenWidthZero")] + [TestCase(3, 0, TestName = "WhenHeightZero")] + [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] + [TestCase(3, -4, TestName = "WhenHeightNegative")] + [TestCase(-3, -4, TestName = "WhenWidthAndHeightNegative")] + [TestCase(0, 0, TestName = "WhenWidthAndHeightIsZero")] + public void Insert_ShouldThrow(int width, int height) + { + var inCorrectSize = new Size(width, height); - [Test] - public void PutNextRectangle_ShouldCreateFirstCircleLayer_AfterCreation() - { - layouter.CurrentLayer.Should().NotBeNull(); - } + Action act = () => layouter.PutNextRectangle(inCorrectSize); - [TestCase(6, 4, 4)] - [TestCase(4, 6, 4)] - [TestCase(2, 2, 2)] - [TestCase(5, 9, 6)] - public void PutNextRectangle_ShouldCreateFirstCircleLayer_WithRadiusEqualHalfDiagonalFirstRectangleRoundToInt(int height, int width, int expected) - { - var firstRectangleSize = new Size(width, height); + act.Should().Throw(); + } - layouter.PutNextRectangle(firstRectangleSize); + [TestCaseSource(nameof(IntersectionTestsData))] + public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection(Size[] sizes) + { + layouter = InsertFewRectangles(layouter, sizes, storage); + var last = layouter.PutRectangleWithoutIntersection(new Size(3, 3)); - layouter.CurrentLayer.Radius.Should().Be(expected); - } + storage.Where(addedRectangle => addedRectangle.IntersectsWith(last)).Should().BeEmpty(); + } - [Test] - public void PutRectangleOnCircleWithoutIntersection_ShouldPutRectangleWithoutIntersection() + private static CircularCloudLayouter InsertFewRectangles(CircularCloudLayouter layouter, Size[] sizes, + List storage) + { + for (var i = 0; i < sizes.Length; i++) { - var expected = new Point(14, 1); - - var sizes = new Size[] { new (6, 4), new(4, 7), new(4, 4), new(4, 4), new(4, 4) }; - layouter = InsertionsWithoutCompress(layouter, sizes, storage); - var rectangleLocation = layouter.PutRectangleWithoutIntersection(new(3, 3)).Location; - - rectangleLocation.Should().Be(expected); + var forInsertion = layouter.PutNextRectangle(sizes[i]); + storage.Add(forInsertion); } - private static CircularCloudLayouter InsertionsWithoutCompress(CircularCloudLayouter layouter, Size[] sizes, List storage) - { - for (var i = 0; i < sizes.Length; i++) - { - var forInsertion = layouter.PutRectangleWithoutIntersection(sizes[i]); - storage.Add(forInsertion); - layouter.CurrentLayer.OnSuccessInsertRectangle(); - } - - return layouter; - } + return layouter; + } - [Test] - public void PutNextRectangle_ShouldTryMoveRectangleCloserToCenter_WhenItPossible() - { - var firstRectangleSize = new Size(6, 4); - var secondRectangleSize = new Size(4, 4); - var expectedSecondRectangleLocation = new Point(5, -1); + [Test] + public void PutNextRectangle_ShouldTryMoveRectangleCloserToCenter_WhenItPossible() + { + var firstRectangleSize = new Size(6, 4); + var secondRectangleSize = new Size(4, 4); - layouter.PutNextRectangle(firstRectangleSize); - var second = layouter.PutNextRectangle(secondRectangleSize); + var first = layouter.PutNextRectangle(firstRectangleSize); + var second = layouter.PutNextRectangle(secondRectangleSize); + var hasEqualBound = first.Right == second.Left || first.Top == second.Bottom + || second.Right == first.Left || second.Top == first.Bottom; - second.Location.Should().Be(expectedSecondRectangleLocation); - } + first.IntersectsWith(second).Should().BeFalse(); + hasEqualBound.Should().BeTrue(); } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs index b08d35f44..627990b47 100644 --- a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs +++ b/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs @@ -7,16 +7,14 @@ namespace TagsCloudVisualization.Tests; public class CircularCloudLayouterVisualizationTests { - private Size imageSize; private Point center; private CircularCloudVisualizer visualizer; [SetUp] public void SetUp() { - imageSize = new(1000, 1000); - center = new Point(imageSize.Width / 2, imageSize.Height / 2); - visualizer = new CircularCloudVisualizer(GenerateRectangles(center, 100, 10, 100), imageSize); + center = new Point(500, 500); + visualizer = new CircularCloudVisualizer(GenerateRectangles(center, 100, 5, 1000), new Size(1000, 1000)); } [Test] @@ -31,10 +29,10 @@ public void GenerateImageWithSaveEveryStep() visualizer.CreateImage(withSaveSteps: true); } - private static List GenerateRectangles(Point center, int maxSize, int minSize, int count) + private static List GenerateRectangles(Point center, int maxSize, int minSize, int count) { var rnd = new Random(); - var storage = new List(); + var storage = new List(); var layouter = new CircularCloudLayouter(center, storage); for (var i = 0; i < count; i++) layouter.PutNextRectangle(new Size(rnd.Next(minSize, maxSize), rnd.Next(minSize, maxSize))); From 09726a27970c09f8811f91dffa6652eb6f2aa066 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Mon, 16 Dec 2024 14:18:23 +0500 Subject: [PATCH 27/33] Fix static finder and remove useless tests --- cs/BowlingGame/BowlingGame.csproj | 4 +- cs/TagsCloudVisualization/CloudCompressor.cs | 8 +-- cs/TagsCloudVisualization/Program.cs | 12 +++++ .../Tests/RectangleStorageTests.cs | 51 ------------------- cs/tdd.sln | 17 +++++-- 5 files changed, 31 insertions(+), 61 deletions(-) create mode 100644 cs/TagsCloudVisualization/Program.cs delete mode 100644 cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs diff --git a/cs/BowlingGame/BowlingGame.csproj b/cs/BowlingGame/BowlingGame.csproj index 3316df102..286fcb713 100644 --- a/cs/BowlingGame/BowlingGame.csproj +++ b/cs/BowlingGame/BowlingGame.csproj @@ -1,10 +1,10 @@  - net48 + net8.0 false BowlingGame - 7.3 + 11 diff --git a/cs/TagsCloudVisualization/CloudCompressor.cs b/cs/TagsCloudVisualization/CloudCompressor.cs index 24addd20e..fa4ea3325 100644 --- a/cs/TagsCloudVisualization/CloudCompressor.cs +++ b/cs/TagsCloudVisualization/CloudCompressor.cs @@ -5,7 +5,6 @@ namespace TagsCloudVisualization { internal class CloudCompressor { - private readonly BruteForceNearestFinder nearestFinder = new (); private readonly Point compressionPoint; private readonly List cloud; @@ -27,9 +26,9 @@ public Rectangle CompressCloudAfterInsertion(Rectangle insertionRectangle) private Point CalculateRectangleLocationAfterCompress(Rectangle forMoving, Direction toCenter) { - var nearest = nearestFinder.FindNearestByDirection(forMoving, toCenter, cloud); + var nearest = BruteForceNearestFinder.FindNearestByDirection(forMoving, toCenter, cloud); if (nearest == null) return forMoving.Location; - var distanceCalculator = nearestFinder.GetMinDistanceCalculatorBy(toCenter); + var distanceCalculator = BruteForceNearestFinder.GetMinDistanceCalculatorBy(toCenter); var distanceForMove = distanceCalculator(nearest.Value, forMoving); return MoveByDirection(forMoving.Location, distanceForMove, toCenter); } @@ -58,9 +57,10 @@ private List GetDirectionsForMovingForCompress(Rectangle forMoving) { var directions = new List(); if (forMoving.Bottom < compressionPoint.Y) directions.Add(Direction.Bottom); + if (forMoving.Top > compressionPoint.Y) directions.Add(Direction.Top); if (forMoving.Left > compressionPoint.X) directions.Add(Direction.Left); if (forMoving.Right < compressionPoint.X) directions.Add(Direction.Right); - if (forMoving.Top > compressionPoint.Y) directions.Add(Direction.Top); + return directions; } } diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs new file mode 100644 index 000000000..93a074e72 --- /dev/null +++ b/cs/TagsCloudVisualization/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace TagsCloudVisualization +{ + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + } + } +} diff --git a/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs b/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs deleted file mode 100644 index 9d0b90954..000000000 --- a/cs/TagsCloudVisualization/Tests/RectangleStorageTests.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using FluentAssertions; -using NUnit.Framework; - -namespace TagsCloudVisualization.Tests -{ - public class RectangleStorageTests - { - private RectangleStorage storage; - private Rectangle defaulRectangle; - [SetUp] - public void SetUp() - { - storage = new RectangleStorage(); - defaulRectangle = new(new(2, 2), new(2, 2)); - } - - [Test] - public void GetRectangles_ShouldGetAllRectangle() - { - storage.Add(defaulRectangle); - storage.Add(defaulRectangle); - - storage.GetAll().Should().HaveCount(2); - } - - [Test] - public void AddRectangle_ShouldGetIdForRectangle() - { - var id = storage.Add(defaulRectangle); - - storage.GetById(id).Should().Be(defaulRectangle); - } - - [Test] - public void ChangeRectangle_ShouldChangeRectangleByIndex() - { - var id = storage.Add(defaulRectangle); - var rectangleForChange = storage.GetById(id); - - rectangleForChange.Size = new Size(1, 1); - - storage.GetById(id).Size.Should().Be(rectangleForChange.Size); - } - } -} diff --git a/cs/tdd.sln b/cs/tdd.sln index c8f523d63..1d4423dd4 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.9.34902.65 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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TagsCloudVisualization", "TagsCloudVisualization\TagsCloudVisualization.csproj", "{AB4D79B8-873D-4131-95B6-BB47B6E3444C}" 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 + {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {84FFCD74-D082-4147-9E4B-BFEC90F6C2AF} + EndGlobalSection EndGlobal From 9fd115b6d70dc983ec21e6433d8988d8f4e49ff3 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Mon, 16 Dec 2024 15:55:38 +0500 Subject: [PATCH 28/33] Create project for tests --- .../BruteForceNearestFinderTests.cs | 3 +- .../CircleLayerTests.cs | 3 +- .../CircularCloudLayouterTests.cs | 0 ...CircularCloudLayouterVisualizationTests.cs | 0 cs/TagCloudTests/TagCloudTests.csproj | 34 +++++++++++++++++++ .../CircularCloudLayouter.cs | 2 +- .../TagsCloudVisualization.csproj | 9 ++++- cs/tdd.sln | 18 ++++------ 8 files changed, 53 insertions(+), 16 deletions(-) rename cs/{TagsCloudVisualization/Tests => TagCloudTests}/BruteForceNearestFinderTests.cs (96%) rename cs/{TagsCloudVisualization/Tests => TagCloudTests}/CircleLayerTests.cs (95%) rename cs/{TagsCloudVisualization/Tests => TagCloudTests}/CircularCloudLayouterTests.cs (100%) rename cs/{TagsCloudVisualization/Tests => TagCloudTests}/CircularCloudLayouterVisualizationTests.cs (100%) create mode 100644 cs/TagCloudTests/TagCloudTests.csproj diff --git a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs b/cs/TagCloudTests/BruteForceNearestFinderTests.cs similarity index 96% rename from cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs rename to cs/TagCloudTests/BruteForceNearestFinderTests.cs index 21dae2883..96e5a7f5f 100644 --- a/cs/TagsCloudVisualization/Tests/BruteForceNearestFinderTests.cs +++ b/cs/TagCloudTests/BruteForceNearestFinderTests.cs @@ -2,8 +2,9 @@ using NUnit.Framework; using FluentAssertions; using System.Drawing; +using TagsCloudVisualization; -namespace TagsCloudVisualization.Tests +namespace TagCloudTests { public class BruteForceNearestFinderTests { diff --git a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs b/cs/TagCloudTests/CircleLayerTests.cs similarity index 95% rename from cs/TagsCloudVisualization/Tests/CircleLayerTests.cs rename to cs/TagCloudTests/CircleLayerTests.cs index f5777d1c3..886e486e4 100644 --- a/cs/TagsCloudVisualization/Tests/CircleLayerTests.cs +++ b/cs/TagCloudTests/CircleLayerTests.cs @@ -1,8 +1,9 @@ using System.Drawing; using FluentAssertions; using NUnit.Framework; +using TagsCloudVisualization; -namespace TagsCloudVisualization.Tests; +namespace TagCloudTests; public class CircleLayerTests { diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs b/cs/TagCloudTests/CircularCloudLayouterTests.cs similarity index 100% rename from cs/TagsCloudVisualization/Tests/CircularCloudLayouterTests.cs rename to cs/TagCloudTests/CircularCloudLayouterTests.cs diff --git a/cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs b/cs/TagCloudTests/CircularCloudLayouterVisualizationTests.cs similarity index 100% rename from cs/TagsCloudVisualization/Tests/CircularCloudLayouterVisualizationTests.cs rename to cs/TagCloudTests/CircularCloudLayouterVisualizationTests.cs diff --git a/cs/TagCloudTests/TagCloudTests.csproj b/cs/TagCloudTests/TagCloudTests.csproj new file mode 100644 index 000000000..221f3fa55 --- /dev/null +++ b/cs/TagCloudTests/TagCloudTests.csproj @@ -0,0 +1,34 @@ + + + + net8.0 + enable + enable + + false + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 8ec09e74c..f4dea6d88 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -15,7 +15,7 @@ public class CircularCloudLayouter public CircularCloudLayouter(Point center) : this(center, []) { } - internal CircularCloudLayouter(Point center, List storage) + public CircularCloudLayouter(Point center, List storage) { this.storage = storage; CurrentLayer = new(center); diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj index 1a44a26a4..2f9c89282 100644 --- a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -8,6 +8,12 @@ TagsCloudVisualization.Program + + + + + + @@ -17,7 +23,8 @@ - + + diff --git a/cs/tdd.sln b/cs/tdd.sln index 1d4423dd4..6da15f34d 100644 --- a/cs/tdd.sln +++ b/cs/tdd.sln @@ -3,30 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34902.65 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BowlingGame", "BowlingGame\BowlingGame.csproj", "{AD0F018A-732E-4074-8527-AB2EEC8D0BF3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{B5108E20-2ACF-4ED9-84FE-2A718050FC94}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TagsCloudVisualization", "TagsCloudVisualization\TagsCloudVisualization.csproj", "{AB4D79B8-873D-4131-95B6-BB47B6E3444C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagCloudTests", "TagCloudTests\TagCloudTests.csproj", "{EC0CE622-6A3C-4400-B696-9AE85424039E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AD0F018A-732E-4074-8527-AB2EEC8D0BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD0F018A-732E-4074-8527-AB2EEC8D0BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD0F018A-732E-4074-8527-AB2EEC8D0BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD0F018A-732E-4074-8527-AB2EEC8D0BF3}.Release|Any CPU.Build.0 = Release|Any CPU - {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {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 {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Debug|Any CPU.Build.0 = Debug|Any CPU {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Release|Any CPU.ActiveCfg = Release|Any CPU {AB4D79B8-873D-4131-95B6-BB47B6E3444C}.Release|Any CPU.Build.0 = Release|Any CPU + {EC0CE622-6A3C-4400-B696-9AE85424039E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC0CE622-6A3C-4400-B696-9AE85424039E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC0CE622-6A3C-4400-B696-9AE85424039E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC0CE622-6A3C-4400-B696-9AE85424039E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From adc2df3a7ddc4ea44ce269f8a2b858d165049f2f Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Mon, 16 Dec 2024 17:02:33 +0500 Subject: [PATCH 29/33] Fix circle layer --- ...s.cs => CirclePositionDistributorTests.cs} | 16 +++++----- ...eLayer.cs => CirclePositionDistributor.cs} | 32 +++++++------------ .../CircularCloudLayouter.cs | 6 ++-- 3 files changed, 23 insertions(+), 31 deletions(-) rename cs/TagCloudTests/{CircleLayerTests.cs => CirclePositionDistributorTests.cs} (64%) rename cs/TagsCloudVisualization/{CircleLayer.cs => CirclePositionDistributor.cs} (52%) diff --git a/cs/TagCloudTests/CircleLayerTests.cs b/cs/TagCloudTests/CirclePositionDistributorTests.cs similarity index 64% rename from cs/TagCloudTests/CircleLayerTests.cs rename to cs/TagCloudTests/CirclePositionDistributorTests.cs index 886e486e4..b0e06ac70 100644 --- a/cs/TagCloudTests/CircleLayerTests.cs +++ b/cs/TagCloudTests/CirclePositionDistributorTests.cs @@ -5,22 +5,22 @@ namespace TagCloudTests; -public class CircleLayerTests +public class CirclePositionDistributorTests { - private CircleLayer currentLayer; + private CirclePositionDistributor currentLayer; [SetUp] public void SetUp() { var center = new Point(5, 5); - currentLayer = new CircleLayer(center); + currentLayer = new CirclePositionDistributor(center); } [Test] public void GetNextRectanglePosition_ShouldTryPutRectangleOnCircle() { - var firstRectangleLocation = currentLayer.GetNextRectanglePosition(); - var secondRectangleLocation = currentLayer.GetNextRectanglePosition(); + var firstRectangleLocation = currentLayer.GetNextPosition(); + var secondRectangleLocation = currentLayer.GetNextPosition(); var radius = currentLayer.Center.CalculateDistanceBetween(firstRectangleLocation); @@ -30,13 +30,13 @@ public void GetNextRectanglePosition_ShouldTryPutRectangleOnCircle() [Test] public void GetNextRectanglePosition_MustExpandCircle_WhenTryPutRectangleOnFullCircle() { - var firstPoint = currentLayer.GetNextRectanglePosition(); + var firstPoint = currentLayer.GetNextPosition(); for (int i = 0; i < 360; i++) { - currentLayer.GetNextRectanglePosition(); + currentLayer.GetNextPosition(); } - var finalPoint = currentLayer.GetNextRectanglePosition(); + var finalPoint = currentLayer.GetNextPosition(); finalPoint.CalculateDistanceBetween(currentLayer.Center).Should() .BeGreaterThan(firstPoint.CalculateDistanceBetween(currentLayer.Center)); diff --git a/cs/TagsCloudVisualization/CircleLayer.cs b/cs/TagsCloudVisualization/CirclePositionDistributor.cs similarity index 52% rename from cs/TagsCloudVisualization/CircleLayer.cs rename to cs/TagsCloudVisualization/CirclePositionDistributor.cs index 5adee8868..2f8142ced 100644 --- a/cs/TagsCloudVisualization/CircleLayer.cs +++ b/cs/TagsCloudVisualization/CirclePositionDistributor.cs @@ -3,40 +3,32 @@ namespace TagsCloudVisualization; -public class CircleLayer +public class CirclePositionDistributor { public Point Center { get; } public int Radius { get; private set; } private const int DeltaRadius = 5; private int currentPositionDegrees; - - public CircleLayer(Point center) + + + public CirclePositionDistributor(Point center) { Center = center; Radius = 5; } - private void Expand() - { - Radius += DeltaRadius; - } - - public Point GetNextRectanglePosition() - { - currentPositionDegrees = GetNextPosition(); - var positionAngleInRadians = currentPositionDegrees * Math.PI / 180.0; - return new Point(Center.X + (int)Math.Ceiling(Radius * Math.Cos(positionAngleInRadians)), - Center.Y + (int)Math.Ceiling(Radius * Math.Sin(positionAngleInRadians))); - } - - private int GetNextPosition() + public Point GetNextPosition() { - if (currentPositionDegrees++ > 360) + currentPositionDegrees += 1; + if (currentPositionDegrees > 360) { currentPositionDegrees = 0; - Expand(); + Radius += DeltaRadius; } - return currentPositionDegrees; + var positionAngleInRadians = currentPositionDegrees * Math.PI / 180.0; + return new Point( + Center.X + (int)Math.Ceiling(Radius * Math.Cos(positionAngleInRadians)), + Center.Y + (int)Math.Ceiling(Radius * Math.Sin(positionAngleInRadians))); } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index f4dea6d88..4a1acb719 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -10,7 +10,7 @@ public class CircularCloudLayouter private readonly List storage; private readonly CloudCompressor compressor; - public CircleLayer CurrentLayer { get; } + public CirclePositionDistributor CurrentLayer { get; } public CircularCloudLayouter(Point center) : this(center, []) { } @@ -36,13 +36,13 @@ public Rectangle PutNextRectangle(Size nextRectangle) public Rectangle PutRectangleWithoutIntersection(Size forInsertionSize) { - var firstRectanglePosition = CurrentLayer.GetNextRectanglePosition(); + var firstRectanglePosition = CurrentLayer.GetNextPosition(); var forInsertion = new Rectangle(firstRectanglePosition, forInsertionSize); var intersected = GetRectangleIntersection(forInsertion); while (intersected != null && intersected.Value != default) { - var possiblePosition = CurrentLayer.GetNextRectanglePosition(); + var possiblePosition = CurrentLayer.GetNextPosition(); forInsertion.Location = possiblePosition; intersected = GetRectangleIntersection(forInsertion); } From 066293bfb43fdea3d41319ff2b7abd68c2d204fd Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Tue, 17 Dec 2024 03:45:58 +0500 Subject: [PATCH 30/33] Refactoring --- .../CircularCloudLayouterTests.cs | 26 ++++---- ...CircularCloudLayouterVisualizationTests.cs | 9 +-- .../BruteForceNearestFinder.cs | 16 ++--- .../CircularCloudLayouter.cs | 34 +++++------ .../CircularCloudVisualizer.cs | 57 ++++++++++++++---- .../{Dicrection.cs => Direction.cs} | 0 .../GraphicsExtensions.cs | 27 --------- cs/TagsCloudVisualization/ImageSaver.cs | 24 ++++++++ ...0\275\320\270\320\272\320\276\320\262.png" | Bin 0 -> 2272575 bytes ...0\275\320\270\320\272\320\276\320\262.png" | Bin 0 -> 234846 bytes ...0\275\320\270\320\272\320\276\320\262.png" | Bin 0 -> 23661 bytes cs/TagsCloudVisualization/Images/FIRSTa.png | Bin 31431 -> 0 bytes cs/TagsCloudVisualization/Images/sECOND.png | Bin 38559 -> 0 bytes cs/TagsCloudVisualization/Images/third.png | Bin 46775 -> 0 bytes cs/TagsCloudVisualization/PointExtensions.cs | 4 +- .../RectangleExtensions.cs | 19 ++++++ .../TagsCloudVisualization.csproj | 2 +- 17 files changed, 132 insertions(+), 86 deletions(-) rename cs/TagsCloudVisualization/{Dicrection.cs => Direction.cs} (100%) delete mode 100644 cs/TagsCloudVisualization/GraphicsExtensions.cs create mode 100644 cs/TagsCloudVisualization/ImageSaver.cs create mode 100644 "cs/TagsCloudVisualization/Images/10000_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" create mode 100644 "cs/TagsCloudVisualization/Images/1000_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" create mode 100644 "cs/TagsCloudVisualization/Images/100_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" delete mode 100644 cs/TagsCloudVisualization/Images/FIRSTa.png delete mode 100644 cs/TagsCloudVisualization/Images/sECOND.png delete mode 100644 cs/TagsCloudVisualization/Images/third.png create mode 100644 cs/TagsCloudVisualization/RectangleExtensions.cs diff --git a/cs/TagCloudTests/CircularCloudLayouterTests.cs b/cs/TagCloudTests/CircularCloudLayouterTests.cs index 9e29b5ee6..387e95096 100644 --- a/cs/TagCloudTests/CircularCloudLayouterTests.cs +++ b/cs/TagCloudTests/CircularCloudLayouterTests.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; using System.Drawing; -using System.IO; -using System.Linq; -using System.Reflection; using FluentAssertions; using NUnit.Framework; using NUnit.Framework.Interfaces; +using TagsCloudVisualization; -namespace TagsCloudVisualization.Tests; +namespace TagCloudTests; public class CircularCloudLayouterTests { @@ -42,7 +40,7 @@ public void SetUp() { defaultCenter = new Point(5, 5); storage = []; - layouter = new CircularCloudLayouter(defaultCenter, storage); + layouter = CircularCloudLayouter.CreateLayouterWithStartRectangles(defaultCenter, storage); } [TearDown] @@ -50,18 +48,18 @@ public void TearDown() { if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) { - var testObj = TestContext.CurrentContext.Test.Parent?.Fixture as CircularCloudLayouterTests; - var info = typeof(CircularCloudLayouterTests) - .GetField("storage", BindingFlags.NonPublic | BindingFlags.Instance); - var st = info?.GetValue(testObj); - - var visualizer = new CircularCloudVisualizer(st as List ?? [], new Size(1000, 1000)); - var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); - visualizer.CreateImage(pathFile); - TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); + SaveImageOnFail(); } } + private void SaveImageOnFail() + { + var visualizer = new CircularCloudVisualizer(storage); + var pathFile = Path.Combine(Directory.GetCurrentDirectory(), TestContext.CurrentContext.Test.Name); + visualizer.CreateImage(pathFile); + TestContext.Out.WriteLine($"Tag cloud visualization saved to file {pathFile}"); + } + [TestCase(0, 4, TestName = "WhenWidthZero")] [TestCase(3, 0, TestName = "WhenHeightZero")] [TestCase(-3, 4, TestName = "WhenWidthIsNegative")] diff --git a/cs/TagCloudTests/CircularCloudLayouterVisualizationTests.cs b/cs/TagCloudTests/CircularCloudLayouterVisualizationTests.cs index 627990b47..d999032a0 100644 --- a/cs/TagCloudTests/CircularCloudLayouterVisualizationTests.cs +++ b/cs/TagCloudTests/CircularCloudLayouterVisualizationTests.cs @@ -2,8 +2,9 @@ using System.Collections.Generic; using System.Drawing; using NUnit.Framework; +using TagsCloudVisualization; -namespace TagsCloudVisualization.Tests; +namespace TagCloudTests; public class CircularCloudLayouterVisualizationTests { @@ -13,8 +14,8 @@ public class CircularCloudLayouterVisualizationTests [SetUp] public void SetUp() { - center = new Point(500, 500); - visualizer = new CircularCloudVisualizer(GenerateRectangles(center, 100, 5, 1000), new Size(1000, 1000)); + center = new Point(750, 750); + visualizer = new CircularCloudVisualizer(GenerateRectangles(center, 100, 30, 100)); } [Test] @@ -33,7 +34,7 @@ private static List GenerateRectangles(Point center, int maxSize, int { var rnd = new Random(); var storage = new List(); - var layouter = new CircularCloudLayouter(center, storage); + var layouter = CircularCloudLayouter.CreateLayouterWithStartRectangles(center, storage); for (var i = 0; i < count; i++) layouter.PutNextRectangle(new Size(rnd.Next(minSize, maxSize), rnd.Next(minSize, maxSize))); diff --git a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs index a05bce078..04379edeb 100644 --- a/cs/TagsCloudVisualization/BruteForceNearestFinder.cs +++ b/cs/TagsCloudVisualization/BruteForceNearestFinder.cs @@ -11,23 +11,25 @@ public static class BruteForceNearestFinder { if (rectangles.FirstOrDefault() == default) return null; - var calculator = GetMinDistanceCalculatorBy(direction); var nearestByDirection = rectangles - .Select(possibleNearest => (Distance: calculator(possibleNearest, r), Nearest: possibleNearest )) + .Select(possibleNearest => + (Distance: CalculateMinDistanceBy(direction, possibleNearest, r), Nearest: possibleNearest )) .Where(el => el.Distance >= 0) .ToList(); return nearestByDirection.Count > 0 ? nearestByDirection.MinBy(el => el.Distance).Nearest : null; } - public static Func GetMinDistanceCalculatorBy(Direction direction) + + public static int CalculateMinDistanceBy(Direction direction, + Rectangle possibleNearest, Rectangle rectangleForFind) { return direction switch { - Direction.Left => (possibleNearest, rectangleForFind) => rectangleForFind.Left - possibleNearest.Right, - Direction.Right => (possibleNearest, rectangleForFind) => possibleNearest.Left - rectangleForFind.Right, - Direction.Top => (possibleNearest, rectangleForFind) => rectangleForFind.Top - possibleNearest.Bottom, - _ => (possibleNearest, rectangleForFind) => possibleNearest.Top - rectangleForFind.Bottom, + Direction.Left => rectangleForFind.Left - possibleNearest.Right, + Direction.Right => possibleNearest.Left - rectangleForFind.Right, + Direction.Top => rectangleForFind.Top - possibleNearest.Bottom, + Direction.Bottom => possibleNearest.Top - rectangleForFind.Bottom, }; } } diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 4a1acb719..9e242cc5c 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -9,19 +9,23 @@ public class CircularCloudLayouter { private readonly List storage; private readonly CloudCompressor compressor; - - public CirclePositionDistributor CurrentLayer { get; } + private readonly CirclePositionDistributor distributor; public CircularCloudLayouter(Point center) : this(center, []) { } - public CircularCloudLayouter(Point center, List storage) + private CircularCloudLayouter(Point center, List storage) // TODO: протечка абстракций { this.storage = storage; - CurrentLayer = new(center); + distributor = new(center); compressor = new(center, storage); } + public static CircularCloudLayouter CreateLayouterWithStartRectangles(Point center, List storage) + { + return new CircularCloudLayouter(center, storage); + } + public Rectangle PutNextRectangle(Size nextRectangle) { ValidateRectangleSize(nextRectangle); @@ -36,16 +40,15 @@ public Rectangle PutNextRectangle(Size nextRectangle) public Rectangle PutRectangleWithoutIntersection(Size forInsertionSize) { - var firstRectanglePosition = CurrentLayer.GetNextPosition(); - var forInsertion = new Rectangle(firstRectanglePosition, forInsertionSize); - var intersected = GetRectangleIntersection(forInsertion); - - while (intersected != null && intersected.Value != default) + bool isIntersected; + Rectangle forInsertion; + do { - var possiblePosition = CurrentLayer.GetNextPosition(); - forInsertion.Location = possiblePosition; - intersected = GetRectangleIntersection(forInsertion); + var possiblePosition = distributor.GetNextPosition(); + forInsertion = new Rectangle(possiblePosition, forInsertionSize); + isIntersected = forInsertion.IntersectedWithAnyFrom(storage); } + while (isIntersected); return forInsertion; } @@ -55,11 +58,4 @@ private static void ValidateRectangleSize(Size forInsertion) if (forInsertion.Width <= 0 || forInsertion.Height <= 0) throw new ArgumentException($"Rectangle has incorrect size: width = {forInsertion.Width}, height = {forInsertion.Height}"); } - - private Rectangle? GetRectangleIntersection(Rectangle forInsertion) - { - if (storage.Count == 0) return null; - return storage.FirstOrDefault(r => forInsertion != r - && forInsertion.IntersectsWith(r)); - } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs index 2ee4a32e6..1d05f82ba 100644 --- a/cs/TagsCloudVisualization/CircularCloudVisualizer.cs +++ b/cs/TagsCloudVisualization/CircularCloudVisualizer.cs @@ -2,22 +2,24 @@ using System.Collections.Generic; using System.Linq; using System.Drawing; -using System.Drawing.Imaging; -using System.IO; namespace TagsCloudVisualization { public class CircularCloudVisualizer { private readonly Color backgroundColor = Color.White; - private readonly Color rectangleColor = Color.DarkBlue; + private readonly Color rectangleBorderColor = Color.Black; private readonly Size imageSize; private readonly List rectangleStorage; + private readonly ImageSaver imageSaver; + private readonly Size defaultSizeForImage = new Size(500, 500); - public CircularCloudVisualizer(List rectangles, Size imageSize) + public CircularCloudVisualizer(List rectangles) { rectangleStorage = rectangles; - this.imageSize = imageSize; + imageSize = CalculateImageSize(); + rectangleStorage = PlaceCloudInImage(); + imageSaver = new ImageSaver(); } public void CreateImage(string? filePath = null, bool withSaveSteps = false) @@ -26,9 +28,10 @@ public void CreateImage(string? filePath = null, bool withSaveSteps = false) using var image = new Bitmap(imageSize.Width, imageSize.Height); using var graphics = Graphics.FromImage(image); + graphics.Clear(backgroundColor); - graphics.DrawGrid(); - var pen = new Pen(rectangleColor); + + var pen = new Pen(rectangleBorderColor); for (var i = 0; i < rectangles.Length; i++) { @@ -36,17 +39,45 @@ public void CreateImage(string? filePath = null, bool withSaveSteps = false) graphics.DrawRectangle(pen, nextRectangle); if (withSaveSteps) { - SaveImage(image, filePath); + imageSaver.SaveImage(image, filePath); } } - SaveImage(image, filePath); + imageSaver.SaveImage(image, filePath); + } + + private List PlaceCloudInImage() + { + var deltaForX = CalculateDeltaForMoveByAxis(r => r.Left, r => r.Right, imageSize.Width); + var deltaForY = CalculateDeltaForMoveByAxis(r => r.Top, r => r.Bottom, imageSize.Height); + + return rectangleStorage + .Select(r => new Rectangle(new Point(r.Left + deltaForX, r.Y + deltaForY), r.Size)) + .ToList(); + + } + + private int CalculateDeltaForMoveByAxis( + Func selectorForMin, + Func selectorForMax, + int sizeByAxis) + { + if (rectangleStorage.Count == 0) return 0; + var minByAxis = rectangleStorage.Min(selectorForMin); + var maxByAxis = rectangleStorage.Max(selectorForMax); + return minByAxis < 0 + ? -1 * minByAxis + : maxByAxis > sizeByAxis + ? sizeByAxis - maxByAxis + : 0; } - private void SaveImage(Bitmap image, string? filePath = null) + private Size CalculateImageSize() { - var rnd = new Random(); - filePath ??= Path.Combine(Path.GetTempPath(), $"testImage{rnd.Next()}.png"); - image.Save(filePath, ImageFormat.Png); + if (rectangleStorage.Count == 0) return defaultSizeForImage; + var width = rectangleStorage.Max(r => r.Right) - rectangleStorage.Min(r => r.Left); + var height = rectangleStorage.Max(r => r.Bottom) - rectangleStorage.Min(r => r.Top); + var sizeForRectangles = Math.Max(Math.Max(width, height), defaultSizeForImage.Width); + return new Size(sizeForRectangles, sizeForRectangles); } } } \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Dicrection.cs b/cs/TagsCloudVisualization/Direction.cs similarity index 100% rename from cs/TagsCloudVisualization/Dicrection.cs rename to cs/TagsCloudVisualization/Direction.cs diff --git a/cs/TagsCloudVisualization/GraphicsExtensions.cs b/cs/TagsCloudVisualization/GraphicsExtensions.cs deleted file mode 100644 index 01fc09426..000000000 --- a/cs/TagsCloudVisualization/GraphicsExtensions.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TagsCloudVisualization -{ - public static class GraphicsExtensions - { - public static void DrawGrid(this Graphics graphics, int cellsCount = 100, int cellSize = 10) - { - Pen p = new (Color.DarkGray); - - for (int y = 0; y < cellsCount; ++y) - { - graphics.DrawLine(p, 0, y * cellSize, cellsCount * cellSize, y * cellSize); - } - - for (int x = 0; x < cellsCount; ++x) - { - graphics.DrawLine(p, x * cellSize, 0, x * cellSize, cellsCount * cellSize); - } - } - } -} diff --git a/cs/TagsCloudVisualization/ImageSaver.cs b/cs/TagsCloudVisualization/ImageSaver.cs new file mode 100644 index 000000000..bfd59392a --- /dev/null +++ b/cs/TagsCloudVisualization/ImageSaver.cs @@ -0,0 +1,24 @@ +using System; +using System.Drawing.Imaging; +using System.Drawing; +using System.IO; + +namespace TagsCloudVisualization +{ + public class ImageSaver + { + private ImageFormat format = ImageFormat.Png; + + public void SaveImage(Bitmap image, string? filePath = null) + { + var rnd = new Random(); + filePath ??= Path.Combine(Path.GetTempPath(), $"testImage{rnd.Next()}.{FormatToString()}"); + image.Save(filePath, format); + } + + private string? FormatToString() + { + return new ImageFormatConverter().ConvertToString(format)?.ToLower(); + } + } +} diff --git "a/cs/TagsCloudVisualization/Images/10000_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" "b/cs/TagsCloudVisualization/Images/10000_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" new file mode 100644 index 0000000000000000000000000000000000000000..1715e0146272d534e3d6b9387accf079c0e9443d GIT binary patch literal 2272575 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ℌ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%0A-|bb? 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%0D&MPw)K$T8*34OC+kN$cLrz>?j*Hd-%r|iVP0U1 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%0AOBMqO$V!O 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

>uGBb=;`{yA!`{hc@d0;dO(4_jJVQoPVhGau#s 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 z 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

%4+~WA}4rQ|Efn!~)cpnoq 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%0Ae>WS2N9t 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%0Dx7^fwKr@4jQ;P5H+x{a&+94?05ZA1_2X18u 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

3FDS7p%0Q?8EmLmWqnAgP_Qr<5e6U4{Wy! z%AVmXd8AQlx@cY*)w^D@pG+LD`cq=)RSf+GygN#QTT&c6s)hfK4P{mI2>W2GTkCcK zSR=;NqQmB}8dar{vAgj4juGL5as6&yyy9X9wCX=E81o4xQzBQZx%cVO$c{0#!rPuh_Typa4_$vB3`Ww+-7P=s?1@S&!+m4YDt85jlD4^X?5d4ChL5Q!YpNNE}8(k$cyPNA^mXRKJE9vKNh@A?ZX$94>3gvaKADV z`RT3@&aOQbmzr$>`AR;bO&5(aJVXrw(zrqUtT68GWBhVKpJz$j#%X%y^Y65xYIPl! z1)+ZHpyuVuAWN;FW%W&{*^2z9iguF+kdVy5b|NlG4JJVoaO%odNdqnt7>|U^23tt6 z7O~~~CU~?JKZTdQBC|mMy4cg|5iV@JFMMNEO zXu>5};gzOBcibL(LoWRX=aD|>#o!-S2;yG*K1TGRcJTkZw|OiGLeKO+#d$KA{Pd1hHSl+SR^` zYfi8*xCPJSaBRIUc?Fwd|IG@At9tWHfeZ3{d*M^ift1xWG_9i1B9ziXNhskCCq-)( zJsqV!h^WY<{YFY1)}ak%1l~1`J5(FT4gQ(t~GE%@RrsfcL5ZpS_|QfnUZ)BGnl=1F|Ad&p=_P21MXbiv?gAfjYG z1;RK&hOL8b=Q#be3m*24y1iF9;ik+Fbf{6iXyFs}2Pge2wX>=+IT#s#YqJ0hi{6*~ zz7zeD8g~4x&?OlXtn4Y|ywS<^nyu^=`(WmeoG>;+G%n`NFGTQ~Z!w}_lZ6PPXvtDH zaB984xo=2CjB+S4@qapJ)i@jIQOeaaWh*TIFlND65SF2+W$fS?9H%_h%02O%995T+ zJ)6xvlRezgnr=H&8ovv}7#NN1A?HKNb{)-%G~CH^QUA;+5q>72i3O^sqf{u_13|@P zah$vuI-SAZm8+p&P}U2&#C7BL-TZ#sOL;7I)_3upfTSouPWCCIKQ-_%iyr)0dzd>L z?uq3{?MId&zz{&kK>GZU@Oc%`$YwxH%ddZ$} zL?n|~2{A5a!0pt!n+a~gS&m;ni*vf-;v^bw62MS5c0%{;2&%Gn*oU_kOy{e##vc$=v{~LvG{#@S!txWig_tF998U;8n)%dV+WLcRC&HPV(PIS6L(!mB7Au90 zR0IU4*)X+_vN*;D$|QMA&LmA@r`2UTZU&gJmg4^MQL~v{y`p(EUotmhL|qPubyuYmfsu2(e}tB;I|0=OB9I}k7u zW)w#dLAcyZC~2Fitv6Z(Qkay3SZ>+0@p zEp3MfN21C2>TYsKIH)bMd>-`(yM6Rv@HpoSP3VYzC78y4t2(SJhDjcvd&a{AB> zNN&t5*R9V5?e1%=hVC1FU`0^%9MI@~@>j>a))h`RB2Otpbp!uB z0VWb!H>k_NSyv?Jb;_U$XI{LNSW;%PPt_2PyI&i?y!CpCCh03QZFGld9vd{j|AFbq zx|FELjHKeci`vys(MAtyZt#Zu;m42?P#F=L32VS<_dOhzKV{mzo9H$4!VCKTkG8$< z4f$MAZvhCww(LX8RUa5$elXRZ`U`k&kcWQ#j5!LC?!wrmW}R(w9Qk~xmTil`ad#~8pI^~5dnwR zs8uo)W`{&v8nC0^S;_IEhvF(cB?YtSNpFe7A;?r)J=xx`(l5;R*j#wZEMqW1Kh)nt ztO{Fr+X_Lh)w8zONd(R@38U6eBkqH3Dv81nLug9oyF}cORbrMMSg--l|}Dk#+dv*jl?=$g^S|iD%Uy$;aUy=iZjR>Whb& zvi>}4YtKwh9n!DZn2A$&*^b7ari?(32vO7Sj#l4Z8zgk^ZYQ%|fdD9!D74mwH%GNn z>)zD|`BL^%b_6I=K4|)V8Bd0tKmyT0t%$7Dp&1_SG_`{HR~Hh5JKIc) zQygWp@VpwJ%orZbAxb%^swV%0)pH32MHxlH_Ayh$xBC`sX!knVwow)3S{wMCX2i8n zX(HTX?--^Uv*y7n?a0eUy-z%*_t|8NhfMo4 zSiobd2ZH}Tz5n+Ih4ne?Sum$*4Z+VL8RdVAkz^pm9+L?11Uy&vp9eqFAd@w@8e=&# zSPVZX{t88})9QI|iaE*Evl`gHt~bdVW0wnkkD3Js;vd;`j>=45haE-N`fSsQz6p=$VU1ga6sl-)9uw{=`-umht zBg9i_^^EBL*GE%kmsS5fF05}K4Qg7@RXywa4(1C;Vb z;J3r2uf(bnIul#)$bjCPMf12rhE~QVimYFO<+WG#|Ico5&c(oFF!&+sm zM@!nfV*vq{bR$gKj$a#NhLhy;OJM<)m}W>Z5e&V`kG#LYkfPD+!1sL0p(y)nz}afUroV|a}| ztf3^@fn+8&Bz>m{bWcT77>%LecdH7E{dCBCwlir899un~jRKbf?r|wKpU$Qh%uRzS zlKh7^tmKD%(gZNv_g~K-cfZ6vxYu+mk=P!MNv2~8cmfON9W+HKdX3*kPw*i z9DE0mxvTlam`hL!ev+K=t(d#?kJ9sj-8Iu$5d)xnK*c@I8RGRjXlw_6F1 z8mttjzQ8ik z@q)0!EhEb#c+iYzu<97IhqL~OD^}g@qUBq#CTZUJOmd>=Po}uU9{}#B$|FTKTEn|5 z&kxQkqh*M(?A*~*${b+G31#W^G2pWECK8v^(hl{B%;^z$v z9H1C0|slWP1scczm zg7%`y`A!o8794r@nF4BV<7$6k8N0{^JH$|;!2nL0i$z%E661uHG1;i2KRb2~H1sAA zZU(Q#EabLfh1<^J`{&V&=9>5AqF;)Jtvj-zfsZ4mlw zO+m-z-CMF3!=nAgQT2B>7Dl}r#;mZU%t6?y z30WR#eOdWCD-A1nGu<`|tSU{^Kme0(Xn{vKWKAw~)ZLeImZPtJu!I~b9R9pzL^$X) zD@Ahf|zw*z*iQK|XDZSNuVNmkFc1EAGWs066B>818J0?YjX= zBUked@PNwUMzPBZ2_Mw`mB z82sdUY2}zbGL%LCX`@fqg%mEsP2MK*53~$w7Kl0#({@GNB}p!g7HU66=5ro&g0MGr zBf^I$r$oz}p2FrM2>Ym=p{Dizn^cb*)9|?(>0s`e13HriP+aS9^}MCJ_~l5jT#Ok| zr{nans-#{JU5X1kK8ALG-}?eUYfS}UP`SIA@ET+w)pIkCN01gkZsWN7@26Sy-~LD{ zFvluXg~chea$5^bb#`~MHeawi7kBu1_9dl55`h@@$ljEl^0{SLD5#N?Un)(M6sAuC z;LZBYBz|6SOYaK4-YmjA_W^FtyBX@!uJ~gIQQR&C*HS#ivHdSCr9yqE8QrI@NW8I3 z?=n_NcG6V@&Ei&WRzo}4t7?jr-F95S=)^^ez`(LUu*U=v{b6BiYF%QUUd(>vh&k$? zcYCWP8ArTV%A!?z&dPI7b5`Rodq|404rJkv3k2ZKB^pQIguF4fLF#sK4nb)G3Or5o zE*&Y3?(p5nNTmHT0=_f4WjX8A#hR?J{#JV=4C5Y#b2XkCmH4-4-c%=Cq>)Az@5XO+_;47m_vh65~jNU|59j4_ejMV>du?#A^o=;6UjL? zo3h6peBt>pazqXr@do3;Mas6fb8@D-NntL;7Dp1A;ifsQ0pDC4k0^0_3aGeMgb^>b z&k_IS*fOg+B^kEw{jtO#0v$4tEqvf?S`y_JF7LUhdle}Xts2?I?nU0KX@3J$y3t=1 z=0wXnC&_RF#Ci+bf!3&sKLM+bwd>$-nl%c>pQh_2}1)kx73`A0&vmkQ}>p7OHeV$kpsBKZc}IMfHClS z*5m*{%t#T&3^Lk^X^#;9d8Y%%cMWwPY#DKbJz84%CMRREqWux0By;`A~o=R!*YTO{!jqsi{EOoX+})mS<*3XN{UmOBly z4(Pz=?)5#YxBdzTET+gLK^2b)TPyaob673|zIxJ*04 zdM2EiyD+jAIvl93F5HJT4f}CewHgSwid(ro#ZlBnMO9-Z2|{J8-N<-ggp0kvz?4Xv z3RO9}Y5K@N@zCbP-w8ueM$j*qQa;RC(m9$^9?NL?H52T(!(++_&MLB>*rag`Z5e42 zee_m|(qpQBbfneZ#g16Y=_F7XKle36CEY)!fPem8aP~ zej5jBj8|BAwoz+2R5scb;;k`x?cra+4v8V|5#DL%kSk-U6=kq1ziT^Gc9%=rHofTG(k z=pM;TpkFYGeE*zz?PwI)aIrLxaA1I~b_>AEpoZv)%VUn@e&C_^J4B&k6@kO#ZEIxH z9>_>YpWv}?wihK!6_F0sljD%hY8+YJ1tqw_z3#_BWM34S+1{ll&T2raBJA^l{uL8q z?XyLT>{gpdoTsLue1H%s>Y+PpWRGd=VG?vK*GMexcnUI6dx39AL5?fhwdGz_bmAz1 zedu{KaiqA-6{Ton4Z==rYaRw;MjppZUH5FyR)9Os32R7`1{bn@b6*8n8FKXbjV@0o~4vDbCWL7*_){e>RXez}4m6N&- zX&1QQbn(QNy)W(2RpdOG&_6C5MJ22H3(^=GEc1Y_)ID~f6#9K7{|>2c=ws!SSX!{a zQp_L2fxlnBxzkYO0%QGy3dQ+}VG%~N_G7-nkyH^ILHtxYAuQ6+8FIeE7tO+-pH>hO zA6!`uv&07o2C2swH;ZMsXwzMBra%-~vXq5sW zJr!O(oP~&1$ZJkR_430Q$oap+`S&>-?IRo^k?5Y;D{}O&$|(MniAvv(o2mS;1=)=* z#nn3VjCyAAV|T-!whOCVWg8my;JgRAsYG_<&r0GFI%#h&WBqxK)}7+A^@csFA1h6P zG-*TPA^gUl1>_W$Vl;uF+GI^l(m68v+FDaqK_h$u2VS!pF8kNOfi|X!HmYpZ@e*9s z5VOXyyzA?w^ZZJA{Y2ZKso zUG0XBIBrn|R@31QU9Qi}iDak)y;-os%|^YIZrHLK4>+VoQ4%ovQ8!~Iy^8LTiot)4 z;*{28@X7B-drJwzngz~qjV-aC2cwJt#@?gGVfU9U*$C0!&NA&Ks@>d%fsIAC$5IWC zl`v?C;{%cbH@i%Hpe&ijJGZ2zM)ezevTw+00E6u;rCK^b%xVH3f9^9Fo-qXsf(PRXk{@ zF8ExmKM*c=!qLD~%zwbaSV=#3aQ_ry;-d$`R>EEVn1ia5LxvSbf2dpxsIT?O1@pv% zk&1B1JieFj7_YJy`L39Sb%p`M!NDsc+)#c2FnojsR5Ih7;a5OEPPLaMrRK{GBE%5o zU|?N#9cXz)iMrFMPokSe5oXw+e?oA$c}N#E64!MNf7ujQ-!|~-wpLish(Z5Dh#oAO zDFA|iuUxu3T5mz61Ep&^5En2wJeV|-rPXi=79on=`==0bq$4*F9>U!+Dk=v_+G{_U zuyLlKz5>n%N~ydy6y=46Ncany-WEsb_ouvmv7Osl#+0Bd9Ej$Sd(}iYz1}#Of1ksd zu2R@rxRGPmGZGrikq(@IX+aWYzy!ybG7J|3Z#F{{|1v&=ik& zu1St^v+rxHLD{`ghg+$)Y;P%%Mu3v209W2QMbZ+~zn=*HC+zf^Bx(I|2XX`{R|A%3 zMqetRBD$1W^5`g8JAnw#ILha>rnYdi`36lwE-uDEwenA&Zgz0odYr(5A*XDxtAC>g ziY0>6Xpzgk&q?<7e$zPR({)@NCP@s!f;)|q)QIVg#fX7w3vVeHn?TR3rFf)?hf;$j z31cF9NM+#$Y%qWLM)45`678?Q<^Ei~{f((+i#=w#2=P=6CDP$#$84(gCKrOiSup5V ze_TWP!mmmYraOsKAF&R9tY0l0viz<^Vva!$MP7^H+0d0w04h(MJO2?y5*eq%Mb)4O zve6NxOmKfGstzfwTuRlfE1F`7mzYS4H`t?0Mw0`! z>O;ZTt;I?j0eroyB6Z7z{`)H?@liARHFidZ^)%TR~S8Gs3J-A&hY>g|)C= zT=?^Ep+L`a*yI3&Awb*lNWS9pV{j|gih9VP3>_JEBDzK1b7@RugeV4Ia$*fL%8|4f zF9*k2vRuD)0^dsw2ihwi2%LpGOeQ=Onr@`T?$2}z)w-DMLSG8anI|YxxgRXS-V-kn zl$cYsj~-Qw9Of5Q^!FRIOV=1tp4O+``X|>^(Y~p`{_(hx(ujWPa?tu;H;d#wg(fdw zty)B8w1XkQDKvSxn*dr0ppz`>!bfWDFjbS_E5lA1*X~!5$@V`nMTc4-=kf0P(FmWF zL7(CVoY@=-f-kScAyK4d&UHIU_e+vwMQAI=5j0GcFhK-lMy@(^<2XDj#=kgHz{0Cg ziV0wn0~DSQEM=PM9&v`RRXvA7@#Ykcsg{Ww*jnp4j!57(XJ)OHX)ftt;!jrD zxDf?80SzIi&iUlh26nUzGl00}=_Qk|UKRL$rEH$QLUJJt#+B4;!T3xGLq72WJ->6& zpKFq~q2dvG~`0rSW>bJf8Q_pgXd5L9E&jN{RvnSW zD&b^>_qUp>gCBA1)U3>0gfXh?y|x5WbnJn+EjD9r0k?xiXr?gLWs|C`c!4VJ@|bHk z%}^mlw;S|6?a~5-u6PJ%uJ;9&up{exs)fofd*joowq6eJkY@1XFR9x(d5!Hcmt-RX zyj!SWK+K>a3u4X;YZ}T^G-*#4zbT4>>_&gJszs~2a8sFq^I93ng~ zRoE#X1c(g++!48IuRaB?(FR^EYuq(IU~$aM%;LdQ(*rbMhVL<8Q3A4IF3noJSm2&{ zy&d0G5=IM9)n=#T_$><*;AWs%zY)fAr%LKpV3k`=sIP|x>j4S}1qspR|A?M}S==)> ze&I_NHd`YAl~4ztAV0b;LcYZBP%$?w_D|X(gNuKj$l{8Ym|}U~i;Lil%71Xf^hGwU z^kj@xXKMIL;04XJ<>poNmw+Ln$Iu1G3RK}L z$8M28xHX-?7>M!HR8)v77krB@)EXJPd62cN`fm*eEU}a2e?bg`MY4MB%R{1&VYq%! zhpRo8yXu_BjpATlC+IYmt0Luuu!ghK6r{4(x&{&zH(pbq#4$J!iQ~t2dxptUi*z{EaKQx7 zCG=PNsPk|5NgXP`j%}HwPEH3g{A$P4zS^==_|xFxu)((%3^GcJ6UE(F8ZK%=(cWIo z_&}=EfSWOs6zzlP2v?L(KujwbZ+P5&8KPnUCMrs>k6d-A3az?OS1E{LTH^zR;ek)m z`e7*ovA)@IB=sl@Mj(MPo4YC-m%@G?A1M+Z?+E{cKMK zQI*9IxZfh+6y6)_3Umco?YizdeDS55Bg?TB|KiPMK$%g_52WF+Ezh#M;MOq`9C3`( zCw0oUtNYU60NjxVG^PUqJL89~GJ;R_xyh@ zaAFqvl`BO|fQs$BlslTcYtZ@D7qf&>9QnQG=e~sU@WBGwbo)AM zO{@BT**va1xyB}lD?sNwsAOQ@7*P3E{&;{9?M9$??sJj{e$IZHsjRqLk623W5eBvl zGuts{(Tc%}z8-y1U2Z;_@!ZFAyMFv?oSQ--2KmbI>DOEwyZ_X8@{sEEk-fJ)zgR#-m4({MEqD@U{E@s4=6_aAg{^a(R1U3j>Vj_L?$!2axkd4yJWfYtd(=f(l9{KVqY)rudqe zY+5dQWQ?FXmC#^=pgJ4OX?&GqG1>cC%)s^peRrH5r7Dqui;j*BeG#3rejvG38)Vc_t?o3Zp0S8>h-3hstcuymnWH+)lz* zyl16kgy!ziqdQj>+{gqWh=0-3!m`g>JP8S}+0v8&U#d z3t_?4l|wDF=y&goU8(Z#tu3rQbKAFl~3(a+PKY7j{uwf`wuTqw6+=Oc< zIpDn@MWB-_Ju^GCJ0e$z)!jG4Q~L&^Uv_mxxxwUvxSYpFVFuG?=^|G^u6dLytn`&= z*-)k2xcndE?(o0l5JBB5-D_^Kol}TUM}XVXyc22Z3A4*EHy1_ZD+gB z{ZIBU*Y*9rKkujS_u>j77E=FImb8U%Y271zaIpk}j>QV2v2P>fBb_1yaKhnHD)&*G z^)t&9XmZPiNNUg3Dk&-7O-;)R|E@cX=NXWeSB$e4Ep3|qN*;vr5fL!FCqL*Sr4(Y; z9jlw!8lrR`xu+R$_0gY~v^UalxQDpn;!5A!q^*4ZE_6imxi1ww=+em6)6=6v8HS4| zC2TFO^ywfJEN*>ZS~BQ5>w|+Cil@a$TWGBV3kj6)e0~nh+4jdC(-j+t`9y;nv0d{M zy@sYRFVb^QJFk|(ta%fsw>^w+gRCo?5%w>D5FLu>6W0&)lpXfzs9)h`m%0DsZkmGk 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%0DhSFXxa9^GdAjkVGZ-PtW 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 literal 0 HcmV?d00001 diff --git "a/cs/TagsCloudVisualization/Images/1000_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" "b/cs/TagsCloudVisualization/Images/1000_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" new file mode 100644 index 0000000000000000000000000000000000000000..4937fdbefbd9b434858c2d57435cd00f37825ada GIT binary patch literal 234846 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 b2qm+M61LV?&fz|UbJ=RX%PeQpzJL5Lau%lY literal 0 HcmV?d00001 diff --git "a/cs/TagsCloudVisualization/Images/100_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" "b/cs/TagsCloudVisualization/Images/100_\320\237\321\200\321\217\320\274\320\276\321\203\320\263\320\276\320\273\321\214\320\275\320\270\320\272\320\276\320\262.png" new file mode 100644 index 0000000000000000000000000000000000000000..e773bba38ea1cb8d910352afc65c0e4ab717b27d GIT binary patch literal 23661 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 a*wPoSnxz+i13tA|?BIUmeK~s_&i)Tt)0q_j literal 0 HcmV?d00001 diff --git a/cs/TagsCloudVisualization/Images/FIRSTa.png b/cs/TagsCloudVisualization/Images/FIRSTa.png deleted file mode 100644 index 774375a9637076c23f8ba0348f64167e133bc5c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31431 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 TxyDiO-y8mm<_lh1@!tOf@j>Uh diff --git a/cs/TagsCloudVisualization/PointExtensions.cs b/cs/TagsCloudVisualization/PointExtensions.cs index 51bdf6af0..bfdffa45f 100644 --- a/cs/TagsCloudVisualization/PointExtensions.cs +++ b/cs/TagsCloudVisualization/PointExtensions.cs @@ -11,7 +11,9 @@ public static class PointExtensions { public static int CalculateDistanceBetween(this Point current, Point other) { - return (int)Math.Ceiling(Math.Sqrt((current.X - other.X) * (current.X - other.X) + (current.Y - other.Y) * (current.Y - other.Y))); + return (int)Math.Ceiling(Math.Sqrt( + (current.X - other.X) * (current.X - other.X) + + (current.Y - other.Y) * (current.Y - other.Y))); } } } diff --git a/cs/TagsCloudVisualization/RectangleExtensions.cs b/cs/TagsCloudVisualization/RectangleExtensions.cs new file mode 100644 index 000000000..f763ceb40 --- /dev/null +++ b/cs/TagsCloudVisualization/RectangleExtensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TagsCloudVisualization +{ + public static class RectangleExtensions + { + public static bool IntersectedWithAnyFrom(this Rectangle forInsertion, List storage) + { + if (storage.Count == 0) return false; + return storage.FirstOrDefault(r => forInsertion != r + && forInsertion.IntersectsWith(r)) != default; + } + } +} diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj index 2f9c89282..e0b83b3b0 100644 --- a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -24,7 +24,7 @@ - + From 0f532ed3c31f8c4a6b153ac9175fb8f1edbb2112 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Tue, 17 Dec 2024 03:46:17 +0500 Subject: [PATCH 31/33] Change compress algorithm --- cs/TagsCloudVisualization/CloudCompressor.cs | 63 +++++++++++++++----- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/cs/TagsCloudVisualization/CloudCompressor.cs b/cs/TagsCloudVisualization/CloudCompressor.cs index fa4ea3325..de6b4987c 100644 --- a/cs/TagsCloudVisualization/CloudCompressor.cs +++ b/cs/TagsCloudVisualization/CloudCompressor.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Drawing; namespace TagsCloudVisualization @@ -7,6 +8,7 @@ internal class CloudCompressor { private readonly Point compressionPoint; private readonly List cloud; + private int minDistanceForMoving = 1; public CloudCompressor(Point compressTo, List cloud) { @@ -14,23 +16,52 @@ public CloudCompressor(Point compressTo, List cloud) this.cloud = cloud; } - public Rectangle CompressCloudAfterInsertion(Rectangle insertionRectangle) + + public Rectangle CompressCloudAfterInsertion(Rectangle forInsertion) { - var toCompressionPoint = GetDirectionsForMovingForCompress(insertionRectangle); - foreach (var direction in toCompressionPoint) + var toCompressionPoint = GetDirectionsForMovingForCompress(forInsertion); + var beforeIntersection = forInsertion; + var prevDirectionHasIntersection = false; + for (var i = 0; i < toCompressionPoint.Count; i++) { - insertionRectangle.Location = CalculateRectangleLocationAfterCompress(insertionRectangle, direction); + var direction = toCompressionPoint[i]; + + while (!forInsertion.IntersectedWithAnyFrom(cloud) + && !IsIntersectCenterAxis(direction, forInsertion)) + { + beforeIntersection = forInsertion; + var distance = GetDistanceForMoving(forInsertion, direction); + forInsertion.Location = MoveByDirection(forInsertion.Location, + distance == 0 ? minDistanceForMoving : distance, direction); + } + + var wasIntersection = !IsIntersectCenterAxis(direction, forInsertion); + if (!prevDirectionHasIntersection && wasIntersection) + { + forInsertion = beforeIntersection; + prevDirectionHasIntersection = true; + } } - return insertionRectangle; + return beforeIntersection; } - private Point CalculateRectangleLocationAfterCompress(Rectangle forMoving, Direction toCenter) + + private int GetDistanceForMoving(Rectangle forMoving, Direction toCenter) { var nearest = BruteForceNearestFinder.FindNearestByDirection(forMoving, toCenter, cloud); - if (nearest == null) return forMoving.Location; - var distanceCalculator = BruteForceNearestFinder.GetMinDistanceCalculatorBy(toCenter); - var distanceForMove = distanceCalculator(nearest.Value, forMoving); - return MoveByDirection(forMoving.Location, distanceForMove, toCenter); + if (nearest == null) return minDistanceForMoving; + return BruteForceNearestFinder.CalculateMinDistanceBy(toCenter, nearest.Value, forMoving); + } + + private bool IsIntersectCenterAxis(Direction toCenter, Rectangle current) + { + return toCenter switch + { + Direction.Left => current.Left < compressionPoint.X, + Direction.Right => current.Right > compressionPoint.X, + Direction.Top => current.Top < compressionPoint.Y, + Direction.Bottom => current.Bottom > compressionPoint.Y + }; } private static Point MoveByDirection(Point forMoving, int distance, Direction whereMoving) @@ -56,11 +87,11 @@ private static Point MoveByDirection(Point forMoving, int distance, Direction wh private List GetDirectionsForMovingForCompress(Rectangle forMoving) { var directions = new List(); - if (forMoving.Bottom < compressionPoint.Y) directions.Add(Direction.Bottom); - if (forMoving.Top > compressionPoint.Y) directions.Add(Direction.Top); - if (forMoving.Left > compressionPoint.X) directions.Add(Direction.Left); - if (forMoving.Right < compressionPoint.X) directions.Add(Direction.Right); - + if (forMoving.Bottom <= compressionPoint.Y) directions.Add(Direction.Bottom); + if (forMoving.Top >= compressionPoint.Y) directions.Add(Direction.Top); + if (forMoving.Left >= compressionPoint.X) directions.Add(Direction.Left); + if (forMoving.Right <= compressionPoint.X) directions.Add(Direction.Right); + return directions; } } From c8f2b68db1f28c39aebd76152187cbffe8ab5b59 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Tue, 17 Dec 2024 17:31:35 +0500 Subject: [PATCH 32/33] Fix naming --- cs/TagCloudTests/RTreeTests.cs | 77 ++++++++++++++++++++ cs/TagsCloudVisualization/CloudCompressor.cs | 14 ++-- 2 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 cs/TagCloudTests/RTreeTests.cs diff --git a/cs/TagCloudTests/RTreeTests.cs b/cs/TagCloudTests/RTreeTests.cs new file mode 100644 index 000000000..71b1ff3f0 --- /dev/null +++ b/cs/TagCloudTests/RTreeTests.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using NUnit.Framework; +using FluentAssertions; + +namespace TagsCloudVisualization.Tests +{ + public class RTreeTests + { + [Test] + public void RTree_ShouldBeEmpty_AfterCreation() + { + var tree = new RTree(); + + tree.GetRectanglesForNode().Should().BeEmpty(); + } + + [Test] + public void Insert_ShouldAddRectangleToNode_AfterAdd() + { + var tree = new RTree(); + var addedRectangle = new Rectangle(new Point(2, 2), new Size(3, 4)); + + tree.Insert(addedRectangle); + + tree.GetRectanglesForNode().Should().HaveCount(1).And.Contain(addedRectangle); + } + + [Test] + public void RTreeNodeBound_ShouldBeEqualFirstRectangle_AfterAdd() + { + var tree = new RTree(); + var addedRectangle = new Rectangle(new Point(2, 2), new Size(3, 4)); + var expectedBound = addedRectangle; + + + tree.Insert(addedRectangle); + + tree.NodeBound.Should().Be(expectedBound); + + } + + [Test] + public void Insert_ShouldUpdateNodeBounds_AfterAddRectangle() + { + var tree = new RTree(); + var addedRectangle1 = new Rectangle(new Point(2, 2), new Size(3, 4)); + var addedRectangle2 = new Rectangle(new Point(5, 7), new Size(4, 2)); + var expectedBound = new Rectangle(addedRectangle1.Location, new Size(7, 7)); + + + tree.Insert(addedRectangle1); + tree.Insert(addedRectangle2); + + tree.NodeBound.Should().Be(expectedBound); + + } + + + private RTree InsertManyRectangles(int rectanglesCount, RTree tree, Rectangle first) + { + var prev = first; + var deltaCoor = Math.Max(first.Width, first.Height); + for (var _ = 0; _ < rectanglesCount; _++) + { + var newR = new Rectangle(new Point(prev.X + deltaCoor, prev.Y + deltaCoor), prev.Size); + tree.Insert(newR); + prev = newR; + } + + return tree; + } + } +} diff --git a/cs/TagsCloudVisualization/CloudCompressor.cs b/cs/TagsCloudVisualization/CloudCompressor.cs index de6b4987c..fb6d5bf80 100644 --- a/cs/TagsCloudVisualization/CloudCompressor.cs +++ b/cs/TagsCloudVisualization/CloudCompressor.cs @@ -27,7 +27,7 @@ public Rectangle CompressCloudAfterInsertion(Rectangle forInsertion) var direction = toCompressionPoint[i]; while (!forInsertion.IntersectedWithAnyFrom(cloud) - && !IsIntersectCenterAxis(direction, forInsertion)) + && !IsIntersectCompressionPointAxis(direction, forInsertion)) { beforeIntersection = forInsertion; var distance = GetDistanceForMoving(forInsertion, direction); @@ -35,7 +35,7 @@ public Rectangle CompressCloudAfterInsertion(Rectangle forInsertion) distance == 0 ? minDistanceForMoving : distance, direction); } - var wasIntersection = !IsIntersectCenterAxis(direction, forInsertion); + var wasIntersection = !IsIntersectCompressionPointAxis(direction, forInsertion); if (!prevDirectionHasIntersection && wasIntersection) { forInsertion = beforeIntersection; @@ -46,16 +46,16 @@ public Rectangle CompressCloudAfterInsertion(Rectangle forInsertion) } - private int GetDistanceForMoving(Rectangle forMoving, Direction toCenter) + private int GetDistanceForMoving(Rectangle forMoving, Direction toCompressionPoint) { - var nearest = BruteForceNearestFinder.FindNearestByDirection(forMoving, toCenter, cloud); + var nearest = BruteForceNearestFinder.FindNearestByDirection(forMoving, toCompressionPoint, cloud); if (nearest == null) return minDistanceForMoving; - return BruteForceNearestFinder.CalculateMinDistanceBy(toCenter, nearest.Value, forMoving); + return BruteForceNearestFinder.CalculateMinDistanceBy(toCompressionPoint, nearest.Value, forMoving); } - private bool IsIntersectCenterAxis(Direction toCenter, Rectangle current) + private bool IsIntersectCompressionPointAxis(Direction toCompressionPoint, Rectangle current) { - return toCenter switch + return toCompressionPoint switch { Direction.Left => current.Left < compressionPoint.X, Direction.Right => current.Right > compressionPoint.X, From 175d3ca76bc3d972f147e7402fa4b3a3c7d57002 Mon Sep 17 00:00:00 2001 From: SomEnaMeforme Date: Tue, 17 Dec 2024 17:33:09 +0500 Subject: [PATCH 33/33] Delete comment --- cs/TagsCloudVisualization/CircularCloudLayouter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs index 9e242cc5c..b53a1a101 100644 --- a/cs/TagsCloudVisualization/CircularCloudLayouter.cs +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -14,7 +14,7 @@ public class CircularCloudLayouter public CircularCloudLayouter(Point center) : this(center, []) { } - private CircularCloudLayouter(Point center, List storage) // TODO: протечка абстракций + private CircularCloudLayouter(Point center, List storage) { this.storage = storage; distributor = new(center);