Консультация № 186069
17.05.2012, 15:52
274.09 руб.
0 11 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:


Есть алгоримы Грэхема, Джарвиса и другие для построения выпуклой оболочки для множества точек.

Нужна помощь в том, как разделить множество точек на выпуклые четырехугольники, сединенные между собой одной или двумя общими точками.

Обсуждение

давно
Посетитель
7438
7205
17.05.2012, 16:05
общий
Приведите рисунок для наглядности, что хотите получить
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
17.05.2012, 17:11
общий
Такое ощущение нечто похожее на "мыльную пену" только состоящую из выпуклых четырёхугольников.
Неизвестный
17.05.2012, 17:34
общий
Пример
Прикрепленные файлы:
8766a401e2498a0aeb213d9d71d3a831.png
давно
Посетитель
7438
7205
17.05.2012, 17:57
общий
17.05.2012, 18:00
Т.е., надо искать четырехугольники, охватывающие по-максимуму точек. Вплоть до одного (все точки внутри)...
Если не удается охватить все, то разбиваем на несколько выпуклых (соединенные, естественно, одной или двумя точками). Так получается?
Каковы критерии выбора четырехугольников? Минимальная площадь? К какому числу четырехугольников стремиться?
При желании, можно насоздавать из каждой четверки точек по четырехугольнику. Будет точно, как "мыльная пена" :)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
17.05.2012, 19:37
общий
17.05.2012, 19:40
Есть такой вариант:
1) Находим при помощи алгоритма Грэхема точки, являющимися вершинами многоугольника, являющего оболочкой для всех точек.
2) Имеем последовательность вершин.
3) Делим их последовательно на четырехугольники.
а) берем 4 первых точки
б) оставляем первую и последнюю, добавляем две
в) и так, пока не дойдем до последней
Правда, тут есть нюанс, это справедливо только для четного числа вершин
Для нечетного надо еще подумать, как сделать...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
18.05.2012, 14:40
общий
Есть неясность в вопросе. Вершины четырёхугольников обязаны покрывать всё заданное множество точек?
Неизвестный
18.05.2012, 14:44
общий
Адресаты:
Если на очередной итерации остаётся 3 неиспользованные точки оболочки, то добавляем к ним только одну из последней пары. Т.е. при нечётном количестве вершин в оболочке последний четырёхугольник получится связан только одной вершиной.
давно
Посетитель
7438
7205
18.05.2012, 14:51
общий
А в случае пятиугольника и треугольника?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
18.05.2012, 14:55
общий
И еще проблема: могут остаться точки внутри "вырезанного" треугольника. Причем, с обеих сторон...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
20.05.2012, 14:07
общий
Есть идея:
1) вершин должно быть не меньше шести, иначе задача не решается
2) строим многоугольник-оболочку для всех точек
3) если вершин - четное число, то действуем, как я описал выше.
4) если вершин нечетное число и больше трех, то добавляем еще одну вершину из внутренних.
Делаем это следующим образом: просматривая пары вершин, находим такие, для которых,
опять же, находим вершину, для которой все остальные вершины не будут лежать внутри образовавшегося
треугольника.
5) начиная с данной вершины, выполняем шаг 3)
6) остается только случай, когда три вершины... Мысли есть, но еще не сформировались...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
24.05.2012, 12:11
общий
это ответ
Здравствуйте, Дмитрий!
Увы, Вы не интересуетесь задачей, поэтому уточнить некоторые детали не представляется возможным.
Поэтому предлагаю следующий вариант:
В начале, предположим допустимость отсутствия точек из данного множества во всех вершинах четырехугольников,
обязательным является только то, что все точки будут внутри или в большинстве вершин. Это послабление условия необходимо только
для числа точек меньшего 4-х, ровно 5 и когда все точки внутри треугольника. В последнем случае задача разделения точек продолжает оставаться не намного проще исходной.
Итак, алгоритм следующий:
1) Если точек меньше 3, дополняем до 4
2) Находим при помощи алгоритма Грэхема точки, являющимися последовательными вершинами многоугольника, являющего оболочкой для всех точек.
3) Если вершин четное число:
а) берем 4 первых точки
б) оставляем первую и последнюю, добавляем две
в) и так, пока не дойдем до последней
4) Если вершин нечетное число и больше трех:
а) Если есть хоть одна дополнительная вершина внутри многоугольника,
то добавляем еще одну любую точку так, что внутри треугольника, состоящего из двух вершин многоугольника и этой точки нет других точек
Т.о. получили четное число вершин. Разбиваем на четырехугольники, начиная с этой добавленной, как в пункте 3)
б) Если внутри нет точек и вершин больше 5, то разбиваем аналогично 3), только для последнего четырехугольника оставляем от предпоследнего только одну точку, а не две последний будет иметь только одну общую точку)
в) Если у нас ровно 5 точек в вершинах пятиугольника, то добавляем любую точку, получаем шестиугольник, применяем 3)
5) Если три вершины, то добавляем одну дополнительную точку так, чтобы получился четырехугольник
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа