![]() |
|
|
![]()
|
|
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
Привет. Такая задача.
Есть 2d контур с самопересечениями, заданный отрезками и дугами. Необходимо удалить имеющиеся самопересечения, то оставить только внешние линии контура. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ищешь все точки самопересечения. Добавляешь их как вершины контура, если они не являются вершинами, деля при этом включающие их примитивы на пары. После чего перестраиваешь порядок обхода, следя за тем, чтобы в каждой точке пересечения выполнялся поворот в одну и ту же сторону.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
То есть надо сделать граф. А как программно поворачивать в одну и ту же сторону?
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Eujk между двумя векторами (0...2*пи) посчитать можешь? дальше двигаться по ребру с минимальным углом -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
Полагаю, чтобы посчитать угол надо найти пересечение перпендикуляра из концевой точки одного вектора с другим вектором. Или есть способ проще?
|
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Кстати, эта задача - классическая, и называется она "нахождение внешней грани плоского графа"
P.S. в принципе могу выложить код на C++, есть уже написанный и проверенный на олимпиадных задачах |
|||
|
||||
| makartetsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.1.2008 Репутация: нет Всего: нет |
maxdiver, выкладывай.
|
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Входные данные
Целое n (1 <= n <= 100) -- количество вершин в многоугольнике. Затем координаты вершин. Все его вершины различны. Никакие две подряд идущие стороны не лежат на одной прямой. Все стороны имеют положительную длину. Выходные данные Выводит в первую строку количество отрезков в обходе внешней грани. Далее выводит все вершины внешней грани в искомом порядке. Искомая ломаная не имеет самопересечений (хотя может иметь самокасания). Все стороны имеют положительную длину. Никакие две подряд идущие стороны не лежат на одной прямой. При обходе границы, внутренность всегда находится по левую сторону.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |