Ustus Спасибо за поправку. Хотелось написать "если размер строки растра не кратен 4, то она дополняется от 1 до 3 пустыми (нулевыми) байтами, чтобы длина строки оказалась кратна 4 байтам; при этом пиксель, в зависимости от содержимого поля biBitCount, может занимать 1, 4, 8, 16, 24, 32 бита, то есть выравнивание имеет смысл если biBitCount не равно 32" +++++000 +++++000 +++++000 Рисунок подразумевал biBitCount=8
Mikl___ 24-х битная битмапа, в памяти выравнивание массива не имеет значения. KeSqueer Пожалусто подробнее, RoundUp() - это округление к ближайшему наибольшему целому числу ? Или нахождение остатка.. Тогда наверно по модулю число взять нужно, sqrt(sq1-x) ведь в степень 0.5 можно возвести только положительное число.
Clerk да Хорошее предложение, в трех строчках нашел еще одну ошибку правильно так (обозначения другие для пояснений ниже): Код (Text): y = RoundUp(sqrt(z)); x = RounDown(sqrt(y^2-z)); w = y+x, h = y-x; как видно, во второй строке корень теперь берется из неотрицательного числа. Смысл такой: Пусть всего точек z. В первой строке вычисляем сторону y минимального квадрата, который вмещает в себя z точек. Если у квадрата две противоположных стороны увеличить на x, а две другие уменьшить на х, получим прямоугольник с площадью s = (y+x)*(y-x) = y^2-x^2. Чем больше анизотропность такого прямоугольника, тем меньше его площадь. Для того чтобы определить до каких пор можно увеличивать x, нужно решить неравенство s >= z. Отсюда х <= sqrt(y^2-z). Из-за того, что z, y и x - целые, вводится округление. Вроде все.
KeSqueer Вариант, конечно, но далеко не всегда даёт удачные результаты. Например, на числе 486 даст результат 29х17 (7 лишних), хотя 27х18 (нацело) явно лучше. Причём такие проколы будут наблюдаться на многих числах, которые значительно ближе к наибольшему меньшему полному квадрату, чем к наименьшему большему.
l_inc В общем, верно, это также запечатлено в примерах. Но он и описывался как с приоритетом к квадратной форме. Можно попробовать к y еще 1 прибавить или 2 и посмотреть варианты какие получаются, но, в общем, хз.
KeSqueer Эм... Так 27х18 ближе к квадратной форме, чем 29х17. Т.е. не выдержано ни условие максимальной близости к квадрату, ни условие минимизации числа лишних пикселей. Хотя в большинстве случаев, конечно, даёт неплохие результаты.