Помогите написать программу
От: Triniti  
Дата: 09.02.06 08:14
Оценка:
Колличество точек 4<n<1000.
Каждая точка заданна парой чисел (x;y).
Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки заданные значением M<=n
Вывести на экран координаты вершины M.
Заранее спасибо!

09.02.06 14:08: Перенесено из 'C/C++'
Re: Помогите написать программу
От: Кодт Россия  
Дата: 09.02.06 08:38
Оценка:
Здравствуйте, Triniti, Вы писали:

T>Колличество точек 4<n<1000.

T>Каждая точка заданна парой чисел (x;y).
T>Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки заданные значением M<=n
T>Вывести на экран координаты вершины M.

Это называется "выпуклая оболочка" (convex hull).
Поиск в гугле, алголисте и RSDN тебе поможет.
Перекуём баги на фичи!
Re[2]: Помогите написать программу
От: VsevolodC Россия  
Дата: 09.02.06 08:52
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Triniti, Вы писали:


T>>Колличество точек 4<n<1000.

T>>Каждая точка заданна парой чисел (x;y).
T>>Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки заданные значением M<=n
T>>Вывести на экран координаты вершины M.

К>Это называется "выпуклая оболочка" (convex hull).


Не совсем. В выпуклой оболочке может быть другое количество вершин C != M.
Легко придумать случай, когда решения нет.
А "наглядное пособие" по convex hull здесь.
Re: Помогите написать программу
От: denisku Россия  
Дата: 09.02.06 09:06
Оценка: :)))
Здравствуйте, Triniti,

Что же твой Neo тебе не помогает?
Извините за потраченный траффик..
Re: Помогите написать программу
От: Murom Россия  
Дата: 09.02.06 09:41
Оценка:
Здравствуйте, Triniti, Вы писали:

T>Колличество точек 4<n<1000.

T>Каждая точка заданна парой чисел (x;y).
T>Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки заданные значением M<=n
T>Вывести на экран координаты вершины M.
T>Заранее спасибо!

Данная задача в общем случае имеет бесконечное множество решений.
- Eugeny
Re[2]: Помогите написать программу
От: Triniti  
Дата: 09.02.06 09:57
Оценка:
Здравствуйте, Murom, Вы писали:
M>Данная задача в общем случае имеет бесконечное множество решений.
Ну так продемонстирируйте пожалуйста хотябы одно из них. Очень срочно нужно!
Re: Помогите написать программу
От: LuciferMoscow Россия  
Дата: 09.02.06 10:03
Оценка:
Здравствуйте, Triniti, Вы писали:
Минимальный выпуклый многоугольник строим так:
1. Находим самую левую точку( т.е. с минимальной координатой Х ). Назовем эту точку О
2. Через O проводим луч проходящий через одну(назовем ее О_1 ) из точек так чтобы все прочие точки лежали "ниже" этого луча.
3. Через точку О_1 проводим луч аналогично пункту 2 и т.д.
Re[3]: Помогите написать программу
От: Кодт Россия  
Дата: 09.02.06 10:57
Оценка:
Здравствуйте, VsevolodC, Вы писали:

T>>>Колличество точек 4<n<1000.

T>>>Каждая точка заданна парой чисел (x;y).
T>>>Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки заданные значением M<=n
T>>>Вывести на экран координаты вершины M.

К>>Это называется "выпуклая оболочка" (convex hull).


VC>Не совсем. В выпуклой оболочке может быть другое количество вершин C != M.


Секундочку. M — это количество точек выпуклого многоугольника. А общее количество точек — это N.
"все остальные точки заданные значением M<=n" я так понимаю, что речь идёт об отношении количеств, а не отношении порядковых номеров точек.

Так что M-угольник — это выпуклая оболочка множества N точек.
Перекуём баги на фичи!
Re[4]: Помогите написать программу
От: VsevolodC Россия  
Дата: 09.02.06 12:16
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>Секундочку. M — это количество точек выпуклого многоугольника. А общее количество точек — это N.

К>"все остальные точки заданные значением M<=n" я так понимаю, что речь идёт об отношении количеств, а не отношении порядковых номеров точек.

К>Так что M-угольник — это выпуклая оболочка множества N точек.


Я понял по-другому

Есть n точек на плоскости. 4 < n < 1000. И еще задано число M <= n.
Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки.

Я бы уточнил у преподавателя, что же имеется ввиду на самом деле.
Re[5]: Помогите написать программу
От: Кодт Россия  
Дата: 09.02.06 18:52
Оценка:
Здравствуйте, VsevolodC, Вы писали:

VC>Я понял по-другому


VC>Есть n точек на плоскости. 4 < n < 1000. И еще задано число M <= n.

VC>Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки.

То есть, взять M каких-то точек из данного множества и провести M-угольник через них (т.е. эти точки лежат не в вершинах, а на сторонах)? Тогда действительно, бесконечное (континуальное) множество решений.

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

В принципе, можно просто выбрать M разных направлений и найти за O(M*N) самые "крайние" по этим направлениям точки.
Например, самую левую, самую правую, самую верхнюю, самую нижнюю.
Но тут есть риск того, что одна и та же точка окажется и самой верхней, и самой левой...

Поэтому наиболее общее решение — это всё-таки
1) найти выпуклую оболочку, и пусть это будет C-угольник (C >= M)
2) найти M-угольник, в который этот C-угольник вписан.
Как именно это сделать — нужно подумать. Вертится одно решение, но пока что не формализуется.

VC>Я бы уточнил у преподавателя, что же имеется ввиду на самом деле.


Это лучшее, что можно посоветовать! +.
Перекуём баги на фичи!
Re[3]: Помогите написать программу
От: McSeem2 США http://www.antigrain.com
Дата: 09.02.06 20:22
Оценка:
M>>Данная задача в общем случае имеет бесконечное множество решений.
T>Ну так продемонстирируйте пожалуйста хотябы одно из них. Очень срочно нужно!

Когда говорят, что "задача имеет бесконечное множество решений", выбор (или продемонстрация) одного из них не имеет смысла. Должно быть еще какое-то ограничивающее условие, например, многоугольник должен иметь минимальную площадь или еще какое-то свойство. Надо уточнить.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Помогите написать программу
От: alex_ez Россия alex.jife.ru
Дата: 13.02.06 04:16
Оценка:
Здравствуйте, Triniti, Вы писали:

T>Колличество точек 4<n<1000.

T>Каждая точка заданна парой чисел (x;y).
T>Провести через M точек выпуклый M-угольник внутри которого лежат все остальные точки заданные значением M<=n
T>Вывести на экран координаты вершины M.
T>Заранее спасибо!

еще один студент?..
silence in quite
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.