![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Bard |
![]() ![]()
Сообщение
#1
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Всем привет. У меня ту одна задачка по геометрии которую я очень хочу решить. Надеюсь на вашу помощь... Значит так. Задано число N(<=100) и N точек на координатной плоскости. Точки не лежат на координате (0,0) и по модулю не превышают 1000. Нужно найти координаты центра и радиус круга окружность которого соприкасалась бы как мин. с одной точкой и окружала бы все остальные точки.
пример: 6 1 1 1 5 3 6 5 3 9 5 5 9 ответ: 5 4 5 У кого какие идеи? -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
1) перебором построить выпуклый многоугольник, с вершинами в точках из заданного множества, такой, что все точки множества лежат внутри него (включая стороны); эксплуатируется уравнение прямой;
2) отрезок максимальной длины, построенный на вершинах многоугольника - диаметр искомой окружности. -------------------- The idiots are winning.
|
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
1) перебором построить выпуклый многоугольник, с вершинами в точках из заданного множества, такой, что все точки множества лежат внутри него (включая стороны); эксплуатируется уравнение прямой; 2) отрезок максимальной длины, построенный на вершинах многоугольника - диаметр искомой окружности. Боюсь, так не выйдет.. Контрпример - три точки в вершинах равностороннего треугольника. Условие несколько хитрое.. В нем ничего не говорится про минимальность окружности. Если минимальность не нужна, то все просто. Например, можно найти Xmin, Xmax, Ymin и Ymax. Тогда прямоугольник с этими координатами будет вмещать все множество. Построим описанную окружность, а затем [далее неверно, см. ниже] сместим ее так, чтобы она проходила через, например, крайнюю точку по Х. Если таких точек несколько - то через две, имеющие минимальную и максимальную координату Y. [далее снова верно] Если добавить минимальность, то будет сложнее. Ключевое соображение такое: минимальная окружность должна проходить через три точки. Можно перебрать все тройки точек и построить на них описанные окружности, но соображение, что искомая будет иметь максимальный радиус из них - абсоютно неверно. Правильно будет искать расстояния от всех точек до центра построенной окружности и сравнивать его с радиусом оной. Если все такие расстояния меньше либо равны радиусу - окружность годится. Но из всех годящихся еще нужно выбрать минимальную.. Вот так ![]() Bard, уточни про минимальность, плз. PS Тебе правда нужна такая программа на Паскале как итог этой темы, или мне перенести тему в Алгоритмы? Сообщение отредактировано: Lapp - 31.12.2008 8:42 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Вот это мое рассуждение в предыдущем мессадже неправильное:
сместим ее так, чтобы она проходила через, например, крайнюю точку по Х. Если таких точек несколько - то через две, имеющие минимальную и максимальную координату Y. Верно будет так: У нас есть окружность, описанная вокруг максимального вмещающего прямоугольника (Xmin, Xmax, Ymin и Ymax). Подсчитаем расстояние от центра этой окружности ( (Xmin+Xmax)/2, (Ymin+Ymax)/2 ) до всех точек. Искомая окружность имеет центр в той же точке, а ее радиус равен максимуму из всех найденных расстояний. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
А можо-ли попробовать так:найти точку,которая по координатам будет ближе к 0,0 и найти точку,которая ближе будет к 1000,1000?Расстояние между ними-радиус окружности,одна из них-её центр(окружности)...или я ошибаюсь?
|
Lapp |
![]()
Сообщение
#6
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
найти точку,которая по координатам будет ближе к 0,0 и найти точку,которая ближе будет к 1000,1000?Расстояние между ними-радиус окружности,одна из них-её центр(окружности) Несколько странно.. Почему именно (1000,1000), а не (-1000,-1000) или (1000,-1000)? И потом - самая близкая к (1000,1000) - это не обязательно самая далекая от (0,0). Например, точка (900,900) ближе к (1000,1000), чем (800,1000), но она ближе к (0,0), чем (800,1000).Короче, способ явно ущербный. Чем тебе (если ты Bard, конечно) не нравится описанный мной способ? И, пожалуйста, ответь на мой вопрос про минимальность. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Bard |
![]()
Сообщение
#7
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Всем привет. Извиняюсь за поздний отклик. Новогоднее настроение только утихает. Ну во первых пост гостя это не мой пост. во вторых метод который предложил xds не катит. а в третих слово минимальность не упомянута в условии задачи. просто окружность должна соприкасаться как мин. с одной точкой и окружать все остальные... ну я подумал что это и есть минимальный круг. ведь меньше не куда...
![]() -------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Bard |
![]()
Сообщение
#8
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Я помоему нашел подходящий алгоритм. хочу узнать и ваше мнение. Я думаю сначала посторить выпуклую оболочку а потом уже описанную окружность вокруг многоугольника. алго выпуклой оболочки я знаю наизусть а вот с кругом никаких соображений нету.
-------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
думаю сначала посторить выпуклую оболочку а потом уже описанную окружность вокруг многоугольника. Что означает "описанная окружность вокруг многоугольника"? Я не вполне понимаю этот термин. Все равно нужно перебирать треугольники (правда, меньшее количество).Если минимальность не нужна, то чем плох мой способ (сообщение 4)? Ко всему прочему, он значительно проще и быстрее всяких выпуклых оболочек. Кстати мой второй способ в смысле минимальности неверен. Позже напишу, почему - сейчас нет времени. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Вот, немного освободился.
Привожу уже релизованный мой первый (неминимальный) алгоритм: // нахождение центра окружностиКстати сказать, этот способ допускает простую оценку "неминимальности": радиус окружности меньше, чем Rmin*Sqrt(2) , где Rmin - радиус действительно минимальной окружности. Причем, это грубая оценка (то есть тут именно строгое неравенство). Если нужно, могу сделать поточнее. Кстати мой второй способ в смысле минимальности неверен. Сначала процитирую сам себя (неверное решение)Цитата Ключевое соображение такое: минимальная окружность должна проходить через три точки. Можно перебрать все тройки точек и построить на них описанные окружности, но соображение, что искомая будет иметь максимальный радиус из них - абсоютно неверно. Правильно будет искать расстояния от всех точек до центра построенной окружности и сравнивать его с радиусом оной. Если все такие расстояния меньше либо равны радиусу - окружность годится. Но из всех годящихся еще нужно выбрать минимальную.. Именно "ключевое соображение" тут неверно. Существуют случаи (и нередкие), когда минимальная окружность проходит через две точки, а не через три. Простейший пример - три (или больше) точки на одной прямой. Решение можно изменить так, чтобы оно стало верным. Для этого нужно рассматривать не только окружности, описанные вокруг треугольников, но также и окружности, построенные на каждой паре точек (отрезке) как на диаметре. Это не слишком усложняет алгоритм и гарантирует минимальность-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Bard |
![]()
Сообщение
#11
|
![]() Учиться, учиться еще раз учиться ![]() ![]() ![]() Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: ![]() ![]() ![]() |
Все сделал!!! Огромное спс Лапп... Твой алго очень мне помог. Вот только не нужен никакой прямоугольник. Можно просто взять мин/макс точек. Еще раз спс Лапп
-------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
только не нужен никакой прямоугольник. Можно просто взять мин/макс точек Прямоугольник был нужен для наглядности в начале ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:09 |