예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <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));
 }