public static Vector2[] GetIntersects(ISegment seg1, ISegment seg2) { try { ThrowIfInvalidShape(seg1); ThrowIfInvalidShape(seg2); } catch { throw; } if (Grad(seg1) == Grad(seg2)) { if (Yint(seg1) == Yint(seg2)) { throw new SameShapeException(); } else { return new Vector2[] { } }; } float intersect_x = (Yint(seg2) - Yint(seg1)) / (Grad(seg1) - Grad(seg2)); Vector2 intersect = new Vector2(intersect_x, intersect_x * Grad(seg1) + Yint(seg1)); var seg1_len = seg1.Point1.Distance(seg1.Point2); var seg2_len = seg2.Point1.Distance(seg2.Point2); if (intersect.Distance(seg1.Point1) < seg1_len && intersect.Distance(seg1.Point2) < seg1_len && intersect.Distance(seg2.Point1) < seg2_len && intersect.Distance(seg2.Point2) < seg2_len) { return(new Vector2[] { intersect }); } else { return new Vector2[] { } }; }
public static Vector2[] GetIntersects(ILine line, ISegment seg) { try { ThrowIfInvalidShape(line); ThrowIfInvalidShape(seg); } catch { throw; } if (Grad(line) == Grad(seg)) { if (Yint(line) == Yint(seg)) { throw new SameShapeException(); } else { return new Vector2[] { } }; } float intersect_x = (Yint(seg) - Yint(line)) / (Grad(line) - Grad(seg)); Vector2 intersect = new Vector2(intersect_x, intersect_x * Grad(line) + Yint(line)); var line_len = line.Point1.Distance(line.Point2); var seg_len = seg.Point1.Distance(seg.Point2); if (intersect.Distance(seg.Point1) < seg_len && intersect.Distance(seg.Point2) < seg_len) { return(new Vector2[] { intersect }); } else { return new Vector2[] { } }; }
public static FLOAT Distance(VECTOR a, VECTOR b) { return(VECTOR.Distance(a, b)); }
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static FLOAT Distance(VECTOR a, VECTOR b) { return(VECTOR.Distance(a, b)); }