Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Построение выпуклой оболочки методом Джарвиса (http://forum.oszone.net/showthread.php?t=30094)

noname00.pas 29-11-2001 15:41 207229

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

1. Находим пару точек A(x1, y1) и B(x2, y2)таких, что все другие точки лежат по одну сторону от прямой, на которой лежит отрезок AB. Эти две точки будут включены в выпуклую оболочку

Это можно сделать например полным перебором всех вариантов. А можно и не полным перебором. Например можно найти точку с наименьшей абсциссой и перебором найти для неё пару.

2. Для одной из точек (ну пусть будет B) находим точку C (не совпадающую с A) такую, что все другие точки лежат по одну сторону от прямой, на которой лежит отрезок BС.
Включаем точку C в нашу выпуклую оболочку.

3. По аналогии со 2-м пунктом находим для каждой новой точки такую точку, что все другие точки по одну сторону от прямой...
И так до тех пор, пока новая найденная нами точка не совпадёт с точкой A.

Я понятно объяснил, или может стоит запостить пример програмки?

ПС Я слышал такое странное название для этого метода - "Метод заворачивания подарков"

vasketsov 29-11-2001 18:38 207230

можно просто пройти по всем вершинам в одном направлении и для трех соседних вершин проверять целесообразность соединения 1-й и 3-й (включить 2-ю в ВО).
И так крутиться пока не будет отсутствие изменений.

Если вообще понятно, что я написал.

noname00.pas 30-11-2001 02:59 207231

vasketsov
А если у тебя не прямоугольник в порядке обхода по часовой стрелке, а просто множество точек?

ПС Мы кстати о методе Джарвиса. Кстати этот медод самый простой в реализации из всех известных мне...

noname00.pas 30-11-2001 03:01 207232

vasketsov
Кстати что ты называешь "целесообразностью" и как ты собираешься её проверять?

vasketsov 30-11-2001 11:06 207233

Это если дан многоугольник и порядок его обхода.

Берешь <=4 точки (с максимальной и минимальной абсциссой и ординатой). Получаешь 4 (или 3)-угольник. Если совсем вырожденный случай - 2-хугольник :)) получишь. Пусть N углов.

Дальше проходишь цикл по всем точкам и выкидываешь все внутренние точки.
Посте этого выбираешь одну любую точку (внешнюю) и добавляешь ее к ВО (исходя из ее абсциссы и ординаты). Для треугольника, который она добавила, опять выкидываешь все внутренние точки.

И так далее, пока множество внешних точек не будет пустым.

Хотя, я так подумал, по числу операций тоже O(N*N), как и метод Джарвиса.

noname00.pas 01-12-2001 01:05 207234

vasketsov
Да, только метод Джарвиса пишется буквально в несколько строк...
Я всегда им пользуюсь

Guest 16-12-2003 12:34 207235

Пожалуйста, вставте исходнике, ещ просьба чтобы они были на Паскале.
Заранее спасибо!

karina20 16-02-2005 15:24 298857

для студента:
Уважаемый, если вы так хорошо разбираетесь в методе Джарвиса,не могли бы вы поместить программную реализацию данного метода(на Delphi али на Pascal-у).А то,что-то у меня не получается.Заранее большое-прибольшое СПАСИБО!!!!!!!

hasherfrog 16-02-2005 23:23 299033

Э-хе-хе :( Посмотрите на дату создания темы и её последнего поста от noname00.pas

См.: решения.

karina20 17-02-2005 14:24 299245

hasherfrog,благодарю! :4u:


Время: 12:21.

Время: 12:21.
© OSzone.net 2001-