예제 #1
0
파일: Algorithm.cs 프로젝트: Ring-r/opt
        } // Харин, Пудло

        private bool Step(Polygon2d polygon, StripRegion strip_region, List<Polygon2d> polygon_placed_list)
        {
            #region Шаг-1. Установка начального значения (бесконечность) точки размещения текущего Polygon.
            polygon.Pole = new Point2d();
            for (int j = 1; j <= polygon.Pole.Dim; j++)
                polygon.Pole[j] = double.PositiveInfinity;
            #endregion

            #region Шаг-2. Построение всех годофов функции плотного размещения.
            List<Polygon2d> polygon_godograph_list = new List<Polygon2d>(); // Установить Capacity.
            #region Шаг-2.1. Годораф функции плотного размещения по полосе.
            polygon_godograph_list.Add(Годораф_функции_плотного_размещения(polygon, strip_region));
            #endregion
            #region Шаг-2.2. Годорафы функции плотного размещения по многоугольникам.
            for (int i = 0; i < polygon_placed_list.Count; i++)
                polygon_godograph_list.Add(Годораф_функции_плотного_размещения(polygon, polygon_placed_list[i]));
            #endregion
            #endregion

            #region Шаг-3. Создание списка возможных точек размещения.
            poles = new List<Point2d>();
            #endregion

            #region Шаг-4. Добавляем точки пересечения сторон полосы.
            // Вершины polygon_godograph_list[0];
            #endregion

            #region Шаг-5. Для каждой пары годорафов функции плотного размещения находим их точки пересечения.
            for (int i = 0; i < polygon_godograph_list.Count - 1; i++)
                for (int j = i + 1; j < polygon_godograph_list.Count; j++)
                    poles.AddRange(Точки_пересечения_многоугольников(polygon_godograph_list[i], polygon_godograph_list[j]));
            #endregion

            #region Шаг-6. Для каждой возможной точки размещения...
            bool is_placed = false;
            for (int i = 0; i < poles.Count; i++)
            {
                #region Шаг-6.1. Проверяем условие принадлежности области размещения.
                bool is_point_right = Точка_принадлежит_многоугольнику(poles[i], polygon_godograph_list[0]);
                #endregion
                #region Шаг-6.2. Проверяем условие непересечения с размещёнными объектами.
                for (int j = 1; j < polygon_godograph_list.Count && is_point_right; j++)
                    is_point_right = !Точка_принадлежит_многоугольнику(poles[i], polygon_godograph_list[j]);
                #endregion

                #region Шаг-6.3. Если выполняются все условия размещения, то...
                if (is_point_right)
                {
                    #region Устанавливаем объект в точку размещения (из двух точек размещения выбираеться более оптимальная). // Подойдёт ли такой вариант?
                    polygon.Pole.Copy = strip_region.OptPole(polygon.Pole, poles[i]);
                    #endregion

                    is_placed = true;
                }
                #endregion
            }
            #endregion

            return is_placed;
        }
예제 #2
0
파일: Algorithm.cs 프로젝트: Ring-r/opt
        private void Steps(List<Polygon2d> polygon_list, StripRegion region)
        {
            List<Polygon2d> polygon_placed_list = new List<Polygon2d>();

            #region Шаг-1. Для каждого размещаемого Polygon...
            for (int i = 0; i < polygon_list.Count; i++)
                if (Step(polygon_list[i], region, polygon_placed_list))
                    polygon_placed_list.Add(polygon_list[i]);
            #endregion
        }
예제 #3
0
파일: Algorithm.cs 프로젝트: Ring-r/opt
 private Polygon2d Годораф_функции_плотного_размещения(Polygon2d polygon, StripRegion region)
 {
     throw new NotImplementedException();
 } // Пролесковский.