Просмотр полной версии : Здесь есть гении по геометрии?
задача такая:
дана длинна и ширина прямоугольника X, Y , так же данно количество N маленьких прямоугольничков, которые нужно вписать в большой прямоугольник. Вопрос в том как вычеслить длинну и ширину маленького прямоугольника (Xsm, Ysm).
Пример: X = 200; Y = 100; N = 50
ответ: Xsm = 20; Ysm = 20
нуждаюсь в формуле по которой это можно высчитать.
DarkLight
29.05.2007, 04:07
В приведенном примере этот ответ - не единственный(например 40,10 тоже подходит). Нужно искать один ответ? или все целые ответы?
..., так же данно количество N маленьких прямоугольничков, которые нужно вписать в большой прямоугольник.
Xsm = X/N; Ysm = Y :)
Может вы все-таки квадраты хотите вписать? Или может прямоугольники с некими требованиями к пропорциям?
да, желательно квадраты, и еще одно смягчение условья - число N можно округлить до нужного(удобного),но только в большую сторону.
допустим если число N = 29, то его можно округлить N = 30, но желательно не сильно много прибовлять к начальному значению.
VitalyL, а знаний, полученных в школе, совсем нет? Или хотя бы попытки сделать? В данном случае «сделайте все за меня».
Школу я закончил 15 лет назад, всего уже не помню. Мне казалсь здесь это быстро подсчитают. Увы гениев не нашлось :(
Гении часто скромные. А ваши условия все равно не полные. Допустим у вас размеры 191 (простое число) на 1. А задано N=10. Возникает вопрос, размеры должны быть целыми или могут быть дробными. Так в ситуации выше, при целых размерах, N округлится до 191. Если дробные... То учитывая, что высота 1, а стремиться надо к квадрату, то N также будет весьма большим.
2 VitalyL
Вы хотите "Разбить на прямоугольники" или "вписать прямоугольники" ?
iNils:
число N можно округлить до нужного(удобного),но только в большую сторону.
допустим если число N = 29, то его можно округлить N = 30
kruasan:
вписать прямоугольники.
FourSide
30.05.2007, 19:00
Вписанные прямоугольники (они же, как оказалось, квадраты) могут пересекаться? Если да, то решений слишком много :)
Вообще, мне кажется, что тут достаточно будет лёгкого изучения арифметики, и вам не нужны "гении геометрии".
Лично я не начинаю писать ни какого алгоритма (кода), пока не выясню все спорные моменты. А их в данной задаче довольно много. И один из них я вам показал. Что должно быть в таком случаи?
vitlance
31.05.2007, 09:00
1. Ищите площадь большого прямоугольника.
2. Делите ету площадь на ваше N
3. Таким образом мы нашли площадь маленького квадратика, теперь ищем его сторону находя корень..
4. Вуаля вот и ваша Xsm и Ysm
вот так выглядит код:
Xsm = Math.sqrt((X*Y)/N);
Ysm = Xsm;
Берём квадратик 20х20, располагаем 10шт в длину и 5шт по высоте, получаем что требовалось. И васче любые такие штуки в corel зашибись делаются..:)
vitlance
31.05.2007, 12:37
Берём квадратик 20х20, располагаем 10шт в длину и 5шт по высоте, получаем что требовалось. И васче любые такие штуки в corel зашибись делаются..
:taunt:
1. Ищите площадь больного прямоугольника.
2. Делите ету площадь на ваше N
3. Таким образом мы нашли площадь маленького квадратика, теперь ищем его сторону находя корень..
4. Вуаля вот и ваша Xsm и Ysm
вот так выглядит код:
Xsm = Math.sqrt((X*Y)/N);
Ysm = Xsm;
:taunt:
А теперь докажи, что такие квадратики можно вписать в "больной" прямоугольник
vitlance
31.05.2007, 13:36
:D очепятка
вот так выглядит код:
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.
помоему в таком случае имеет смысл проверять если Xsm больше одной из сторон, то Ysm присвоить значение меньшей стороны...
vitlance
31.05.2007, 14:08
X и Y должны быть чётными чтобы разбить на квадраты.
Иначе никак
В задаче не требуется разбивать на квадраты. Требуется вписать их. Автор топика уже уточнял этот момент.
X и Y должны быть чётными чтобы разбить на квадраты.
Откуда такие данные?
vitlance
31.05.2007, 14:59
Цитата:
X и Y должны быть чётными чтобы разбить на квадраты.
Откуда такие данные?
Уточню: Если N чётное.
чтоб разбить на квадраты, X и Y должны относиться друг к другу как натуральное число.....вроде так.
Уточню: Если N чётное.
???
Квадрат 7х7 я преспокойно могу разбить на 4 квадрата (3.5х3.5)
vitlance
31.05.2007, 15:21
Ошибся.... Тогда так.. Его можно разбить "точно" на заданое N количество если обе стороны делятся на N.
Вообще я немного не понял... Задача в том чтобы вписать в прямоугольник N квадратов полностью заполнив прямоугольник? Я прав?
Пусть автор сначала скажет, могут ли быть дробные размеры или нет.
Ошибся.... Тогда так.. Его можно разбить "точно" на заданое N количество если обе стороны делятся на N.
Вообще я немного не понял... Задача в том чтобы вписать в прямоугольник N квадратов полностью заполнив прямоугольник? Я прав?
Не обязательно полностью. Иначе вписать == разбить.
В планиметрии "вписать" означает построить внутри некой фигуры другую фигуру, имеющую максимально возможную площадь.
А теперь попытайтесь вписать маленький прямоугольник со сторонами 1.41... в большой прямоугольник высотой 1.
Все правильно: при некорректном значении N сторона квадрата получается больше, чем одна из сторон. Это называется погрешность апроксимации - типа чем больше N, тем точнее результат. При малых N погрешность очень велика. Иначе сумма площадей квадратов будет меньше площади исходной фигуры. Если бы речь была про прямоугольники...
N на прямую задавать ваще некорректно - автор по моему ваще не догоняет, что он хочет.
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
VitalyL, если надо что-то добавить, нужно ОТРЕДАКТИРОВАТЬ пост.
__etc, sorry, next time I'll do that.
Я кстати здесь давно был модератором тоже
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 и стороны прямоугольника заранее лучше не определять...только что-то одно...:)
Допустим, надо вписать квадраты. Имеем сетку 8х7 и 52 квадрата для вписывания.
В такую сетку идеально впишутся 7*8 = 56 квадратов со стороной 1.
Если нам потребуется вписать 57 квадратов, ищем ближайшую сетку.
Ей окажется сетка 8х9, в которую можно вписать 72 квадрата со стороной 7/8.
Next: 9х10 и 90 квадратов со стороной 7/9.
Так будет продолжаться пока отрезаемая полозка не позволит разместить на ней квадраты, а именно 14х16 после 13х14.
Kikasso, молодец. Остальные двоечники.
http://createinteract.com/_files/fillupStage2.swf?N=212
http://createinteract.com/_files/fillupStage2.zip
А почему у меня внизу всегда пустое пространство остается?
незнаю, проверил на нескольких машинах, везде все точно.
Stage.height x Stage.width
Что-то какие-то квадраты у вас не квадратные))
И я подумал, если взять тот же пример с соотношением сторон 7х8 - после сетки 8х9 следующая будет 8х10 ( с пустым местом по длинной стороне), а уже потом 9х10.
2 Kikasso, я нахожу максимальное число на которое делиться N без остатка.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.