Создайте оптимальную сетку, основанную на n-элементах, общей площади и соотношении H: W

[Д2] tldr; оба заголовка HTTP / 1.1 и HTTP / 2 не зависят от регистра.

Согласно RFC 7230 (HTTP / 1.1):

Каждое поле заголовка состоит из имени поля, нечувствительного к регистру, за которым следует двоеточие («:»), необязательный ведущий пробел, значение поля и необязательные конечные пробелы.

blockquote>

https://tools.ietf.org/html/rfc7230#section-3.2

Кроме того, RFC 7540 (HTTP / 2):

Так же, как и в HTTP / 1.x, имена полей заголовка представляют собой строки символов ASCII, которые сравниваются нечувствительным к регистру образом.

blockquote>

https://tools.ietf.org/html/rfc7540#section-8.1.2

11
задан sevenflow 18 August 2010 в 14:37
поделиться

1 ответ

Мне немного неясны некоторые из ваших входных параметров, но я предполагаю, что у вас есть высота и ширина прямоугольника, количество прямоугольников и идеальное соотношение высоты и ширины (т.е. предпочтительная высота сетки / ширина сетки).

Если это так, то я бы, вероятно, начал с «нормализации» ваших размеров, поэтому для целей следующих вычислений мы говорим, что единица ширины такая же, как ширина прямоугольника, а также для единицы измерения высота. Если ваше соотношение высоты / ширины в реальных единицах измерения было k, тогда ваше соотношение высоты / ширины в единицах Rectange было бы k * RectWidth / RectHeight. Я назову это K.

Итак, теперь каждый прямоугольник по определению имеет площадь 1, поэтому наша общая площадь равна N, где N - количество элементов. Затем мы можем аппроксимировать нашу высоту и добавить ширину, чтобы получить желаемое соотношение сторон сетки, сказав gridHeight * gridWidth = N и gridHeight / gridWidth = K

. С ними мы получаем gridHeight = sqrt (KN) и gridWidth = sqrt (N / K ).

Если вы округлите одно из них до подходящего целого числа (я не уверен, что ближайшее из них, округление целого числа даст вам наилучший результат или любое округление, которое даст наименьшее процентное изменение этого значения, будет наилучшим - вы всегда можете попробовать все четыре, если вам это так не безразлично). Как только у вас есть одно целое значение, вы затем вычисляете другое, находя наименьшее целое число, которое может умножить другое и по-прежнему быть больше N, чтобы убедиться, что вы умещаете все прямоугольники в сетке).

Затем вы, конечно, можете изменить целые числа обратно на реальные, умножив высоту на rectHeight и ширину на RectWidth.

Надеюсь, все это имеет смысл.:)

Правка для рабочего примера:

Требуемое окончательное соотношение сторон сетки = 1024/768 (k) (предполагается, что 768 - это ширина, а 1024 - высота - я все время хотел поставить это наоборот как стандартный экран разрешение :))

«Нормализованное» соотношение сторон = (1024/768) * (300/109) = 3,667 (K)

Высота сетки, следовательно, sqrt (KN) = sqrt (366,97) = 19,16

Ширина сетки равна sqrt (N / K) = 5.22

Глядя на это, мы интуитивно понимаем, что ширина 5 и высота 20 будут нашим лучшим совпадением. Другими вариантами могут быть 6 и 19. Но это потратит больше места (я думаю, что, возможно, минимизация произведения ширины и высоты здесь migth будет лучшим расчетом, но я не уверен).

Теперь это размер нашей сетки в ячейках. Затем это масштабируется до размеров пикселей 1500 на 2180. Масштабирование до размера 768x1024 означает деление обоих на 2,129 (большее из 1500/768 и 2180/1024). Таким образом, ваши изображения будут уменьшены в 2,129 раза до 141x51 (ish), а общая используемая площадь фактически составит 705x1020, что должно дать минимальное пространство.

Надеюсь, теперь это имеет больше смысла. Признаюсь, я несколько раз ошибался, вводя реальные значения, поэтому я полностью понимаю, почему вам нужен рабочий пример. ; -)

15
ответ дан 3 December 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: