Я недавно начал кодировать, используя 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);
}