Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вписать прямоугольник в п-угольник 
:(
    Опции темы
Owen
Дата 28.10.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 5.7.2006
Где: Русь

Репутация: нет
Всего: нет



Задача такая:
есть: на координатной плоскости n-угольник произвольный, заданный ломаной прямой без самопересечений.
надо: вписать в него (те определить координаты 4х (2х) вершин) прямоугольник, у которого задано отношение длин сторон и направление (направляющий вектор) одной из сторон. Желательно, чтобы этот прямоугольник был максимального размера.
PM ICQ   Вверх
Earnest
Дата 28.10.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Цитата(Owen @  28.10.2008,  19:47 Найти цитируемый пост)
вписать в него (те определить координаты 4х (2х) вершин) прямоугольник, у которого задано отношение длин сторон и направление (направляющий вектор) одной из сторон. Желательно, чтобы этот прямоугольник был максимального размера. 

Несколько взаимоисключающие условия, не находишь? По определению - вписать == это построить так, чтобы вершины прямоугольника лежали на границе многоугольника. Если задано направление одной из осей, такой прямоугольник вообще единственный - или вообще не существует. А есть еще и ограничение на соотношение сторон. 
Может, "вписать" у тебя что-то другое означает?



--------------------
...
PM   Вверх
Owen
Дата 29.10.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 5.7.2006
Где: Русь

Репутация: нет
Всего: нет



smile Согласен был не прав.

Скажем так: 
надо: найти прямоугольник максимального размера (те определить координаты 4х (2х) вершин), у которого задано отношение длин сторон и направление (направляющий вектор) одной из сторон, лежащий внутри n-угольника. 
PM ICQ   Вверх
4d5a
Дата 1.11.2008, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007

Репутация: 1
Всего: 1



а n-угольник выпуклый ?

Добавлено через 11 минут и 49 секунд
опс.. просмотрел
Цитата

n-угольник произвольный



Это сообщение отредактировал(а) 4d5a - 1.11.2008, 07:17
PM MAIL   Вверх
maxim1000
Дата 1.11.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



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

Добавлено через 9 минут и 56 секунд
перебирать все возможные  точки на отрезке уже не получится, т.к. их бесконечное количество
так что придётся представить размер прямоугольника в аналитической форме (а скорее всего, в кусочно аналитической) в зависимости от положения это точки на выбранном отрезке
ситуацию упрощает, что у нас есть направления сторон и соотношение их длин
если у нас отрезок параллелен одной из сторон, возможно два направления прямоугольника (если отрезок и прямоугольник горизонтальные, то прямоугольник может лежать справа или слева от точки), тогда нужно перебрать два варианта
в остальных случаях - направление точно известно
тогда мы просто находим размер, при котором прямоугольник упрётся в первое же препятствие
формула, дающая это число будет содержать всякие min, max от каких-то выражений, включающих функции (на первый взгляд линейные) от координат многоугольника
ну а если они окажутся линейными, то максимум будет достигаться в точках, где аргументы одного из min/max сравниваются, отсюда уже можно получить конечный набор точек-кандидатов на отрезке, а там уже можно просто перебрать их


--------------------
qqq
PM WWW   Вверх
Owen
Дата 1.11.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 5.7.2006
Где: Русь

Репутация: нет
Всего: нет



Единственный вариант, который пришел в голову -- это брать точки пересечения диагоналей, лежащие в многоугольнике, рассматривать их как центры прямоугольников. Из полученных прямоугольников выбрать максимальных. Как вариант -- можно придумать способ растягивать прямоугольник, в случае, если две стороны не упираются в границу н-угольника.
PM ICQ   Вверх
maxim1000
Дата 2.11.2008, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



ой, кажется, я написал глупость: возможен вариант, когда ни одна вершина прямоугольника не будет лежать на границе многоугольника

зато придумал второй вариант:
для начала в целях упрощения повернём всё так, чтобы стороны прямоугольника стали вертикальны и горизонтальны, а потом растянем одну из координат так, чтобы соотношение стало 1 (т.е. квадрат)

если бы нам не мешали стороны мы бы могли строить сколь угодно большие квадраты, а все ограничения происходят именно из-за сторон многоугольника
каждый такой отрезок накладывает ограничения на размеры допустимых квадратов в зависимости от расположения квадрата относительно него
пространство вокруг каждого отрезка можно разделить на 6 зон, в каждой из которых максимально возможный размер будет выражаться линейной функцией от координат
соответственно, получаем кусочно линейную функцию, заданную на совокупности треугольников и параллелограммов
параллелограммы можно разбить на треугольники, чтобы удобнее обрабатывать
таки образом, каждый отрезок даёт такую кусочно линейную функцию, которая показывает ограничения вносимые этим отрезком
дальше нужно просто построить для каждого отрезка такие функции и построить общую функцию, которая в каждой точке будет равна минимуму всех функций - она тоже будет кусочно линейная
и она будет показывать, какого максимального размера можно построить квадрат с центром в данной точке
и у этой функции нужно найти минимум
т.к. она кусочно линейная, минимум будет на пересечении трёх (или больше) рёбер треугольников, на которых она задана, так что достаточно перебрать все такие рёбра

Это сообщение отредактировал(а) maxim1000 - 2.11.2008, 01:13

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  squares.PNG 10,04 Kb


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.