реклама на сайте
подробности

 
 
> Вопрос по алгоритму определения границы кривой, Возник сложный вопрос и нигде не могу найти ответ!
Prinz
сообщение Mar 20 2009, 09:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 11-09-08
Пользователь №: 40 121



Добрый день!
Помоги пожалуйста, или хотя бы посоветуйте!
Мне стоит задача придумать алгоритм, с помощью которого можно определить только внешнюю границу любой кривой линии, любой любой, и только внешнюю. Внутрь заходить не должны.
В наличии только координыты точек исходной кривой!
Я сам придумал с нуля четыре алгаритма, все по своему хороши, но меняется какое-то уовие и они подвисают.
Посоветуйте что-нибудь, хотя бы где почитать.
Буду рад любому ответу!
Заранее спасибо!
smile.gif


Замечание модератора. Заголовок темы следует давать осмысленный, как того требует п.2.1в Правил форума. Отредактировал.
rezident.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Artem_Petrik
сообщение Mar 22 2009, 10:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



По моему, то, что у вас точки соединены линиями всех только запутывает.
На мой взгляд задачу следовало бы сформулировать так: Имеется множество точек на плоскости, необходимо
построить замкнутую ломаную таким образом, чтобы ни одна из точек не осталась за границей области, очерченной этой ломаной. Ломаная при этом будет соединять некоторые, но не все, имеющиеся точки. Потом уже, при необходимости от полученной кривой можно бдет сделать отступ, чтоб был запас, как на приведенных рисунках.
Простейший способ решения здесь уже указывался, про треугольники, надо только брать треугольники не только из близлежащих точек, а вообще из всех возможных комбинаций из трех точек.
Т. е. берем три точки, проверяем, находится ли какая-либо точка внутри полученного треугольника, и, если находится - исключаем ее из множества точек, по которым будет проведена граница. Перебираем таким образом все возможные треугольники. В результате у нас останутся только те точки, по которым нужно провести границу. Соединяем их ломаной (каждую точку с двумя ближайшими) и получаем то, что, как я понимаю, требовалось найти.
Решение довольно громоздкое, и если результат работы алгоритма будет давать удовлетворяющие вас результаты, то можно будет думать, как его упростить.

З.Ы. Придумал еще алгоритм smile.gif. Соединить имеющиеся точки все со всеми, а потом исключить все линии, которые пересекаются. Останется только внешний контур.
Go to the top of the page
 
+Quote Post
Prinz
сообщение Mar 22 2009, 13:52
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 184
Регистрация: 11-09-08
Пользователь №: 40 121



Цитата(Artem_Petrik @ Mar 22 2009, 15:36) *
По моему, то, что у вас точки соединены линиями всех только запутывает.
На мой взгляд задачу следовало бы сформулировать так: Имеется множество точек на плоскости, необходимо
построить замкнутую ломаную таким образом, чтобы ни одна из точек не осталась за границей области, очерченной этой ломаной. Ломаная при этом будет соединять некоторые, но не все, имеющиеся точки. Потом уже, при необходимости от полученной кривой можно бдет сделать отступ, чтоб был запас, как на приведенных рисунках.

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

Цитата(Палыч @ Mar 22 2009, 16:02) *
Нужно уменьшить число точек кривой - заменить другой ломаной с меньшим числом отрезков? И при этом, чтобы трек не "уходил" от исходного более чем на Х метров? Элементарная задачаю. По-моему: математика - первый (может быть - второй) семестр института. Наверное, это и есть основная задача. При чём тут границы - мне не понятно.

Тут впринципе если Ваш метод получится реализовать, то на некотороном удалении построить легко.

Мне надо как бы очертить зону где находится этот трек.
Для этого я думаю, что надо сначало найти границу.
Вы дали наиболее правильную трактовку задачи.
Но я ещё раз попробую написать:
Есть файл.
В нём координаты точек, по мери их поступления.
Первая точка соединяется со второй и т.д.
И т.д.
Могут возникать пересечения.
Первый рисунок не удачен, но последующии наиболее точно показывает смысл задачи!

Цитата(Goodefine @ Mar 22 2009, 16:36) *
Качественное определение "очень редко" имеет выражение в количественном представлении? Если да, то почему бы в нужных случаях не применить интерполяцию, дополнив прямую нужными точками?..

В ряде случаев это делать не надо.
А если дополнять, то дополнять придётся по всему треку!
Конечно это облегчит задачу.

Цитата(Палыч @ Mar 22 2009, 16:02) *
Чуть выше автор говорил о фильтрации точек.

Я про фильтрацию имел ввиду, отфильтровать внутренни точки, тоесть оставить лишь одну линии - внешнюю!
Оставить только внешнии отрезки.

Ещё раз попобую задачу объяснить:
- точка
- следующая
- между ними трек
- и т.д.
- таким образом апроксимируется кривая , которая может изгибаться, как хочет, как например на моём первом рисунке.
- Нам надо построить нашу кривую, которая будет определять границу зоны, где находится наша петляющая кривая!
- Впринципе зона может быть точно по границе кривой линии (внешней)!

Спасибо ещё раз всем за подсказки.
Причина редактирования: Излишее бездумное цитирование.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 22 2009, 14:16
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Prinz @ Mar 22 2009, 16:52) *
Нет, точки поступают последовательно.
- Нам надо построить нашу кривую, которая будет определять границу зоны, где находится наша петляющая кривая!
- Впринципе зона может быть точно по границе кривой линии (внешней)!

По-моему, всё просто:

1. Соединяете ваши точки в порядке их следования отрезками, получая таким образом непрерывную кривую.
2. Двигаясь от начала кривой, при каждом попадании в точку самопересечения кривой выбираете самый правый сегмент кривой и далее двигаетесь вдоль него.
3. Если начало кривой находится внутри границы зоны, в качестве начальной точки можно выбрать любую точку на границе зоны, например точку для которой координата X (или Y) минимальна (или максимальна).
При любом выборе начальной точки направление обхода кривой должно быть "против часовой стрелки".
4. Обход завершается при попадании в точку из которой обход был начат.

Сообщение отредактировал blackfin - Mar 22 2009, 14:21
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Prinz   Вопрос по алгоритму определения границы кривой   Mar 20 2009, 09:54
- - Rst7   Кривая замкнута, как я понимаю?   Mar 20 2009, 10:11
|- - Prinz   Цитата(Rst7 @ Mar 20 2009, 15:11) Кривая ...   Mar 20 2009, 10:29
- - VladimirYU   Цитата(Prinz @ Mar 20 2009, 12:54) Мне ст...   Mar 20 2009, 10:12
- - Rst7   И что значит, определить внешнюю границу? Продемон...   Mar 20 2009, 10:14
- - Палыч   Цитата(Prinz @ Mar 20 2009, 12:54) Мне ст...   Mar 20 2009, 13:01
- - xemul   Скорее всего, более общая постановка задачи: опред...   Mar 20 2009, 14:11
- - DpInRock   Рисуем касательную в конкретной точке. Дальше поло...   Mar 20 2009, 18:10
- - Prinz   Вот, как это должно выглядить! Вчера никак не ...   Mar 21 2009, 08:27
|- - Палыч   Цитата(Prinz @ Mar 21 2009, 11:20) Вот, к...   Mar 21 2009, 08:29
- - Prinz   А кто-нибудь знаком с файлом фомата .plt для OziEx...   Mar 21 2009, 08:53
- - zzzzzzzz   Вся исследуемая площадь устанавливается, исходя из...   Mar 21 2009, 08:54
|- - Prinz   Цитата(zzzzzzzz @ Mar 21 2009, 13:54) Впр...   Mar 21 2009, 09:04
|- - zzzzzzzz   Цитата(Prinz @ Mar 21 2009, 12:02) Не над...   Mar 21 2009, 09:06
||- - Prinz   Цитата(zzzzzzzz @ Mar 21 2009, 14:06) Это...   Mar 21 2009, 09:23
||- - VladimirYU   Цитата(Prinz @ Mar 21 2009, 12:16) Я же В...   Mar 21 2009, 09:23
|||- - Prinz   Цитата(VladimirYU @ Mar 21 2009, 14:23) Р...   Mar 21 2009, 09:28
|||- - Палыч   Попробую протелепатить... Вот (возможно, неверная ...   Mar 21 2009, 09:32
|||- - Prinz   Цитата(Палыч @ Mar 21 2009, 14:32) Решени...   Mar 21 2009, 09:55
|||- - Палыч   Цитата(Prinz @ Mar 21 2009, 12:45) Спасиб...   Mar 21 2009, 10:00
||- - Ledmaster   Цитата(Prinz @ Mar 21 2009, 14:23) Там ук...   Mar 21 2009, 10:11
||- - Prinz   Цитата(Ledmaster @ Mar 21 2009, 15:11) С ...   Mar 22 2009, 10:00
||- - Палыч   Цитата(Prinz @ Mar 22 2009, 13:00) А что ...   Mar 22 2009, 11:02
|- - zzzzzzzz   Цитата(Prinz @ Mar 21 2009, 12:04) И ваш ...   Mar 22 2009, 11:46
- - Goodefine   Цитата(Prinz @ Mar 21 2009, 12:28) ...При...   Mar 22 2009, 11:36
- - Prinz   Сегодня попробовал написать алгоритм по совету. НА...   Mar 23 2009, 11:40
|- - blackfin   Цитата(Prinz @ Mar 23 2009, 14:40) Сегодн...   Mar 23 2009, 11:46
||- - Prinz   Цитата(blackfin @ Mar 23 2009, 16:46) А ч...   Mar 31 2009, 12:01
||- - Палыч   Цитата(Prinz @ Mar 31 2009, 15:01) Я Вам ...   Mar 31 2009, 14:45
|||- - Палыч   Цитата(Палыч @ Mar 31 2009, 17:45) Надеюс...   Apr 1 2009, 08:53
||- - Ledmaster   Цитата(Prinz @ Mar 31 2009, 18:01) Вот, к...   Mar 31 2009, 19:38
|- - Палыч   Цитата(Prinz @ Mar 23 2009, 14:40) А кто-...   Mar 23 2009, 11:52
|- - _Pasha   Цитата(Prinz @ Mar 23 2009, 14:40) Нисего...   Mar 23 2009, 12:22
|- - Ledmaster   Цитата(Prinz @ Mar 23 2009, 16:40) Нисего...   Mar 23 2009, 17:38
- - Prinz   Задачу решил подностью. Всё с помощью тогоже битма...   Apr 8 2009, 11:02
- - zzzzzzzz   Опять "тень на плетень" навели, - област...   Apr 8 2009, 11:34
- - Prinz   Цитата(zzzzzzzz @ Apr 8 2009, 16:34) Опят...   Apr 21 2009, 07:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01454 секунд с 7
ELECTRONIX ©2004-2016