Exemple #1
0
        public static float DistanceFromRect(Rect rect, Vector pos)
        {
            if (rect.Contains(pos))
            {
                return 0;
            }
            var nw = rect.GetCorner(CompassPoint.NorthWest);
            var ne = rect.GetCorner(CompassPoint.NorthEast);
            var sw = rect.GetCorner(CompassPoint.SouthWest);
            var se = rect.GetCorner(CompassPoint.SouthEast);

            var distanceFromTop = DistanceFromLineSegment(new LineSegment(nw, ne), pos);
            var distanceFromRight = DistanceFromLineSegment(new LineSegment(ne, se), pos);
            var distanceFromBottom = DistanceFromLineSegment(new LineSegment(se, sw), pos);
            var distanceFromLeft = DistanceFromLineSegment(new LineSegment(sw, nw), pos);

            return Math.Min(distanceFromTop, Math.Min(distanceFromLeft, Math.Min(distanceFromBottom, distanceFromRight)));
        }
Exemple #2
0
 public bool IntersectsWith(Rect rect)
 {
     if (rect.Contains(Start) || rect.Contains(End))
     {
         return true;
     }
     var a = new LineSegment(new Vector(rect.Left, rect.Top), new Vector(rect.Right, rect.Top));
     var b = new LineSegment(new Vector(rect.Right, rect.Top), new Vector(rect.Right, rect.Bottom));
     var c = new LineSegment(new Vector(rect.Right, rect.Bottom), new Vector(rect.Left, rect.Bottom));
     var d = new LineSegment(new Vector(rect.Left, rect.Bottom), new Vector(rect.Left, rect.Top));
     List<LineSegmentIntersect> intersects;
     if (Intersect(a, false, out intersects) || Intersect(b, false, out intersects) || Intersect(c, false, out intersects) || Intersect(d, false, out intersects))
     {
         return true;
     }
     return false;
 }