Разделение пространства на заданное количество ячеек в зависимости от его размера - PullRequest
0 голосов
/ 07 апреля 2020

Я недавно начал кодировать, используя P5. js и редактор браузера, который они предоставляют. Вы можете найти код, о котором я говорю ниже, в https://editor.p5js.org/Y_P/sketches/Xo2exzHSX

1- Я ищу алгоритм оптимального разбиения заданного экранного пространства на строки и столбцы, так что Соотношение. Входными данными будут ширина / высота пространства и минимальное количество ячеек, которое вы хотите. Он вернет строку и столбец, которые будут оптимальными для этих ячеек. Кажется, моя первая итерация работает, но соотношение сторон слишком сильно смещено. Мне любопытны другие варианты, которые могут существовать и быть более эффективными.

2- Я также хотел бы создать функцию для ограничения отношения в определенном диапазоне и не могу обернуть его вокруг.

Достаточно ли хорош кто-то в математике или кто-нибудь знает функцию HTML / JS, которую я мог бы использовать? :)

РЕДАКТИРОВАТЬ: Я поместил код прямо там, потому что в случае, если вы не хотите переходить по ссылке выше:

function setup() {

  spaceW = 1600;
  spaceH = 500;
  unit = 30;

  //constrainRatio(700, 200, 0.5, 1.5);

  createCanvas(spaceW, spaceH);
  background(51);

  let division = divideSpace(spaceW, spaceH, unit);
  for (let i = 0; i < division.x; i++) {
    for (let j = 0; j < division.y; j++) {
      rect(spaceW * i / division.x, spaceH * j / division.y, spaceW / division.x, spaceH / division.y);
    }
  }
}

function divideSpace(w, h, unit) {
  base = ceil(sqrt(unit));

  if (round(w / h) != 1) {
    if (h < w) {
      ratio = h / w;
      column = ceil(ratio * base);
      row = ceil(unit / column);
    } else if (h > w) {
      ratio = w / h;
      row = ceil(ratio * base);
      column = ceil(unit / row);
    }
  } else {
    row = base;
    column = base;
  }
  return createVector(row, column);
}
...