![]() |
|
|
![]()
|
|
| P111GR1M |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Здравствуйте. Подскажите алгоритм решения этой задачки или где можно почитать на тему.
На плоскости заданы n точек. Соеденить их непересекающимися отрезками таким образом,чтобы каждая область внутри выпуклой оболочки этого множества точек являлась треугольником |
|||
|
||||
| aicus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.9.2006 Репутация: нет Всего: нет |
Попробуй генетичиские алгоритмы.
т.е. сначала соединяешь точки как попало, затем проверяешь, а не пересекаются ли линии, если пересекаются соединяешь по новому. вот примерно такой цикл может помочь. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
(под "внешней точкой" множества точек будем подразумевать точку, которая отделима какой-нибудь прямой от всех остальных)
будем отсекать внешние точки по очереди: 1. находим любую внешнюю точку 2. находим все внешние точки из всех оставшихся точек области 3. из них берём одну ближайшую к первой выбраной 4. из оставшихся внешних берём ближаёшую ко второй 5. соединяем их отрезками 6. убираем первую выбранную точку из рассматриваемого множества 7. повторяем -------------------- qqq |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Поищи алгоритмы триангуляции
-------------------- ... |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Существует код, чтобы проверить полигон на самопеесечение.
Итак. Строим различные полигоны. Находим не самопересекающийся и разбиваем на треугольники. ИМХО очень просто -------------------- Всем добра |
|||
|
||||
| Mercator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 14.11.2006 Репутация: нет Всего: 2 |
Ну на самом деле не так уж и просто. Это действительно алгоритмы триангуляции и многие умные люди разработали разные умные алгоритмы, чтобы они работали с большим количеством точек и быстро. Мы выполняли такую задачу в рамках курса по машинной графике. Если еще актуально, могу поискать материалы, а вообще, конечно, лучше книжки умные почитать - не тривиальная, короче, задача. Давно же известно, что многие геометрические задачи на плоскости и в пространстве формулируются предельно просто, на на машинке реализуются далеко не с лету.
|
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Про сложность не говорим. Это легко сделать полу-брутфорсом... Строим различные полигоны, проверяем на самопересечение. Нашли? Ага! Разобъем на треугольники и все.
-------------------- Всем добра |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Зачем усложнять? Провести несамопересекающуюся линию через произвольное множество точек задача сама по себе нетривиальная. Это не тот случай, когда надо вылить воду из чайника.
Алгоритм триангуляции не настолько тривиален, чтобы изложить его здесь в двух словах. Поищи книгу (или ссылки) М. Ласло Вычислительная геометрия и компьютерная графика на C++). Там масса доступно описанных геометрических алгоритмов, в т.ч. и триангуляция Делоне. -------------------- ... |
|||
|
||||
| P111GR1M |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Решил делать так:
Нахожу выпуклый n-уголььник Беру его вершину и провожу из нее ребра в остальные точки Дальше перебираю треугольники, дроблю их. Выпуклый n-угольник нахожу так: Нахожу 4 крайние точки по y и x, строю четырехугольник. Дальше надо узнать точка лежит за линией снаружи или внутри области. Как это узнать? |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
ну вы меня удивляете. Уравнение прямой в школе проходили? Ну вот вместо равентства подставим знак "больше" или "меньше". получим уравнение полуплоскости. Затем проверим, точка в этой полуплоскости ли нет. Писать формулы не буду, ибо это надо знать и уже сто раз обсуждалось.
-------------------- Всем добра |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
1) Должны ли все ребра описывающего многоугольника принадлежать треугольникам?
2) Если 3 точки (А,В,С) лежат на одной прямой - следует ли строить так, чтобы либо были соединены только А и В либо только В и С, или допустимы одновременно оба отрезка? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
значит (с точки зрения программирования), нам даны их координаты Берем первую точку (к примеру, с меньшими координатами). По координатам вычисляем к ней две ближайших. Соединяем. От второй точки также, от третьей... С каждым циклом, их число возрастает, ведь мы строим от каждой вершины. Движемся по нарастанию кординат, значит, те точки, которые уже прошли, возвращаться не будут... (дальше мысль пока ко мне не пришла) -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |