Изменение размеров N # квадратов, чтобы быть максимально большим при тихом вписывании в поле X размерами Y. (Миниатюры!)

Это действительно зависит от того, какая разница между средами, которые заставляют вас использовать разные файлы web.config. Можете ли вы дать больше информации о том, почему каждая среда в настоящее время нуждается в отдельной среде?

5
задан Jake 15 October 2009 в 23:23
поделиться

4 ответа

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

w: ширина прямоугольника

h: высота прямоугольника

n: количество изображений

a = w * h: площадь прямоугольника.

ia = a / n максимальная площадь изображения в идеальном случае.

il = sqrt (ia) max длина изображения в идеальном случае.

nw = round_up (w / il): количество изображений, которые нужно наложить друг на друга.

nh = round_up (h / il): количество изображений, которые вы необходимо складывать рядом друг с другом.

l = min (w / nw, w / nh): длина используемых изображений.

6
ответ дан 14 December 2019 в 13:41
поделиться

вы хотите что-то вроде

n = количество уменьшенных изображений x = одна сторона прямоугольника y = другая сторона l = длина стороны миниатюры

l = sqrt ((x * y) / n)

0
ответ дан 14 December 2019 в 13:41
поделиться

Вот мой последний код, основанный на ответе unknown (google): Для парня, который хотел узнать, на каком языке написан мой первый пост, это VisualDataflex:

Function ResizeThumbnails Integer iItems Integer iWidth Integer iHeight Returns Integer
    Integer iArea iIdealArea iIdealSize iRows iCols iSize  
    // If there are no items we don't care how big the thumbnails are!
    If (iItems = 0) Procedure_Return
    // Area of the container.
    Move (iWidth * iHeight) to iArea
    // Max area of an image in the ideal case (1 image).
    Move (iArea / iItems) to iIdealArea
    // Max size of an image in the ideal case.
    Move (sqrt(iIdealArea)) to iIdealSize
    // Number of rows.
    Move (round((iHeight / iIdealSize) + 0.50)) to iRows
    // Number of cols.
    Move (round((iWidth / iIdealSize) + 0.50)) to iCols
    // Optimal size of an image.
    Move ((iWidth / iCols) min (iHeight / iRows)) to iSize
    // Check to make sure it is at least the minimum.
    Move (iSize max iMinSize) to iSize
    // Return the size
    Function_Return iSize
End_Function
0
ответ дан 14 December 2019 в 13:41
поделиться

Это должно работать. Он решается с помощью алгоритма, а не уравнения. Алгоритм выглядит следующим образом:

  • Растяните всю короткую сторону прямоугольников всеми квадратами.
  • Уменьшите количество квадратов в этом диапазоне (в результате, увеличивая размер), пока глубина квадратов не превысит длинная сторона прямоугольника
  • Остановитесь, когда диапазон достигнет 1, потому что это настолько хорошо, насколько мы можем получить.

Вот код, написано на JavaScript:

function thumbnailSize(items, width, height, min) {

  var minSide = Math.min(width, height),
      maxSide = Math.max(width, height);

  // lets start by spanning the short side of the rectange
  // size: the size of the squares
  // span: the number of squares spanning the short side of the rectangle
  // stack: the number of rows of squares filling the rectangle
  // depth: the total depth of stack of squares
  var size = 0;
  for (var span = items, span > 0, span--) {
    var newSize = minSide / span;
    var stack = Math.ceil(items / span);
    var depth = stack * newSize; 
    if (depth < maxSide)
      size = newSize;
    else 
      break;
  }
  return Math.max(size, min);
}
0
ответ дан 14 December 2019 в 13:41
поделиться
Другие вопросы по тегам:

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