PDA

Просмотр полной версии : Здесь есть гении по геометрии?


VitalyL
29.05.2007, 00:16
задача такая:

дана длинна и ширина прямоугольника X, Y , так же данно количество N маленьких прямоугольничков, которые нужно вписать в большой прямоугольник. Вопрос в том как вычеслить длинну и ширину маленького прямоугольника (Xsm, Ysm).

Пример: X = 200; Y = 100; N = 50
ответ: Xsm = 20; Ysm = 20

нуждаюсь в формуле по которой это можно высчитать.

Kikasso
29.05.2007, 00:37
Делить не пробовали?

DarkLight
29.05.2007, 04:07
В приведенном примере этот ответ - не единственный(например 40,10 тоже подходит). Нужно искать один ответ? или все целые ответы?

kruasan
29.05.2007, 12:12
..., так же данно количество N маленьких прямоугольничков, которые нужно вписать в большой прямоугольник.
Xsm = X/N; Ysm = Y :)
Может вы все-таки квадраты хотите вписать? Или может прямоугольники с некими требованиями к пропорциям?

VitalyL
29.05.2007, 21:38
да, желательно квадраты, и еще одно смягчение условья - число N можно округлить до нужного(удобного),но только в большую сторону.
допустим если число N = 29, то его можно округлить N = 30, но желательно не сильно много прибовлять к начальному значению.

etc
29.05.2007, 23:41
VitalyL, а знаний, полученных в школе, совсем нет? Или хотя бы попытки сделать? В данном случае «сделайте все за меня».

VitalyL
30.05.2007, 07:03
Школу я закончил 15 лет назад, всего уже не помню. Мне казалсь здесь это быстро подсчитают. Увы гениев не нашлось :(

iNils
30.05.2007, 10:40
Гении часто скромные. А ваши условия все равно не полные. Допустим у вас размеры 191 (простое число) на 1. А задано N=10. Возникает вопрос, размеры должны быть целыми или могут быть дробными. Так в ситуации выше, при целых размерах, N округлится до 191. Если дробные... То учитывая, что высота 1, а стремиться надо к квадрату, то N также будет весьма большим.

kruasan
30.05.2007, 12:27
2 VitalyL
Вы хотите "Разбить на прямоугольники" или "вписать прямоугольники" ?

VitalyL
30.05.2007, 16:12
iNils:
число N можно округлить до нужного(удобного),но только в большую сторону.
допустим если число N = 29, то его можно округлить N = 30

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

FourSide
30.05.2007, 19:00
Вписанные прямоугольники (они же, как оказалось, квадраты) могут пересекаться? Если да, то решений слишком много :)

Вообще, мне кажется, что тут достаточно будет лёгкого изучения арифметики, и вам не нужны "гении геометрии".

iNils
30.05.2007, 22:47
Лично я не начинаю писать ни какого алгоритма (кода), пока не выясню все спорные моменты. А их в данной задаче довольно много. И один из них я вам показал. Что должно быть в таком случаи?

vitlance
31.05.2007, 09:00
1. Ищите площадь большого прямоугольника.
2. Делите ету площадь на ваше N
3. Таким образом мы нашли площадь маленького квадратика, теперь ищем его сторону находя корень..
4. Вуаля вот и ваша Xsm и Ysm

вот так выглядит код:

Xsm = Math.sqrt((X*Y)/N);
Ysm = Xsm;

lexmoz
31.05.2007, 10:36
Берём квадратик 20х20, располагаем 10шт в длину и 5шт по высоте, получаем что требовалось. И васче любые такие штуки в corel зашибись делаются..:)

vitlance
31.05.2007, 12:37
Берём квадратик 20х20, располагаем 10шт в длину и 5шт по высоте, получаем что требовалось. И васче любые такие штуки в corel зашибись делаются..
:taunt:

kruasan
31.05.2007, 13:21
1. Ищите площадь больного прямоугольника.
2. Делите ету площадь на ваше N
3. Таким образом мы нашли площадь маленького квадратика, теперь ищем его сторону находя корень..
4. Вуаля вот и ваша Xsm и Ysm

вот так выглядит код:

Xsm = Math.sqrt((X*Y)/N);
Ysm = Xsm;
:taunt:
А теперь докажи, что такие квадратики можно вписать в "больной" прямоугольник

vitlance
31.05.2007, 13:36
:D очепятка

iNils
31.05.2007, 13:51
вот так выглядит код:

Xsm = Math.sqrt((X*Y)/N);
Ysm = Xsm;
Проверка
X = 4;
Y = 1;
N = 2;
///
Xsm = Math.sqrt ((X * Y) / N);
Ysm = Xsm;
trace (Xsm + " " + Ysm);
//1.4142135623731
//1.4142135623731А теперь попытайтесь вписать маленький прямоугольник со сторонами 1.41... в большой прямоугольник высотой 1.

Сидка
31.05.2007, 14:00
помоему в таком случае имеет смысл проверять если Xsm больше одной из сторон, то Ysm присвоить значение меньшей стороны...

vitlance
31.05.2007, 14:08
X и Y должны быть чётными чтобы разбить на квадраты.

Иначе никак

kruasan
31.05.2007, 14:47
В задаче не требуется разбивать на квадраты. Требуется вписать их. Автор топика уже уточнял этот момент.

X и Y должны быть чётными чтобы разбить на квадраты.
Откуда такие данные?

vitlance
31.05.2007, 14:59
Цитата:
X и Y должны быть чётными чтобы разбить на квадраты.

Откуда такие данные?

Уточню: Если N чётное.

Sp1R1t
31.05.2007, 14:59
чтоб разбить на квадраты, X и Y должны относиться друг к другу как натуральное число.....вроде так.

kruasan
31.05.2007, 15:09
Уточню: Если N чётное.
???
Квадрат 7х7 я преспокойно могу разбить на 4 квадрата (3.5х3.5)

vitlance
31.05.2007, 15:21
Ошибся.... Тогда так.. Его можно разбить "точно" на заданое N количество если обе стороны делятся на N.

Вообще я немного не понял... Задача в том чтобы вписать в прямоугольник N квадратов полностью заполнив прямоугольник? Я прав?

iNils
31.05.2007, 15:24
Пусть автор сначала скажет, могут ли быть дробные размеры или нет.

kruasan
31.05.2007, 15:51
Ошибся.... Тогда так.. Его можно разбить "точно" на заданое N количество если обе стороны делятся на N.

Вообще я немного не понял... Задача в том чтобы вписать в прямоугольник N квадратов полностью заполнив прямоугольник? Я прав?
Не обязательно полностью. Иначе вписать == разбить.
В планиметрии "вписать" означает построить внутри некой фигуры другую фигуру, имеющую максимально возможную площадь.

aksios
31.05.2007, 23:06
А теперь попытайтесь вписать маленький прямоугольник со сторонами 1.41... в большой прямоугольник высотой 1.
Все правильно: при некорректном значении N сторона квадрата получается больше, чем одна из сторон. Это называется погрешность апроксимации - типа чем больше N, тем точнее результат. При малых N погрешность очень велика. Иначе сумма площадей квадратов будет меньше площади исходной фигуры. Если бы речь была про прямоугольники...
N на прямую задавать ваще некорректно - автор по моему ваще не догоняет, что он хочет.

VitalyL
01.06.2007, 00:13
vitlance, ты был близок к ответу. Но твое решение работает только в том случае если N = 4,9,16,25,49...


http://www.createinteract.com/_files/fillupStage.swf

http://www.createinteract.com/_files/fillupStage.swf?N=64

замените последнюю цифру для наглядного примера

http://www.createinteract.com/_files/fillupStage.fla

etc
01.06.2007, 00:24
VitalyL, если надо что-то добавить, нужно ОТРЕДАКТИРОВАТЬ пост.

VitalyL
01.06.2007, 00:30
__etc, sorry, next time I'll do that.

Я кстати здесь давно был модератором тоже

Sp1R1t
01.06.2007, 01:39
N-количество квадратов
x – количество квадратов, умещающихся в длине прямоугольника (a)
y – количество квадратов, умещающихся в ширине прямоугольника (b)
Тогда N=x*y
Причем, x должно быть кратно a; y должно быть кратно b. Также x/a=y/b=некоторому m (коэффициент).
y=m*b
x=m*a
То есть N=a*m*m*b=S*m*m
Пусть дан прямоугольник 3*5 коэффициент m равен 3, тогда
N=15*9=135 квадратов со стороной 1/m (сторона квадрата равна a/x или a/(m*a), что равно 1/m)
m может быть и не целым (тогда x и y не совсем кратны a и b...)
m=v/k, но S*(v*v)/(k*k) обязательно должно давать целое число.

так что число N и стороны прямоугольника заранее лучше не определять...только что-то одно...:)

Kikasso
01.06.2007, 02:50
Допустим, надо вписать квадраты. Имеем сетку 8х7 и 52 квадрата для вписывания.
В такую сетку идеально впишутся 7*8 = 56 квадратов со стороной 1.

Если нам потребуется вписать 57 квадратов, ищем ближайшую сетку.
Ей окажется сетка 8х9, в которую можно вписать 72 квадрата со стороной 7/8.

Next: 9х10 и 90 квадратов со стороной 7/9.
Так будет продолжаться пока отрезаемая полозка не позволит разместить на ней квадраты, а именно 14х16 после 13х14.

VitalyL
02.06.2007, 02:37
Kikasso, молодец. Остальные двоечники.


http://createinteract.com/_files/fillupStage2.swf?N=212


http://createinteract.com/_files/fillupStage2.zip

iNils
03.06.2007, 15:50
А почему у меня внизу всегда пустое пространство остается?

VitalyL
03.06.2007, 16:03
незнаю, проверил на нескольких машинах, везде все точно.

Stage.height x Stage.width

Kikasso
03.06.2007, 16:38
Что-то какие-то квадраты у вас не квадратные))
И я подумал, если взять тот же пример с соотношением сторон 7х8 - после сетки 8х9 следующая будет 8х10 ( с пустым местом по длинной стороне), а уже потом 9х10.

VitalyL
04.06.2007, 00:35
2 Kikasso, я нахожу максимальное число на которое делиться N без остатка.