public List <Edge> FindIntersection(IEnumerable <Edge> edges) { intersected = null; var sweepLine = new SweepLine <IntersectionSweepEvent, IntersectionStatusItem>(); List <LineSegment> segments = CreateSegments(edges); IEnumerable <E> events = CreateEvents(segments) as IEnumerable <E>; sweepLine.InitializeEvents(events); sweepLine.VerticalSweep(HandleEvent); return(intersected); }