public static Segment FromRectangle(Rectangle rect, Direction side) { Segment seg = new Segment(); switch (side) { case Direction.North: seg.X1 = rect.Left; seg.Y1 = rect.Top; seg.X2 = rect.Right; seg.Y2 = rect.Top; break; case Direction.East: seg.X1 = rect.Right; seg.Y1 = rect.Top; seg.X2 = rect.Right; seg.Y2 = rect.Bottom; break; case Direction.South: seg.X1 = rect.Right; seg.Y1 = rect.Bottom; seg.X2 = rect.Left; seg.Y2 = rect.Bottom; break; case Direction.West: seg.X1 = rect.Left; seg.Y1 = rect.Top; seg.X2 = rect.Left; seg.Y2 = rect.Bottom; break; } return seg; }
public static float DistanceToSegment(Vector2 point, Segment segment) { return shortestVectorToSegment(segment.Start, segment.End, point).Length(); }
public static bool SegmentsIntersect(Segment s1, Segment s2) { return SegmentsIntersect(s1.X1, s1.Y1, s1.X2, s1.Y2, s2.X1, s2.Y1, s1.X2, s2.Y2); }
public static float DistanceBetweenSegments(Segment s1, Segment s2) { if (SegmentsIntersect(s1, s2)) { return 0; } return Math.Min(DistanceToSegment(s1.Start, s2), Math.Min(DistanceToSegment(s1.End, s2), Math.Min(DistanceToSegment(s2.Start, s1), DistanceToSegment(s2.End, s1)))); }