/// <summary> /// Connects two <see cref="QuadEdge"/> instances to the left of each other /// </summary> /// <param name="a">First instance to connect</param> /// <param name="b">Second instance to connect</param> /// <returns></returns> public static QuadEdge ConnectLeft(QuadEdge a, QuadEdge b) { QuadEdge result = MakeEdge(a.Destination, b.Origin); Splice(result, a.LeftNext); Splice(result.Inverse, b); return(result); }
/// <summary> /// Connects two <see cref="QuadEdge"/> instances to the right of each other /// </summary> /// <param name="a">First instance to connect</param> /// <param name="b">Second instance to connect</param> /// <returns></returns> public static QuadEdge ConnectRight(QuadEdge a, QuadEdge b) { QuadEdge result = MakeEdge(a.Destination, b.Origin); Splice(result, a.Inverse); Splice(result.Inverse, b.OriginPrevious); return(result); }
/// <summary> /// Splices two edges together /// </summary> /// <param name="a">First instance to splice</param> /// <param name="b">Second instance to splice</param> public static void Splice(QuadEdge a, QuadEdge b) { QuadEdge alpha = a.OriginNext.DualEdge; QuadEdge beta = b.OriginNext.DualEdge; QuadEdge temp = a.OriginNext; QuadEdge temp2 = beta.OriginNext; QuadEdge temp3 = alpha.OriginNext; a.OriginNext = b.OriginNext; b.OriginNext = temp; alpha.OriginNext = temp2; beta.OriginNext = temp3; }
/// <summary> /// Creates a QuadEdge instance from <paramref name="origin"/> to <paramref name="destination"/> /// </summary> /// <param name="origin"><see cref="Origin"/> of the <see cref="QuadEdge"/> to create</param> /// <param name="destination"><see cref="Destination"/> of the <see cref="QuadEdge"/> to create</param> /// <returns></returns> public static QuadEdge MakeEdge(Point origin, Point destination) { //Create all quad edges var q0 = new QuadEdge(origin); var q1 = new QuadEdge(null); var q2 = new QuadEdge(destination); var q3 = new QuadEdge(null); //Define links between edges q0.OriginNext = q0; q1.OriginNext = q3; q2.OriginNext = q2; q3.OriginNext = q1; q0.DualEdge = q1; q1.DualEdge = q2; q2.DualEdge = q3; q3.DualEdge = q0; return(q0); }