public Rectangle PutNextRectangle(Size rectangleSize) { /// Идея алгоритма: /// изначально в каждой точке спирали spiral.GetSpiralPoints /// буду пытаться разместить прямоугольник /// если он в какой-то точке не пересекает остальные из rectangles /// то заканчиваю перебор точек и понемногу двигаю прямоугольник по вектору center - rectangle.Location /// если во время перемещения прямоугольника он начинает пересекать остальные, /// то заканчиваю перемещение и возвращаю полученный прямоугольник var rectangle = new Rectangle(); rectangle.Size = rectangleSize; foreach (var point in spiral.GetPoints()) { rectangle.Location = point; if (!rectangle.IntersectsWith(rectangles)) { break; } } var movedRectangle = MoveToCenter(rectangle); rectangles.Add(movedRectangle); return(movedRectangle); }
public CircularCloudLayouter(Point center) { var spiral = new Spiral(center); spiralPoint = spiral.GetPoints().GetEnumerator(); }