Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.09.18;
Скачать: [xml.tar.bz2];

Вниз

Как определить соотношение ширина/высота?   Найти похожие ветки 

 
Justin   (2011-05-29 17:56) [0]

Помогите пожалуйста вот в чем. К примеру, имеется число 530992. Каким образом можно на основе этого построить прямоугольник с наиболее "наглядным" чтоли соотношением ширины/высоты? Т.е., к примеру, если ширина 862, а высота 616, то приумножении мы и получаем число 530992.
Т.е., конечно же, построить таким образом, чтобы высота получилась 16, а ширина 33187 - это будет не то. Хоть и прямоугольник, но...не знаю как правильно объяснить)) надеюсь, суть уловили.


 
MBo ©   (2011-05-29 18:12) [1]

Разложить на множители, разобрать их на две группы так, чтобы произведения были по возможности близки


 
Justin   (2011-05-29 18:42) [2]

Т.е. перебором, да? Я просто думал, может кто сталкивался с таким и есть что-то готовое, по какому-нибудь алгоритму.
А так, получается, каждый раз умножением перебирать и сравнивать?


 
Юрий Зотов ©   (2011-05-29 19:05) [3]

Проще так: "найти множитель, наиболее близкий к квадратному корню из заданного числа".


 
Inovet ©   (2011-05-29 19:45) [4]

> [3] Юрий Зотов ©   (29.05.11 19:05)
> "найти множитель, наиболее близкий к квадратному корню из заданного числа"

У автора наглядность какая-то требуется, может это соотношение близкое к золотому сечению, например.


 
Justin   (2011-05-29 19:50) [5]

>Проще так: "найти множитель, наиболее близкий к квадратному корню из заданного числа".

Да-да, я от этого и отталкиваюсь.
Можно было бы, конечно, вычислить корень и построить таким образом квадрат. Но тогда теряется небольшая часть. Вот и думаю, что нужно, к примеру, брать изначально за фикс длину (она будет равна извлеченному корню), а с высотой играться перебором.


 
Inovet ©   (2011-05-29 20:06) [6]

> [5] Justin   (29.05.11 19:50)
> а с высотой играться перебором.

Зачем перебором. Корень к целому и дели площадь на это. Ты в каком классе?


 
Justin   (2011-05-29 20:23) [7]

>Зачем перебором. Корень к целому и дели площадь на это.

Можно поподробнее для не особо "осведомленных"? :)

>Ты в каком классе?

9-ый закончил :)


 
Inovet ©   (2011-05-29 20:36) [8]

> [7] Justin   (29.05.11 20:23)
> Можно поподробнее

С корнем - это я не подумал. А MBo уже ответил, как надо правильно сделать.

> [1] MBo ©   (29.05.11 18:12)
> Разложить на множители, разобрать их на две группы так,
> чтобы произведения были по возможности близки

Взять ряд простых чисел
1, 3, 5, 7, 11, ...


 
oldman ©   (2011-05-30 10:29) [9]


> прямоугольник с наиболее "наглядным" чтоли соотношением
> ширины/высоты?


3:4?


 
Anatoly Podgoretsky ©   (2011-05-30 11:28) [10]

> oldman  (30.05.2011 10:29:09)  [9]

4:5
16:9
16:10


 
Dimka Maslov ©   (2011-05-30 16:31) [11]

Решаем систему уравнений
b * h = 530992
b / h = 1.618


 
oldman ©   (2011-05-31 12:18) [12]


> Dimka Maslov ©   (30.05.11 16:31) [11]


Получим дробные ответы


 
Юрий Зотов ©   (2011-05-31 15:39) [13]

> Justin   (29.05.11 19:50) [5]
> Вот и думаю, что нужно, к примеру, брать изначально за фикс длину (она
> будет равна извлеченному корню), а с высотой играться перебором.

В подобных простейших задачках думать не надо, гораздо проще и быстрее написать решение "в лоб":

procedure TForm1.Button1Click(Sender: TObject);
var
 Z, W, H, I: integer;
begin
 H := 0;
 W := 0;
 Z := StrToInt(Edit1.Text);
 for I := Trunc(Sqrt(Z)) downto 1 do
 begin
   H := I;
   W := Z div H;
   if W * H = Z then
     break
 end;
 ShowMessage(Format("W = %d, H = %d", [W, H]))
end;


 
Jeer ©   (2011-05-31 15:56) [14]

Насчет критерия "наглядности" - стандартные форматы листов по ГОСТ имеют отношение:

(H/W)^2 = 2
т.е. например
(420/297)^2 = 2


 
Anatoly Podgoretsky ©   (2011-05-31 15:59) [15]

> Jeer  (31.05.2011 15:56:14)  [14]

1.41 что ли?


 
RWolf ©   (2011-05-31 16:18) [16]


> Jeer ©   (31.05.11 15:56) [14]

у меня подозрение, что это сделано всего лишь для того, чтобы два листа Аn при сложении вместе давали Аn+1, а вовсе не по соображениям наглядности.


 
RWolf ©   (2011-05-31 16:18) [17]


> при сложении вместе давали Аn+1

n-1, конечно.


 
Anatoly Podgoretsky ©   (2011-05-31 16:25) [18]

> RWolf  (31.05.2011 16:18:16)  [16]

Так это следствие


 
Anatoly Podgoretsky ©   (2011-05-31 16:27) [19]

Соотношение (наглядность) при этом не изменяется


 
Dennis I. Komarov ©   (2011-05-31 16:30) [20]

W/H=2H/W, с [14] никак не связано...


 
Dennis I. Komarov ©   (2011-05-31 16:32) [21]

наврал, как раз оно и есть :)


 
Anatoly Podgoretsky ©   (2011-05-31 16:37) [22]


> W/H=2H/W, с [14] никак не связано...
> <Цитата>

Связана - это магия.

1+1:1.41= 2:1.41 / 1.41 = 1.41:1


 
Inovet ©   (2011-05-31 22:51) [23]

> [16] RWolf ©   (31.05.11 16:18)
> а вовсе не по соображениям наглядности.

Соображения несколько разные у всех
http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B1%D1%83%D0%BC%D0%B0%D0%B3%D0%B8


 
Justin   (2011-05-31 23:27) [24]

>Юрий Зотов

Да, вот именно что-то наподобие этого.
Как раз объясню на Вашем примере суть.
К примеру, необходимо построить картинку по числу 480.000
Наиболее оптимальным "наглядным" решением будет 800x600
По Вашему коду определяется как 750x640. Тоже вполне подходит.
Но вот если взять уже число 480.001, то по Вашему алгоритму предлагается 12973х37. Представляете себе такую картинку? :) Вот она как раз и "не наглядная" получается, т.е. "неправильное".

Я почему и интересуюсь у постояльцев форума, потому что как-то оно не совсем просто получается в реализации. Возможно, стоит как-то определять и вводить ограничения на длину, или еще как-то. Ума не приложу :(


 
Inovet ©   (2011-05-31 23:39) [25]

> [24] Justin   (31.05.11 23:27)
> Но вот если взять уже число 480.001, то по Вашему алгоритму
> предлагается 12973х37. Представляете себе такую картинку?
> :)

А с таким 524287 как будет?


 
MBo ©   (2011-05-31 23:42) [26]

> по Вашему алгоритму предлагается 12973х37
У этого числа только два таких простых множителя, другого разложения на множители нет.
Что делать в случае, если разложение неудачное, или вообще число простое - приблизительное решение искать?


 
MBo ©   (2011-05-31 23:45) [27]

>Inovet ©   (31.05.11 23:39) [25]
Рассвет встречаешь?
;)


 
Inovet ©   (2011-05-31 23:51) [28]

> [27] MBo ©   (31.05.11 23:45)
> Рассвет встречаешь?
> ;)

Уже алеет небо на востоке.


 
Justin   (2011-05-31 23:52) [29]


> MBo ©   (31.05.11 23:42) [26]
> > по Вашему алгоритму предлагается 12973х37
> У этого числа только два таких простых множителя, другого
> разложения на множители нет.
> Что делать в случае, если разложение неудачное, или вообще
> число простое - приблизительное решение искать?


Так отож :( Может, конечно, дописывать просто 1 любой пиксель в конец в таких случаях? Он все равно для глаза практически не заметен на общей картинке будет.


 
Inovet ©   (2011-05-31 23:57) [30]

> [29] Justin   (31.05.11 23:52)
> Может, конечно, дописывать просто 1 любой пиксель в конец
> в таких случаях?

Вот началось. Так может и в других дописывать? Где критерий заметности дописывания?


 
RWolf ©   (2011-06-01 00:40) [31]


> Inovet ©   (31.05.11 22:51) [23]

речь о том, что из этих форматов только ISO имеет одно соотношение сторон для всех стандартных размеров.


 
Германн ©   (2011-06-01 01:19) [32]


> MBo ©   (31.05.11 23:45) [27]
>
> >Inovet ©   (31.05.11 23:39) [25]
> Рассвет встречаешь?
> ;)
> <Цитата>
>
> Inovet ©   (31.05.11 23:51) [28]
>
> > [27] MBo ©   (31.05.11 23:45)
> > Рассвет встречаешь?
> > ;)
>
> Уже алеет небо на востоке.
>

Вот чего вам не спится? :)


 
Юрий Зотов ©   (2011-06-01 01:58) [33]


> Justin   (31.05.11 23:27) [24]
> Вот она как раз и "не наглядная" получается, т.е. "неправильное".

До тех пор, пока Вы сами не решите, что такое "правильное" и "неправильное" - до этих пор ни Вы, ни я, ни кто-либо другой объяснить эти понятия компьютеру не сможет. Не уподобляйтесь заказчику, который хочет, чтобы программист все написал, как надо - но при этом сам не знает, а как же ему надо.

> как-то оно не совсем просто получается в реализации.

В реализации как раз ничего сложного не будет. После того, как Вы точно определитесь, чего же Вы хотите.


 
Германн ©   (2011-06-01 02:09) [34]


> Не уподобляйтесь заказчику, который хочет, чтобы программист
> все написал, как надо - но при этом сам не знает, а как
> же ему надо.
>

+1


 
Юрий Зотов ©   (2011-06-01 03:15) [35]

А не задача ли это линейного программирования?

Abs(Z - W * H) = min
Abs(W - H) = min

Z - исходное число, W - ширина, H - высота.

Если так, то методы известны - вперед.


 
MBo ©   (2011-06-01 07:10) [36]

>Германн ©   (01.06.11 01:19) [32]
>Вот чего вам не спится? :)

Кто бы говорил ;))


 
Anatoly Podgoretsky ©   (2011-06-01 07:47) [37]

> Inovet  (31.05.2011 23:39:25)  [25]

Это неправильное число?
Я до сих пор не понял насчет дробных чисел, допустимы или нет, если нет, то
задача имеет одно решение Nx1


 
OW ©   (2011-06-01 09:11) [38]

имхо,
1. надо задать константой массив кошерных размеров прямоугольнико
(320х240, 640х480, и т.п.)
2. Площадь поделить на стороны этих прямоугольников, определить минимум расхождения частного с парой из массива для каждого прямоугольника. Это будет то, к чему стремиться. (Идеал)
3. Колебаниями вправо-влево в размерах Идеала(делитель), попробовать получить целочисленное деление, при неудаче колебать вправо/влево площадь (делимое)


 
Inovet ©   (2011-06-01 11:20) [39]

> [37] Anatoly Podgoretsky ©   (01.06.11 07:47)
> Это неправильное число?
> Я до сих пор не понял насчет дробных чисел, допустимы или нет, если нет, то задача имеет одно решение Nx1

Это простое число.

Автору надо в целых решить, и он только сейчас понял что "наиболее наглядым" - это непонятно как и для него самого, а говорили об этом ещё в самом начале ветки. Вот и начал дополнительные пиксели выдумывать - суть округление.


 
Inovet ©   (2011-06-01 11:25) [40]

> [38] OW ©   (01.06.11 09:11)

Так это у ЮЗ и сделано, только для квадрата. А выше разные "наиболее наглядные" соотношения предлагались, не понятно что автор под этим подразумевает. ЮЗ предположил 1, я вот о золотом сечение спросил, Jeer о формате А sqrt(2) и т.п..



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.09.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.003 c
15-1298385410
Hint
2011-02-22 17:36
2011.09.18
FWSysTrayInfo от Rouse


15-1306314143
KSergey
2011-05-25 13:02
2011.09.18
Про гугль-почту


15-1306699762
LDV
2011-05-30 00:09
2011.09.18
распознавание текста


8-1187098476
leonidus
2007-08-14 17:34
2011.09.18
Где найти компонент отображающий Thumbnail ?


2-1307097736
unknown2
2011-06-03 14:42
2011.09.18
бинаризация изображения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский