public void Calculate_ReturnsTheCorrectNumberOfAngles_ForMaxAngleInRadians(
            double fromAngleInDegrees,
            double toAngleInDegrees,
            int steps,
            Constants.TurnDirection turnDirection,
            double maxAngleInRadians,
            double[] expectedAnglesInDegrees)
        {
            // Arrange
            IEnumerable <double> expectedAngles = ConvertToAngles(expectedAnglesInDegrees);

            AngelInterpolationCalculator sut = CreateSut();

            sut.FromAngleInRadians = Angle.FromDegrees(fromAngleInDegrees).Radians;
            sut.ToAngleInRadians   = Angle.FromDegrees(toAngleInDegrees).Radians;
            sut.Steps             = steps;
            sut.TurnDirection     = turnDirection;
            sut.MaxAngleInRadians = maxAngleInRadians;

            // Act
            sut.Calculate();

            // Assert
            AssertAngles(expectedAngles,
                         sut.AnglesInRadians);
        }
示例#2
0
        public void CalculateIntervall_ReturnsIntervallAngle_ForGivenParameters(
            double fromAngleInDegrees,
            double toAngleInDegrees,
            int steps,
            Constants.TurnDirection turnDirection,
            double expectedIntervallInDegrees)
        {
            Console.WriteLine(
                "fromAngleInDegrees: {0} toAngleInDegrees: {1} steps: {2} turnDirection: {3} expectedIntervallInDegrees: {4}",
                fromAngleInDegrees,
                toAngleInDegrees,
                steps,
                turnDirection,
                expectedIntervallInDegrees);

            // Arrange
            double fromAngle             = Angle.FromDegrees(fromAngleInDegrees).Radians;
            double toAngle               = Angle.FromDegrees(toAngleInDegrees).Radians;
            double expectedIntervall     = Angle.FromDegrees(expectedIntervallInDegrees).Radians;
            AngleIntervallCalculator sut = CreateSut();

            sut.FromAngleInRadians = fromAngle;
            sut.ToAngleInRadians   = toAngle;
            sut.TurnDirection      = turnDirection;
            sut.Steps = steps;

            // Act
            sut.Calculate();

            // Assert
            Assert.AreEqual(expectedIntervall,
                            sut.Intervall);
        }
        public void Calculate_ReturnsTheCorrectNumberOfAngles_ForGivenSteps(
            double fromAngleInDegrees,
            double toAngleInDegrees,
            int steps,
            Constants.TurnDirection turnDirection,
            double[] expectedAnglesInDegrees)
        {
            Console.WriteLine("fromAngleInDegrees: {0} toAngleInDegrees: {1} " +
                              "steps: {2} turnDirection: {3} expectedAnglesInDegrees: {4}",
                              fromAngleInDegrees,
                              toAngleInDegrees,
                              steps,
                              turnDirection,
                              expectedAnglesInDegrees);

            // Arrange
            IEnumerable <double> expectedAngles = ConvertToAngles(expectedAnglesInDegrees);

            AngelInterpolationCalculator sut = CreateSut();

            sut.FromAngleInRadians = Angle.FromDegrees(fromAngleInDegrees).Radians;
            sut.ToAngleInRadians   = Angle.FromDegrees(toAngleInDegrees).Radians;
            sut.Steps         = steps;
            sut.TurnDirection = turnDirection;

            // Act
            sut.Calculate();

            // Assert
            AssertAngles(expectedAngles,
                         sut.AnglesInRadians);
        }
示例#4
0
        public void TurnDirectionToPointTest()
        {
            Constants.TurnDirection actual = m_Line.TurnDirectionToPoint(new Point(20.0,
                                                                                   20.0));

            Assert.AreEqual(Constants.TurnDirection.Clockwise,
                            actual);
        }
        public void TurnDirectionToPoint_ReturnsUnknown_ForNoSegments()
        {
            // Arrange
            // Act
            Constants.TurnDirection actual = m_Sut.TurnDirectionToPoint(m_DoesNotMatter);

            // Assert
            Assert.AreEqual(Constants.TurnDirection.Unknown,
                            actual);
        }
        internal TurnCircleArcSegment(IArcSegment arcSegment,
                                      Constants.TurnDirection direction,
                                      Constants.CircleOrigin circleOrigin)
        {
            ArcSegment     = arcSegment;
            m_Direction    = direction;
            m_CircleOrigin = circleOrigin;

            AngleToXAxisAtEndPoint   = arcSegment.AngleToXAxisAtEndPoint;
            AngleToXAxisAtStartPoint = arcSegment.AngleToXAxisAtStartPoint;
        }
示例#7
0
 public TurnCircle([NotNull] ICircle circle,
                   Constants.CircleSide side,
                   Constants.CircleOrigin origin,
                   Constants.TurnDirection turnDirection)
 {
     m_Circle        = circle;
     m_Side          = side;
     m_Origin        = origin;
     m_TurnDirection = turnDirection;
     m_Radius        = new Distance(Circle.Radius);
 }
示例#8
0
        public Constants.TurnDirection TurnDirectionToPoint(Point point)
        {
            IPolylineSegment firstSegment = m_Segments.FirstOrDefault();

            if (firstSegment == null)
            {
                return(Constants.TurnDirection.Unknown);
            }

            Constants.TurnDirection turnDirection = firstSegment.TurnDirectionToPoint(point);

            return(turnDirection);
        }
示例#9
0
        private Angle CalculateTangentAngleToXAxisAtPoint([NotNull] Point centrePoint,
                                                          [NotNull] Point pointOnCircle,
                                                          Constants.TurnDirection turnDirection)
        {
            var line = new Line(centrePoint,
                                pointOnCircle);

            Angle angleToXAxis = turnDirection == Constants.TurnDirection.Clockwise
                                     ? line.AngleToXAxis - Angle.For90Degrees
                                     : line.AngleToXAxis + Angle.For90Degrees;

            return(angleToXAxis);
        }
        public TurnCircleArcSegment([NotNull] ICircle circle,
                                    Constants.TurnDirection direction,
                                    Constants.CircleOrigin circleOrigin,
                                    [NotNull] Point startPoint,
                                    [NotNull] Point endPoint)
        {
            ArcSegment = new ArcSegment(circle,
                                        startPoint,
                                        endPoint,
                                        direction);

            m_Direction    = direction;
            m_CircleOrigin = circleOrigin;

            AngleToXAxisAtEndPoint   = ArcSegment.AngleToXAxisAtEndPoint;
            AngleToXAxisAtStartPoint = ArcSegment.AngleToXAxisAtStartPoint;
        }
示例#11
0
        public void CalculateForZeroTest()
        {
            var startPoint = new Point(1,
                                       0);
            var endPoint = new Point(0,
                                     0);
            var line = new Line(startPoint,
                                endPoint);
            var point = new Point(-1,
                                  0);

            Constants.TurnDirection actual = m_Calculator.Calculate(line,
                                                                    point);

            Assert.AreEqual(Constants.TurnDirection.Unknown,
                            actual);
        }
示例#12
0
        public void CalculateForRightReturnsClockwiseTest()
        {
            var startPoint = new Point(1,
                                       0);
            var endPoint = new Point(0,
                                     0);
            var line = new Line(startPoint,
                                endPoint);
            var point = new Point(1,
                                  1);

            Constants.TurnDirection actual = m_Calculator.Calculate(line,
                                                                    point);

            Assert.AreEqual(Constants.TurnDirection.Clockwise,
                            actual);
        }
示例#13
0
        public ArcSegment([NotNull] ICircle circle,
                          [NotNull] Point startPoint,
                          [NotNull] Point endPoint,
                          Constants.TurnDirection arcTurnDirection = Constants.TurnDirection.Clockwise)

        {
            ValidateStartAndEndPoint(circle,
                                     startPoint,
                                     endPoint);

            m_Circle      = circle;
            StartPoint    = startPoint;
            EndPoint      = endPoint;
            TurnDirection = arcTurnDirection;
            ICircleCentrePointToPointCalculator calculator = new CircleCentrePointToPointCalculator(
                m_Circle.CentrePoint,
                StartPoint,
                EndPoint);

            AngleClockwise        = calculator.AngleRelativeToYAxisCounterClockwise;
            AngleCounterClockwise = calculator.AngleRelativeToYAxisClockwise;

            LengthClockwise = CalculateLength(AngleClockwise,
                                              m_Circle.Radius);
            LengthCounterClockwise = CalculateLength(AngleCounterClockwise,
                                                     m_Circle.Radius);

            Length = arcTurnDirection == Constants.TurnDirection.Clockwise
                         ? LengthClockwise
                         : LengthCounterClockwise;

            AngleToXAxisAtStartPoint = CalculateTangentAngleToXAxisAtPoint(circle.CentrePoint,
                                                                           startPoint,
                                                                           arcTurnDirection);
            AngleToXAxisAtEndPoint = CalculateTangentAngleToXAxisAtPoint(circle.CentrePoint,
                                                                         endPoint,
                                                                         arcTurnDirection);
        }
 public void Calculate()
 {
     Direction = Calculate(Line,
                           Point);
 }