public static Wall2D GetWallBetweenTwoSegments(DirectionLineSegment segment1, DirectionLineSegment segment2)
        {
            DirectionLine line1Test   = new DirectionLine(segment1.BeginPoint, new Vector2d((int)(segment1.EndPoint.X - segment1.BeginPoint.X), (int)(segment1.EndPoint.Y - segment1.BeginPoint.Y)));
            DirectionLine line2Test   = new DirectionLine(segment2.BeginPoint, new Vector2d((int)(segment2.EndPoint.X - segment2.BeginPoint.X), (int)(segment2.EndPoint.Y - segment2.BeginPoint.Y)));
            List <double> line1Alphas = new List <double>();

            line1Alphas.Add(line1Test.AlphaProjection(segment1.BeginPoint));
            line1Alphas.Add(line1Test.AlphaProjection(segment1.EndPoint));
            line1Alphas.Add(line1Test.AlphaProjection(segment2.BeginPoint));
            line1Alphas.Add(line1Test.AlphaProjection(segment2.EndPoint));

            if (line1Alphas[0] > line1Alphas[1])
            {
                double aux = line1Alphas[0];
                line1Alphas[0] = line1Alphas[1];
                line1Alphas[1] = aux;
            }
            if (line1Alphas[2] > line1Alphas[1] && line1Alphas[3] > line1Alphas[1] ||
                line1Alphas[2] < line1Alphas[0] && line1Alphas[3] < line1Alphas[0])
            {
                return(null);
            }

            line1Alphas.Sort();

            Vector2d p1 = line1Test.GetPointByPosition(line1Alphas[0]);
            Vector2d p2 = line1Test.GetPointByPosition(line1Alphas[3]);
            Vector2d p3 = line2Test.GetPointProjection(p2);
            Vector2d p4 = line2Test.GetPointProjection(p1);

            return(new Wall2D(new Vector2d[] { p1, p2, p3, p4 }, DirectionLine.GetMiddle(line1Test, line2Test)));
        }
        public DirectionLineSegment(DirectionLine line, double startAlpha, double endAlpha)
        {
            this.Line       = line;
            this.startAlpha = startAlpha;
            this.endAlpha   = endAlpha;

            BeginPoint = line.GetPointByPosition(startAlpha);
            EndPoint   = line.GetPointByPosition(endAlpha);

            this.Size = (BeginPoint - EndPoint).Magnitude;
        }