internal Angle RadiansBetweenPointsCounterClockwise([NotNull] Point centrePoint,
                                                            [NotNull] Point startPoint,
                                                            [NotNull] Point endPoint)
        {
            ICircleCentreToPointCalculator calculatorStart = new CircleCentreToPointCalculator(centrePoint,
                                                                                               startPoint);
            ICircleCentreToPointCalculator calculatorEnd = new CircleCentreToPointCalculator(centrePoint,
                                                                                             endPoint);

            Angle angleStart = calculatorStart.AngleRelativeToYAxisCounterclockwise;
            Angle angleEnd   = calculatorEnd.AngleRelativeToYAxisCounterclockwise;

            Angle angle = angleEnd - angleStart;

            return(angle);
        }
        private bool CalculateIfPointIsOnArcSegment([NotNull] IArcSegment segment,
                                                    [NotNull] Point point)
        {
            if (segment.StartPoint.Equals(point) ||
                segment.EndPoint.Equals(point))
            {
                return(true);
            }

            if (IsDistanceToPointGreaterThanRadius(segment,
                                                   point))
            {
                return(false);
            }

            ICircleCentreToPointCalculator calculatorStart = new CircleCentreToPointCalculator(segment.CentrePoint,
                                                                                               segment.StartPoint);
            ICircleCentreToPointCalculator calculatorEnd = new CircleCentreToPointCalculator(segment.CentrePoint,
                                                                                             segment.EndPoint);
            ICircleCentreToPointCalculator calculatorPoint = new CircleCentreToPointCalculator(segment.CentrePoint,
                                                                                               point);

            Angle angleStart = calculatorStart.AngleRelativeToYAxisCounterclockwise;
            Angle angleEnd   = calculatorEnd.AngleRelativeToYAxisCounterclockwise;
            Angle anglePoint = calculatorPoint.AngleRelativeToYAxisCounterclockwise;

            if (!(angleStart.Degrees >= 0.0))
            {
                return(false);
            }
            if (!(angleEnd.Degrees >= 0.0))
            {
                return(false);
            }
            return((anglePoint >= angleStart) &&
                   (anglePoint <= angleEnd));
        }