Example #1
0
        public void ReturnPointWithGreaterRadius_OnNextStep(int centerX, int centerY, double a, double b, double step)
        {
            var center            = new Point(centerX, centerY);
            var archimedeanSpiral = new ArchimedeanSpiral(center, step, a, b);
            var firstPoint        = archimedeanSpiral.GetNextPoint();
            var secondPoint       = archimedeanSpiral.GetNextPoint();
            var firstRadius       = GetDistance(center, firstPoint);
            var secondRadius      = GetDistance(center, secondPoint);

            secondRadius.Should().BeGreaterThan(firstRadius);
        }
Example #2
0
        public void ReturnCenterPointFirst_WithZeroA(int centerX, int centerY)
        {
            var center            = new Point(centerX, centerY);
            var archimedeanSpiral = new ArchimedeanSpiral(center, a: 0);

            archimedeanSpiral.GetNextPoint().Should().BeEquivalentTo(center);
        }
Example #3
0
        public void IncreaseSpiralAngle_AfterGetNextPointInvocation()
        {
            var spiralPointInitialValue = archimedeanSpiral.GetCurrentSpiralAngle();

            archimedeanSpiral.GetNextPoint();

            archimedeanSpiral.GetCurrentSpiralAngle().Should().BeGreaterThan(spiralPointInitialValue);
        }
Example #4
0
        public void GetNextPoint_OnEqualSpiralInstance_ShouldBeEqual()
        {
            var firstSpiral  = new ArchimedeanSpiral(cloudLayouterSettings);
            var secondSpiral = new ArchimedeanSpiral(cloudLayouterSettings);

            var firstPoints  = Enumerable.Range(0, 50).Select(i => firstSpiral.GetNextPoint());
            var secondPoints = Enumerable.Range(0, 50).Select(i => secondSpiral.GetNextPoint());

            firstPoints.Should().BeEquivalentTo(secondPoints);
        }
Example #5
0
        public void GetNextPoint_OnDifferentSpiralInstance_ShouldBeDifferent()
        {
            var firstSpiral  = new ArchimedeanSpiral(cloudLayouterSettings);
            var secondSpiral = new ArchimedeanSpiral(new CloudLayouterSettings {
                StartPoint = new Point(100, 100)
            });

            var firstPoints  = Enumerable.Range(0, 50).Select(i => firstSpiral.GetNextPoint());
            var secondPoints = Enumerable.Range(0, 50).Select(i => secondSpiral.GetNextPoint());

            firstPoints.Should().NotBeEquivalentTo(secondPoints);
        }
Example #6
0
        public void ReturnCorrectPoints_OnNextSteps(int centerX, int centerY, double a, double b, double step,
                                                    int stepsNumber)
        {
            var center            = new Point(centerX, centerY);
            var archimedeanSpiral = new ArchimedeanSpiral(center, step, a, b);

            for (var i = 0; i < stepsNumber; i++)
            {
                var nextPoint   = archimedeanSpiral.GetNextPoint();
                var pointRadius = GetDistance(center, nextPoint);
                var pointPhi    = step * i;
                pointRadius.Should().BeApproximately(GetArchimedeanSpiralRadius(a, b, pointPhi), 1);
            }
        }
Example #7
0
        public void GetNextPoint_ShouldContainPointsFromSpiral_OnCorrespondingInput(int expectedPointShift)
        {
            const int   parameter     = 2;
            const float stepInRadians = (float)(Math.PI / 6);
            var         expectedPoint = GeometryUtils.ConvertPolarToIntegerCartesian(
                parameter * stepInRadians * expectedPointShift,
                stepInRadians * expectedPointShift);
            var config = new PictureConfig
            {
                Parameters = new LayouterParameters {
                    Parameter = parameter, StepInDegrees = 30
                }
            };

            var spiral = new ArchimedeanSpiral(config);

            for (var i = 0; i < expectedPointShift; i++)
            {
                spiral.GetNextPoint();
            }
            var pointFromSpiral = spiral.GetNextPoint();

            pointFromSpiral.Should().Be(expectedPoint);
        }
Example #8
0
        public void GetNextPoint_SavesDistance_DuringGeneration()
        {
            const int distance = 10;
            var       spiral   = new ArchimedeanSpiral(distance, 2 * Math.PI);
            var       points   = new List <PointF>();

            for (var i = 0; i < 1000; i++)
            {
                points.Add(spiral.GetNextPoint());
            }

            for (var i = 1; i < points.Count; i++)
            {
                GetSquaredDistance(points[i - 1], points[i])
                .Should().Be(distance * distance);
            }
        }
Example #9
0
        public Rectangle PutNextRectangle(Size rectangleSize)
        {
            if (rectangleSize.Width <= 0 || rectangleSize.Height <= 0)
            {
                throw new ArgumentException("Width and height of the rectangle must be positive");
            }

            Rectangle rectangle;

            do
            {
                var possiblePoint = _spiral.GetNextPoint();
                rectangle = RectangleExtensions.CreateRectangleFromMiddlePointAndSize(possiblePoint, rectangleSize);
            } while (rectangle.IntersectsWith(_rectangles));

            var result = MoveToCanvasCenter(rectangle);

            _rectangles.Add(result);
            return(result);
        }
Example #10
0
        public void GenerateNextPoint_SavesDelta_DuringGeneration()
        {
            const double delta   = Math.PI / 3;
            const double epsilon = Math.PI / 180;
            var          spiral  = new ArchimedeanSpiral(delta: delta);
            var          points  = new List <PointF>();

            for (var i = 0; i < 1000; i++)
            {
                points.Add(spiral.GetNextPoint());
            }

            for (var i = 1; i < points.Count; i++)
            {
                var previous = GetAngleToPoint(points[i - 1]);
                var current  = GetAngleToPoint(points[i]);
                CalculateAngleDifference(current, previous)
                .Should().BeInRange(delta - epsilon, delta + epsilon);
            }
        }
Example #11
0
 public void GetNextPoint_ShouldBeCloseToOriginOnFirstCall()
 {
     Point.Round(archimedeanSpiral.GetNextPoint()).Should().Be(new Point(0, 0));
 }
Example #12
0
 public void GetNextPoint_Void_FirstPointIsCenter()
 {
     spiral.GetNextPoint().Should().Be(spiral.Center);
 }
Example #13
0
        public void GenerateNextPoint_ReturnsEmptyPoint_AtFirstGeneration(double distance, double delta)
        {
            var spiral = new ArchimedeanSpiral(distance, delta);

            spiral.GetNextPoint().Should().Be(PointF.Empty);
        }
Example #14
0
        public void GetNextPoint_ShouldReturnCenterPoint_WhenFirstCall()
        {
            var center = new Point(5, 7);

            _spiral.GetNextPoint().Should().BeEquivalentTo(center);
        }