private Rectangle2D Rebuild(List <Rectangle2D> targets)
        {
            Rectangle2D   rec1     = targets[0];
            Rectangle2D   rec2     = targets[1];
            List <Line2D> recEdges = new List <Line2D> {
                rec1.Bottom, rec1.Top, rec1.Left, rec1.Right, rec2.Bottom, rec2.Top, rec2.Left, rec2.Right
            };
            List <Line2D>      leftLines   = new List <Line2D>();
            List <Rectangle2D> newRec      = new List <Rectangle2D>(targets);
            List <Line2D>      sortedLines = new List <Line2D>(recEdges);

            foreach (var edge in recEdges)
            {
                if (IsRectangleEdge(edge, rec1) && IsRectangleEdge(edge, rec2))
                {
                    sortedLines.Remove(edge);
                }
            }
            GraphicAlgorithm.MergeLine(sortedLines);
            GraphicAlgorithm.HuntCurveByStartPoint(sortedLines, sortedLines.First().Start, leftLines);
            return(new Rectangle2D(leftLines));
        }