Example #1
0
        public Placing(Rect[] rects, Region region)
        {
            // TODO: Проверка области размещения (должна быть хотя бы одна не фиксированная граница).
            this.region = region;

            this.rects = new Rect[rects.Length + 1];
            // Добавление вспомогательного объекта (начало центра координат).
            this.rects[0] = new Rect();
            for (int i = 0; i < rects.Length; i++)
                this.rects[i + 1] = rects[i];
            // TODO: Удалить все объекты, которые не помещаются в область размещения.
        }
Example #2
0
File: Region.cs Project: Ring-r/opt
 /// <summary>
 /// Проверка того, содержит ли данная область размещения параллелепипед.
 /// </summary>
 /// <param name="rect">Параллелепипед.</param>
 /// <param name="eps">Погрешность.</param>
 /// <returns>Возвращает true, если область размещения полностью содержит параллелепипед.</returns>
 public bool IsContaine(Rect rect, double eps = 0)
 {
     bool is_containe = true;
     for (int i = 0; i < Dim && is_containe; i++)
     {
         is_containe = (Min(i) <= rect.Min(i) + eps);
         if (freez[i])
             is_containe = is_containe && (rect.Max(i) <= Max(i) + eps);
     }
     return is_containe;
 }
Example #3
0
File: Rect.cs Project: Ring-r/opt
 /// <summary>
 /// Получение объекта со строки.
 /// </summary>
 /// <param name="s">Строка.</param>
 /// <returns>Параллелепипед.</returns>
 public static Rect Parse(string s)
 {
     Rect res = new Rect();
     string[] ss = s.Split(' ');
     if (ss.Length == Dim)
         for (int i = 0; i < Dim; i++)
             res.size[i] = int.Parse(ss[i]);
     else
         for (int i = 0; i < Dim; i++)
         {
             res.coor[i] = int.Parse(ss[2 * i]);
             res.size[i] = int.Parse(ss[2 * i + 1]);
         }
     return res;
 }
Example #4
0
File: Rect.cs Project: Ring-r/opt
 /// <summary>
 /// Проверка на пересечение с параллелепипедом.
 /// </summary>
 /// <param name="rect">Параллелепипед.</param>
 /// <param name="eps">Погрешность.</param>
 /// <returns>Возвращает true, если произошло пересечение с параллелепипедом.</returns>
 public bool IsCollideWith(Rect rect, double eps = 0)
 {
     bool is_collide = true;
     for (int i = 0; i < Dim && is_collide; i++)
         is_collide = (Min(i) < rect.Max(i) - eps) && (rect.Min(i) < Max(i) - eps);
     return is_collide;
 }