private List <Point> ConstructMidpoints(Point end1, Point end2, int level) { List <Point> middlePoints = new List <Point>(); // Recursive Base Case if (level == NUM_MID_SEGMENT_POINTS) { return(middlePoints); } Point midpoint = PointFactory.GeneratePoint(end1.Midpoint(end2)); // // Recursively construct all points between // middlePoints.AddRange(ConstructMidpoints(end1, midpoint, level + 1)); middlePoints.Add(midpoint); // Add to the list of midpoints clauses (for instantiation during figure synthesis). midpoints.Add(new Midpoint(new InMiddle(midpoint, new Segment(end1, end2)))); middlePoints.AddRange(ConstructMidpoints(midpoint, end2, level + 1)); return(middlePoints); }