public static List <LineSeg> Cut(LineSeg l1, LineSeg l2, Vector2 i) { List <LineSeg> line = new List <LineSeg>(); l1.Cut(i, out LineSeg i1, out LineSeg i2); line.Add(i1); line.Add(i2); l2.Cut(i, out i1, out i2); line.Add(i1); line.Add(i2); return(line); }
public static bool IsIntersect(LineSeg l1, LineSeg l2, out Vector2 i) { //if (l1.IsConnectedWith(l2)) //{ // i = new Vector2(); // return false; //} Vector2 s1 = l1.P2 - l1.P1; Vector2 s2 = l2.P2 - l2.P1; float s = (-s1.Y * (l1.P1.X - l2.P1.X) + s1.X * (l1.P1.Y - l2.P1.Y)) / (-s2.X * s1.Y + s1.X * s2.Y); float t = (s2.X * (l1.P1.Y - l2.P1.Y) - s2.Y * (l1.P1.X - l2.P1.X)) / (-s2.X * s1.Y + s1.X * s2.Y); if (s >= 0 && s <= 1 && t >= 0 && t <= 1) { i = new Vector2(l1.P1.X + t * s1.X, l1.P1.Y + t * s1.Y); return(i != l2.P1 && i != l2.P2); } i = new Vector2(); return(false); }
public void Cut(Vector2 point, out LineSeg l1, out LineSeg l2) { l1 = new LineSeg(P1, point, Normal, Material); l2 = new LineSeg(P2, point, Normal, Material); }