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)); }