| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Простая фигура, |
| Автор: Joni 21.11.2004, 00:39 |
| Всем здрасте! Подскажите алгоритм. Нужно найти простую фигуру минимальной площади, охватывающей две другие |
| Автор: maxim1000 21.11.2004, 12:32 | ||
поконкретнее надо описать класс подходящих фигур тогда уже можно что-то думать... |
| Автор: Joni 21.11.2004, 18:28 |
| Прстой фигурой можно считать произвольный треугольник, четырехугольник, круг и элипс. |
| Автор: maxim1000 21.11.2004, 20:56 |
| тогда это уже пять задач: 1. минимальный треугольник 2. минимальный четырехугольник 3. минимальный эллипс 4. минимальный круг 5. выбрать из них фигуру с минимальной площадью (ну это, в общем-то, и не задача 4 задачу можно и не решать, т.к. любой круг является эллипсом задачу 1 можно тоже не решать: треугольник можно считать предельным случаем четырехугольника есть два возможных варианта решения этих задач: 1. аналитический 2. численный 1й требует описания тех двух фигур, и уже по их свойствам находит решение для четырехугольника и эллипса плюсы: достаточно просто подставить параметры в формулу, соответствующую ситуации, и получить точные значения параметров минусы: поиск решения может оказаться довольно сложным, а в некотором случае аналитическое решение невозможно, кроме того, скорее всего, придется решать отдельно задачи для разных фигур 2й способ: строится функция - значение площади в зависимости от параметров фигур, потом ее минимизируют обычными численными методами плюсы: вся разница в типе покрывающей фигуры вкладывается в функцию, алгоритм минимизации остается тем же (еще нужно будет отдельно написать функцию проверки того, что фигура действительно покрывает две другие) минусы: часто численные методы имеют ограниченную область применения (накладываются ограничения на минимизируемую функцию) |
| Автор: val 22.11.2004, 10:46 | ||
Есть такая вещь, как рекурсивный алгоритм заливки области. В самом общем виде выглядит таким образом:
Так вот, выбираем центр тяжести наших фигур и начинаем от туда выполнять рекурсивный алгоритм заливки. Процесс будет продолжаться пока мы не покроем все фигуры. Мне кажется, что полученная область заливки может претендовать на минимальную. Управлять ходом процесса заливки можно довольно-таки гибко, при желании можем получить как округлые формы, так и прямоугольные... |
| Автор: maxim1000 22.11.2004, 11:50 | ||
не подходит. пример: есть две фигуры - прямоугольники с одинаковыми шинами и высотами расположены так, что образуют букву Т для того, чтобы покрыть эту фигуру минимальным прямоугольником, его чентр должен быть на половине высоты вертикального прямоугольника, а центр тяжести буджет несколько выше на самом деле выбор центра покрывающей фигуры и есть основная задача (зная его все остальное можно посчитать) |
| Автор: val 22.11.2004, 14:10 | ||
Согласан. Тогда, скажем так, что центр тяжести будем искать с какой-то дельтой относительно вычисленного. Все случаи, конечно, не покрыть, но для стандартного набора расположений подойдёт... |
| Автор: Joni 24.11.2004, 18:08 |
| Всем огромное спасибо за предложенные идеи! А можно ведь те две произвольны фигуры задать так: Создать файл с набором некоторых точек, считать их произвольно а затем соеденить прямыми линиями (по некоторому правилу). Ведь можно разбить любую фигуру на отрезки? И еще эти две фигуры не пересекаются. |
| Автор: val 24.11.2004, 18:12 |
| Joni, но так нет гарантии, что полученная фигура будет правильной... |
| Автор: Joni 24.11.2004, 20:51 |
| Что-то я совсем запутался уже. А что же является ПРАВИЛЬНОЙ фигурой. По моему любую фигуру можно охватить простой (НЕ описать) Или я что-то недопонимаю?! |
| Автор: val 25.11.2004, 10:20 | ||
Просто не совсем понятно, по какому закону соединять прямыми линиями? |
| Автор: EKoshelev 25.11.2004, 14:15 |
| А я вообще нефига не понял из ваших базаров. Кстати, вопросик у меня. У четырёхугольника один из углов может быть больше 180 градусов? Или нет. |
| Автор: val 25.11.2004, 17:34 | ||
Да, например 30 градусов может соответвовать 360 + 30 = 390 градусам... |
| Автор: Joni 25.11.2004, 20:39 |
| А чтобы решить данную задачу, может для начала нужен алгоритм задания исходных фигур. |
| Автор: cardinal 25.11.2004, 22:05 | ||||||
А может 330 градусам? Описываем эллипс и треугольник
Берем минимальные значения x и y (y отчет сверху) у этих двух фигур за левую верхнюю точку прямоугольника и максимальные значения x и y (y отчет сверху) у этих двух фигур за правую нижнюю точку прямоугольника. Этот прямоугольник и есть самый маленький по площади.
Находим треугольники которые зажимают (как розовый треугольник на картинке) обе фигуры, так, чтобы нельзя было ее повернуть. Их будет четыре, как я понял. Один из них я сконструировал подвинув диагональ до окружности круга, а потом повернув ее вокруг окружности пока линия не коснулась второй фигуры. Также можно сконструировать и другие три треугольника. Самый маленький по площади и будет думаю ответом... но не уверен. Вот мои соображения по этому поводу |
| Автор: EKoshelev 26.11.2004, 08:17 |
| val, четырёхугольник может быть не выпуклым? (не знаю как правильно сказать) |
| Автор: val 26.11.2004, 10:26 | ||||
Да. Вот пример невыпуклого четырёхугольника...
Добавлено @ 10:29 Пришлось воспользоваться тегом для кода, чтобы картинка не испортилась... |
| Автор: EKoshelev 26.11.2004, 12:40 |
| val Может ты не понял. Это перефразировка моего вопроса об угле больше 180 градусов. |
| Автор: Guest 26.11.2004, 23:35 |
| А полученный прямоугольник не бедет ведь наименьшим четырехугольником? Тогда нужно искать четырк точки: верх-низ и лево-право. Кстати, Cardinal, на чем вы реализовали данный алгоритм? |
| Автор: cardinal 27.11.2004, 01:28 | ||||
Кстати о птичках... Ты прав... Что делать... Наверно нумерически решать придется, то есть касательные к крайним точкам вертеть и смотреть на результат.
Начем? Не знаю... |
| Автор: Joni 27.11.2004, 19:15 |
| Вот засада! Мысль насчет четырех крайних точках не в счет. Ведь можно получить случаи отсечения заданных фигур. Cardinal, рисунок вы в графичем редакторе нарисовали? |
| Автор: cardinal 27.11.2004, 19:28 | ||||
Это помоему нет, но вот минимальную площадь таким образом не получить. То есть этот прямоугольник не будет иметь наименьшую площадь...
Можно на ты |
| Автор: Joni 27.11.2004, 19:47 |
| А может провести четыре линии так, чтобы каждая содержала максимальное число точек. Получим какое-то множество четырехугольников (т.к. линий может окакзаться больше чем 4) Посчитать площади. И выбрать минимальный. |
| Автор: cardinal 27.11.2004, 22:31 | ||
А вообще четырехугольник с прямыми углами или нет? |
| Автор: Joni 27.11.2004, 22:38 |
| Необязательно. Можно рассматривать любой четырехугольник. |
| Автор: Joni 28.11.2004, 22:18 |
| Val вы говорили: Есть такая вещь, как рекурсивный алгоритм заливки области Итак зальем данные фигуры, но ведь они не будут простыми |
| Автор: cardinal 29.11.2004, 00:19 | ||
| Joni, то что предложил val не прокатит... Зальется офигенная площадь, а не минимальная Надо было по крайней мере так написать:
|
| Автор: Joni 1.12.2004, 18:50 |
| Ой-ой что же делать! Вот не ммогу найти как по координатам фигуры найти её центр (н-р, тяжести) Думаю, что эта найденная точка поможет в нахождении минимыльной окружности. |
| Автор: cardinal 1.12.2004, 21:44 |
| Ладно... Смотрим на картинку и не пугаемся У нас два объекта, в этом примере это будет треугольник и "почтикруг" Залиты они или нет разницы не имеет (если я ошибаюсь, то поправьте меня Теперь есть две формулы, по которым мы получим x и y координату точки равновесия (центр тяжести). На картинке попытался объяснить кто такие xi и yi. Это координаты каждой точки Pi, которая пренадлежит той или иной фигуре (какой без разницы). Gi эта сила, которая давит на каждую точку. Здесь все силу равны поэтому все Gi = 1, то есть сумма Gi просто равна кол-ву точек. Ну короче я сейчас подумал, что все вообще просто становится О... Идея Половина того, что написано выше делать не надо Действуй. |
| Автор: ~FoX~ 2.12.2004, 15:05 |
| А не овал ли будет с наименьшей площадью? |
| Автор: cardinal 2.12.2004, 15:30 |
| Пока думаю что нет А потом Joni это все реализует и нам расскажет |
| Автор: ~FoX~ 2.12.2004, 16:23 |
| А если сопряжение по двум противоположным сторонам элипса не одинвакове? |
| Автор: cardinal 3.12.2004, 02:14 |
| ~FoX~, пока не понял о чем ты... Нарисуй картинку как я и попробуй объяснить Пока все еще думаю, что круг будет |
| Автор: ovr2000 3.12.2004, 13:13 |
| По поводу простых фигур (треугольник, четырех угольник, эллипс) Если мы описали минимальный треугольник, вокруг двух фигур может быть случай, когда углы треугольника полностью совпадают с одной из фигур. Правда это очень крайний случай. На столько невероятный, как и крайний случай четырех угольника, у которого одна из строн имеет длину 0. В остальных случаях, мы можем провести касательную, к одной из вписанных фигур, которая отделит свободный угол треугольника. В результате мы получим четырехугольник меньшей площади, чем треугольник, который описывает те же фигуры. ВЫВОД: Площадь минимального четырехугольника не меньше, чем площадь минимального треугольника, описывающих две другие фигуры. PS В общем виде задача настолько сложна, что её еще не решили академики. Поэтому нужно все таки начать с нормальной постановки задачи |
| Автор: Joni 3.12.2004, 20:28 |
| Всем огромное спасибо за предложенные идеи. Я уже пытаюсь только вникать. :-) Вот и пытаюсь на Pascal построить окружность. Да задачу вроде еще не решили. Но ведь пытаться надо. |