/// <summary> /// Find nearest intersect from segment of default Point. /// </summary> /// <param name="leadSegment">This segment do you want to cross</param> /// <param name="possibleSegments">Those segments can cross leadSegment</param> /// <returns>Nearest intersect or default(Point)</returns> public static Point GetNearestIntersect(Segment leadSegment, Segment[] possibleSegments) { double minDistance = double.MaxValue; Point nearestIntersect = default(Point); foreach (var segment in possibleSegments) { if (EuclideanSpaceUtils.FindIntersection(leadSegment, segment, out double x, out double y)) { Point intersect = new Point(x, y); double distance = EuclideanSpaceUtils.Distance(leadSegment.From, intersect); if (distance < minDistance) { minDistance = distance; nearestIntersect = intersect; } } } return(nearestIntersect); }
/// <summary> /// Find intersect of two segments. /// </summary> /// <param name="segment1">First segment.</param> /// <param name="segment2">Second segment.</param> /// <returns>True if this segments intersect each other.</returns> public static bool FindIntersection(Segment segment1, Segment segment2, out double x, out double y) { return(EuclideanSpaceUtils.FindIntersection(segment1, segment2, out x, out y)); }