Пример #1
0
        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);
        }
Пример #2
0
        public CircularCloudLayouter(Point center)
        {
            var spiral = new Spiral(center);

            spiralPoint = spiral.GetPoints().GetEnumerator();
        }