Помощь - Поиск - Пользователи - Календарь
Полная версия: построить треугольники
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
olka
Помогите написать программку, пожалуйста smile.gif

Дано 3n точек на плоскости , причем никакие3 из них не лежат на одной прямой, построитьмножество n треугольников с вершинами в этих точках так, чтобы никакие 2 из них не пересекались и не содержали друг друга.
Lapp
Цитата(olka @ 21.02.2006 21:09) *

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

Olka, есть вопросы к тебе:
1. Есть какой-нибудь алгоритм или его изобретение входит в задачу?
2. Если входит, то примерно какой он должен быть: перебор, итерации, просто четкое математическое решение - или это все равно?
3. Если входит, то достаточно ли будет привести сам алгоритм или помочь тебе с написанием программы?
Lapp
Есть, например, такой простой алгоритм..
Положим, что точки заданы декартовыми координатами (если другими - переводим в декартову систему). Рассмотрим одну из координат - скажем, X. Понятно, что никакие три точки не имеют одну и ту же координату Х, иначе они лежали бы на одной прямой. Располагаем точки в порядке возрастания координаты Х. Если две точки имеют одинаковую координату Х, их порядок между собой (внутри пары) не важен. Далее, полученный ряд точек разбиваем на тройки. Каждая такая тройка - это вершины треугольника. Эти треугольники не пересекаются и не содержат друг друга (это практически очевидно).

Написать прогу по этому алгоритму несложно. Сможешь?
Altair
Типичная задача триангуляции.
Триангуляция области, представленной набором точек.
Lapp
Цитата(Altair @ 23.02.2006 12:46) *

Триангуляция области, представленной набором точек.

Верно, но там добавлено еще одно условие, которое тут отсутствует. Соответственно, алгоритм значительно сложнее (просто несравнимо - этот уложится в пару строк, а тот - с полсотни строк со сложной логикой).
Но, похоже, автор этого вопроса забыла о нем, так что наш с тобой разговор все равно вряд ли найдет применение.. smile.gif
Altair
нет там никакого условия еще одного. задача точно задача триангуляции...
содержать треугольники себя никогда не будут, и они не пересекаются.
Lapp
Цитата(Altair @ 23.02.2006 13:13) *

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

странно.. мой монитор упорно показывает что-то другое.. smile.gif)

Цитата

Процедура осуществляет разбиение области на треугольники, при этом разбиение области удовлетворяет двум условиям:

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



Я имел в виду, что в твоей ссылке есть дополнительное условие.
Altair
Цитата
Я имел в виду, что в твоей ссылке есть дополнительное условие.

какое ????
Altair
я понял в чем мы разошлись. Я по умолчанию полагал, что необходимо построить все возможные треугольники...
Если нет, то алгоритм lapp'a подходит...Нажмите для просмотра прикрепленного файла
Lapp
Цитата(Altair @ 23.02.2006 13:44) *

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

Да, триангуляция подразумевает полное покрытие области треугольниками. Здесь же четко сказано, что треугольников должно быть ровно n. Так что алгоритм со ссылки не подходит, увы, совсем.
Интересно было бы попробовать переделать мой алгоритм в полную триангуляцию (но без условия на кратчайшую диагональ!).. Или просто придумать более простой алгоритм. Надо подумать..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.