Перейти к содержанию

Размещение прямоугольников в прямоугольнике


Antonshka

Рекомендуемые сообщения

Привет, никто не сталкивался с такой задачей?

Спойлер

spacer.png

 

Синие прямоугольники нужно разместить в красном. Как на картинке, в правом красном прямоугольнике.

Изначально, когда синие прямоугольники выстроены в прямую линию, их позиции и размеры известны.

Чувствую шестым чувством, что задача простая, но что-то на ум пока ничего не приходит.

 

Да, и перенос должен быть до того момента, когда в каждой линии останется по одному синему прямоугольнику.

Ссылка на комментарий
Поделиться на другие сайты

А в чем, собственно, проблема?
Условно назовем целевые координаты Xr и Yr, ширину Wr, высоту (хотя она не нужна по условию задачи) Hr.
Далее массив прямоугольников синих назовем Arr. Будем считать, что в массиве лежат экземпляры структуры
Rect { int w, h }
Тогда псевдокод (саму процедуру рисовки прямоугольника опускаю, чисто сам алгоритм) будет примерно следующий

Спойлер
struct Rect {
  int w,h;
}

Rect[] Arr;

void fullRedRect() {
    int arrIndex: int = 0;
    int Xr = 0;
    int Yr = 0;
    int plotCount = 0;
    while (arr_index < length(Arr) {
      if (Xr + Arr[arrIndex].w > Wr) {
          Yr += Arr[arrIndex].h;
          Xr = 0;
          plotCount = 0;
      }
      plotRect(Arr[arrIndex], Xr, Yr);
      Xr += Arr[arrIndex].w;
      arr_index++;
      plotCount++;
    }
}

void plotRect(r: Rect, xdest, ydest: int);

 



 

Кстати, если вдруг не читал, рекомендую к прочтению Бхарагва "Грокаем алгоритмы"

  • Спасибо 1
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Xipho сказал:

А в чем, собственно, проблема?

Сам в недоумении. По видимому все должно быть просто. Может устал. Неделю днями не слезал с проекта.

 

1 час назад, Xipho сказал:

Тогда псевдокод (саму процедуру рисовки прямоугольника опускаю, чисто сам алгоритм) будет примерно следующий

У тебя в примере не задействован plotCount?

Ты наверно понял уже что это за прямоугольники? Это меню главного окна. При сжимании главного окна программы, итемы(элементы) меню переносятся.

Я же делаю полностью самодельное меню, вот меня занесло то 🙆‍♂️.

Завтра попробую применить твой пример, спасибо. Книгу не читал такую. Скачал себе, по виду дельная. Тоже спасибо 🙂.

 

Это на каком языке? Синтаксис с двоеточиями не знакомый.

void plotRect(r: Rect, xdest, ydest: int);
Изменено пользователем Antonshka
Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, Antonshka сказал:

Это на каком языке? Синтаксис с двоеточиями не знакомый.

Это псевдокод )) Я сейчас в процессе изучения Rust и Golang, потому иногда, когда пишу "на коленке", получается именно псевдокод, а не код какого-то из языков ))

11 часов назад, Antonshka сказал:

У тебя в примере не задействован plotCount?

Да, он вроде как не нужен оказался. Но я писал тоже уставший, мог где-то ошибиться ) 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.