Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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;
        }
Exemplo n.º 4
0
        /// <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);
        }