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; }