Поиск:

Ответ в темуСоздание новой темы Создание опроса
> построение огибающей ломаной линии, построение огибающей ломаной линии 
:(
    Опции темы
olegkuzn
Дата 12.11.2014, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Пожалуйста помогите решить задачу.
1. Есть два массива A[m] и B[n] точек point(x, y). Каждый массив образует свою ломаную кривую.
2. первые точки каждого массива находится на координате x = 0. (A[1] = point(0, ya) ; B[1] = point(0, yb))
3. последние точки каждого массива  находится на координате x = l. (A[m] = point(l, ya) ; B[1] = point(l, yb))
4. координата x точки point(x, y) в массивах A и B строго по возрастанию, координата y неотрицательна

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

Пример :
Ломаная№1 : (0.0, 0.0) ; (4.0, 4.0) ; (6.0, 2.0) ; (7.0, 3.0) ; (8.0, 2.0) ;(10.0, 4.0);
Ломаная№2 : (0.0, 4.0) ; (3.0, 1.0) ; (6.5, 4.5) ; (9.0, 2.0) ; (10.0, 3.0);

"Огибающая" : (0.0, 4.0);(2.0, 2.0);(4.0, 4.0);(5.0, 3.0);(6.5, 4.5);(8.5, 2.5);(10.0, 4.0)

Есть ли какой-нибудь алгоритм решения этой задачи или хотя бы где посмотреть примерно такую же задачу.

Заранее благодарен.
PM MAIL   Вверх
Akina
Дата 12.11.2014, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Объедините массивы в один, если иксы из отдельных ломаных совпадают, берите больший игрек. Отсортируйте по иксу.
Для каждой пары "соседних иксов" выполните проверку на пересечение соотв. отрезков отдельных кривых в этом диапазоне, если пересечение имеется, причём не на границе, добавьте точку пересечения в массив.
Для каждой тройки "последовательных иксов" выполните проверку нахождения трёх точек на одной прямой, если да - выбросьте среднюю точку, повторять, пока выбрасывать станет нечего.
Задача решена.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
olegkuzn
Дата 12.11.2014, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



по-моему не отсекаются "нижние" точки в объединенном массиве.
или я что-то неправильно понял.

PM MAIL   Вверх
Akina
Дата 12.11.2014, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Да, верно. При объединении массивов следует также выкидывать те точки одной из ломаных, которые лежат ниже соотв. отрезка второй ломаной.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.