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); }
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); }
public void IncreaseSpiralAngle_AfterGetNextPointInvocation() { var spiralPointInitialValue = archimedeanSpiral.GetCurrentSpiralAngle(); archimedeanSpiral.GetNextPoint(); archimedeanSpiral.GetCurrentSpiralAngle().Should().BeGreaterThan(spiralPointInitialValue); }
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); }
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); }
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); } }
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); }
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); } }
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); }
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); } }
public void GetNextPoint_ShouldBeCloseToOriginOnFirstCall() { Point.Round(archimedeanSpiral.GetNextPoint()).Should().Be(new Point(0, 0)); }
public void GetNextPoint_Void_FirstPointIsCenter() { spiral.GetNextPoint().Should().Be(spiral.Center); }
public void GenerateNextPoint_ReturnsEmptyPoint_AtFirstGeneration(double distance, double delta) { var spiral = new ArchimedeanSpiral(distance, delta); spiral.GetNextPoint().Should().Be(PointF.Empty); }
public void GetNextPoint_ShouldReturnCenterPoint_WhenFirstCall() { var center = new Point(5, 7); _spiral.GetNextPoint().Should().BeEquivalentTo(center); }