public static float MinimumDistance(Segment2D segment, Circle circle) { if (Segment2D.Intersects(segment, circle)) { return(0); } // okay this Max *should be* unnecessary, but lets keep it just for sure return(FlaiMath.Max(0, Segment2D.MinimumDistance(segment, circle.Position) - circle.Radius)); }
// yeah... umm, this isn't accurate. and its very slow/brute-force. but whatever, at least it somehow works public static float MinimumDistance(Segment2D segment, RectangleF rectangle) { if (Segment2D.Intersects(segment, rectangle)) { return(0); } return(FlaiMath.Min( Segment2D.MinimumDistance(segment, rectangle.TopLeft), Segment2D.MinimumDistance(segment, rectangle.TopRight), Segment2D.MinimumDistance(segment, rectangle.BottomLeft), Segment2D.MinimumDistance(segment, rectangle.BottomRight))); }
public static float MinimumDistance(Segment2D segment, Vector2f point) { Vector2f minimumDistancePoint; return(Segment2D.MinimumDistance(segment, point, out minimumDistancePoint)); }
public static bool Intersects(Segment2D segment, Circle circle) { return(Segment2D.MinimumDistance(segment, circle.Position) < circle.Radius); }