Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Максимальный периметр прямогольника / 13 сообщений из 13, страница 1 из 1
07.05.2005, 00:56
    #33053853
Alex Friend
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Не подскажите алгоритм для задачи.
Задание: задано множество точек на плоскости.
Выбрать из них 4 разные точки, которые являются вершинами прямоугольника наибольшего периметра.
...
Рейтинг: 0 / 0
07.05.2005, 01:52
    #33053874
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Точки в россыпи? Никакой четкой системы нет?
Тогда можно так:
Берешь одну точку. Потом для каждой из оставшихся строишь прямую по базовой точке и второй. Потом строишь из первой точки перепендикуляр и проверяешь есть ли хоть одна точка которая лежит на этом перпиндикуляре? Если нету - значит прямоугольник на основе первых двух точек построить вообще нельзя. Если есть хоть одна, строишь перпендикуляр к первой прямой из второй точки. Опять проверяешь есть ли точки лежащие на нем? Если есть сравниваешь четветрую найденую точку с третьей во первых по расстоянию до первой и второй точки (должно совпадать), во вторых расстояние между третей и четвертой должно совпадать с расстоянием между первой и второй. Можно в принципе проверять не расстояния а вектора, но расстояния по моему проще :)
Таким образом накапливаешь список прямоугольников которые вообще возможно построить на данной россыпи точек. Потом сравниваешь их периметры.
...
Рейтинг: 0 / 0
07.05.2005, 08:56
    #33053923
Alex Friend
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Спасибо, попробую,я-то по началу думал простая задача.
А надо немного поковыряться.
...
Рейтинг: 0 / 0
07.05.2005, 18:30
    #33054256
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
2 WhiteOwl:
Наверно лучше так переформулировать: перебираешь все точки множества, для каждой найденой точки выбираешь по две точки из оставшихся, считаешь скалярное произведение двух векторов (из базы в первую, из базы во вторую),
если перпендикулярны -- сохранем эту тройку точек.
Далее из всех найденных троек вы строим прямоугольники по следующему критерию: если одна тройка точек (A, B, C), а другая (A1, B1, C1), то A = A1, С = С1 и например BC перпендикулярна B1C1. Среди них ищем наибольший периметр.
Просто скалярное произведение считается быстрее, чем расстояние.
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
09.05.2005, 19:06
    #33055214
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Ну это вообще-то не "другя формулировка" а "изначально другой подход" :)

А расстояния в моем подходе можно и не считать. Там можно расценивать все найденые отрезки как вектора и делать простое сравнение "если X1=X2 и Y1=Y2 то найденые отрезки могут быть противоположными сторонами прямоугольника". И даже без перемножения векторов :)
...
Рейтинг: 0 / 0
10.05.2005, 15:06
    #33055782
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Alex Friend...которые являются вершинами прямоугольника наибольшего периметра.

Автор хотел сказать - четырехугольника? (ИМХО)
...
Рейтинг: 0 / 0
10.05.2005, 18:21
    #33056078
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Можно конечно и четырехугольники считать, но тогда задача усложнится на порядок :)
Берем три точки, проводим по ним два отрезка AB и BC. Теперь ищем такую четвертую точку D чтобы отрезок CD не пересекал AB и не совпадал с BC, а потом еще проверяем чтобы отрезок DA не пересекал BC. Иначе вместо четырехуголника у нас получится шестиугольник :)
Плюс везде проверки на совпадение двух точек...
Не, можно конечно и четырехуголники искать, но прямоугольники проще :)
...
Рейтинг: 0 / 0
10.05.2005, 22:12
    #33056304
Alex Friend
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
mayton Alex Friend...которые являются вершинами прямоугольника наибольшего периметра.

Автор хотел сказать - четырехугольника? (ИМХО)
нет именно прямоугольника


я накодил как советовал товарищ Lelikk, парочка шаманств и она работает, только не совсем правильно находит косые прямоугольники, то есть те, у которых стороны не параллельны осям координат.
...
Рейтинг: 0 / 0
11.05.2005, 01:18
    #33056380
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Alex Friendя накодил как советовал товарищ Lelikk, парочка шаманств и она работает, только не совсем правильно находит косые прямоугольники, то есть те, у которых стороны не параллельны осям координат.
Если не находит - значит ошибся в кодировании формул перемножения векторов.
Метод должен работать, хотя на мой взгляд он и не является самым оптимальным. Уравнение перпендикулярных прямых проще чем векторная алгебра :)
...
Рейтинг: 0 / 0
16.05.2005, 14:51
    #33067328
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
White Owl Alex Friendя накодил как советовал товарищ Lelikk, парочка шаманств и она работает, только не совсем правильно находит косые прямоугольники, то есть те, у которых стороны не параллельны осям координат.
Если не находит - значит ошибся в кодировании формул перемножения векторов.
Метод должен работать, хотя на мой взгляд он и не является самым оптимальным. Уравнение перпендикулярных прямых проще чем векторная алгебра :)

По-моему как раз наоборот: возиться с уравнением прямой дольше (учитывая ее особые положения параллельно осям координат), чем вычислить выражение вида x1x2 + y1y2.
...
Рейтинг: 0 / 0
20.05.2005, 23:36
    #33078230
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
ой как все сложно.. Я бы по рабоче крестьянски сначала постоил бы все четырехугольники из точек, из них отсеял бы непрямоугольники, остаток отсортировал по размеру периметра.
...
Рейтинг: 0 / 0
23.05.2005, 21:44
    #33080998
Alex Friend
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Ну насчет полного перебора я тоже думал, конечно, однако хотелось подсократить количество операций.

Я вам новую задачу принес на похожую тему.
Дано множетсво случайно разбросанных точек и такое же множетсво окружностей. Надо провести прямую, пересекающую максимальное количество окружностей.
Есть идеи, не могу сформулировать внятно, что предложите?
...
Рейтинг: 0 / 0
23.05.2005, 23:10
    #33081038
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальный периметр прямогольника
Alex FriendЯ вам новую задачу принес на похожую тему.
Дано множетсво случайно разбросанных точек и такое же множетсво окружностей. Надо провести прямую, пересекающую максимальное количество окружностей.
Есть идеи, не могу сформулировать внятно, что предложите?
Прямые по данным точкам проводить?
Ну можно, по двум точкам провести прямую, взять от нее перпендикуляр, совместить перпендикуляр с центром очередной окружности и найти точку пересечения между исходной прямой и полученой. Потом считаешь расстояние от центра окружности до найденой точки - это минимальное расстояние между центром окружности и исходной прямой. Если оно меньше радиуса окружности, значит прямая ее пересекает. И по циклу, для каждой прямой проверяешь все окружности....
Это если в лоб решать :) А иначе думать надо.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Максимальный периметр прямогольника / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]