public static IList <Point> GetIntersects(ICircle circle, ISegment line)
        {
            IList <Point> list = new List <Point>();

            IPoint startPoint = line.GetKeyPoint(KeyPointType.Start);
            IPoint endPoint   = line.GetKeyPoint(KeyPointType.End);


            IList <Point> RayIntersections = circle.Intersection(
                new Ray2D(new Point(startPoint.X, startPoint.Y), new Point(endPoint.X, endPoint.Y))
                );


            foreach (Point p in RayIntersections)
            {
                if (p.X < Math.Max(startPoint.X, endPoint.X) &&
                    p.X > Math.Min(startPoint.X, endPoint.X) &&
                    p.Y < Math.Max(startPoint.Y, endPoint.Y) &&
                    p.Y > Math.Min(startPoint.Y, endPoint.Y))
                {
                    list.Add(p);
                }
            }

            return(list);
        }
        public static IList<Point> GetIntersects(ICircle circle, ISegment line)
        {
            IList<Point> list = new List<Point>();

            IPoint startPoint = line.GetKeyPoint(KeyPointType.Start);
            IPoint endPoint = line.GetKeyPoint(KeyPointType.End);

            IList<Point> RayIntersections = circle.Intersection(
                new Ray2D(new Point(startPoint.X, startPoint.Y), new Point(endPoint.X, endPoint.Y))
            );

            foreach (Point p in RayIntersections)
            {
                if (p.X < Math.Max(startPoint.X, endPoint.X)
                    && p.X > Math.Min(startPoint.X, endPoint.X)
                    && p.Y < Math.Max(startPoint.Y, endPoint.Y)
                    && p.Y > Math.Min(startPoint.Y, endPoint.Y))
                {
                    list.Add(p);
                }
            }

            return list;
        }