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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Вопрос по алгоритму определения границы кривой, Возник сложный вопрос и нигде не могу найти ответ!
Палыч
сообщение Mar 23 2009, 11:52
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Prinz @ Mar 23 2009, 14:40) *
А кто-нибудь с такой задачей сталкивался?
В том то и дело, что Вашу задачу никто толком понять не может. Я так понимаю - фильтрация точек трека... Но не понимаю по какому принципу. Какой Вы применили алгоритм? Что не получается (в каком случае алгоритм не работает)?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 23 2009, 12:22
Сообщение #32


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Prinz @ Mar 23 2009, 14:40) *
Нисего не помогает.

Курите теорию R-функций. (Функции Рвачева).
Go to the top of the page
 
+Quote Post
Ledmaster
сообщение Mar 23 2009, 17:38
Сообщение #33


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

Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141



Цитата(Prinz @ Mar 23 2009, 16:40) *
Нисего не помогает. sad.gif((((((((((((((((((((((
У меня горе просто!
Есть очень кривыии линии.
Со всяки провальчиками, пычками.
ОТфильтруешь одно, третье вылазит.
Треть, четвёртое.
У меня уже прога листов на 10 получилась.
На одном работает, треий подключил, всё съехало.

То, что не решается аналитически, можно решить графически: отрисуйте треки в битмап ( достаточно бит на точку, много еста не займет), тогда задача сведется к банальной заливке области. Если начальную точку выбрать гарантированно во внешней области, как раз гарантированно зальется все, что вне.

З.Ы. чтобы не было "протеканий" во внутрь, треки нужно рисовать толстыми линиями. Как раз получится отступ, который Вы рисовали, в половину толщины линии.

Сообщение отредактировал Ledmaster - Mar 23 2009, 17:42
Go to the top of the page
 
+Quote Post
Prinz
сообщение Mar 31 2009, 12:01
Сообщение #34


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

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



Цитата(blackfin @ Mar 23 2009, 16:46) *
А что за совет? А то советов, вроде, много было..


Решение:
1. Попарно находятся пересекающиеся отрезки ломаной, и в точках пересечения разбиваются каждый на два отрезка.
2 Находим все замкнутые участки ломаной (это будут границы внутренних областей)
3. Попарно проверяются внутренние области, ограниченные этими замкнутыми участками ломаной на предмет вхождения одной области в другую; если область входит в другую, то ломаная - граница области исключается (удаляется)
4 Оставшиеся ломаные – решение

Цитата(Ledmaster @ Mar 23 2009, 22:38) *
То, что не решается аналитически, можно решить графически: отрисуйте треки в битмап ( достаточно бит на точку, много еста не займет), тогда задача сведется к банальной заливке области. Если начальную точку выбрать гарантированно во внешней области, как раз гарантированно зальется все, что вне.

З.Ы. чтобы не было "протеканий" во внутрь, треки нужно рисовать толстыми линиями. Как раз получится отступ, который Вы рисовали, в половину толщины линии.



Решил задачу аналогично вашему совету.
Сожалею, что поздно прочитал Ваш совет, а то неделю думал, голову ломал.
Работает просто всё шикарно.
Теперь буду выделять внутреннии области. biggrin.gif
Если необходимо могу моим последователям выложить код программки на билдере.
Буду аналогично внутреенни зоны вычленять.
Всем большое спасибо за советы.

Цитата(Ledmaster @ Mar 23 2009, 22:38) *
То, что не решается аналитически, можно решить графически: отрисуйте треки в битмап ( достаточно бит на точку, много еста не займет), тогда задача сведется к банальной заливке области. Если начальную точку выбрать гарантированно во внешней области, как раз гарантированно зальется все, что вне.

З.Ы. чтобы не было "протеканий" во внутрь, треки нужно рисовать толстыми линиями. Как раз получится отступ, который Вы рисовали, в половину толщины линии.



Решил задачу аналогично вашему совету.
Сожалею, что поздно прочитал Ваш совет, а то неделю думал, голову ломал.
Работает просто всё шикарно.
Теперь буду выделять внутреннии области. biggrin.gif
Если необходимо могу моим последователям выложить код программки на билдере.
Буду аналогично внутреенни зоны вычленять.
Всем большое спасибо за советы.

Цитата(_Pasha @ Mar 23 2009, 17:22) *
Курите теорию R-функций. (Функции Рвачева).


Заинтересовало очень Ваше придложение с математической точки зрения.
Слышал о них, но дела с ними никогда не имел.
А посоветуйте книжечку пожалуйста.
В моих книжках по Вышке такого нет.

Цитата(_Pasha @ Mar 23 2009, 17:22) *
Курите теорию R-функций. (Функции Рвачева).


Заинтересовало очень Ваше придложение с математической точки зрения.
Слышал о них, но дела с ними никогда не имел.
А посоветуйте книжечку пожалуйста.
В моих книжках по Вышке такого нет.

Цитата(Палыч @ Mar 23 2009, 16:52) *
В том то и дело, что Вашу задачу никто толком понять не может. Я так понимаю - фильтрация точек трека... Но не понимаю по какому принципу. Какой Вы применили алгоритм? Что не получается (в каком случае алгоритм не работает)?


Я Вам скриншёт сейчас пришлё.
Вот, как у меня это вышло, и как оно должно быть.
Красная линия - это трек. который надо обвести с определённой точностью.
Граница области, которую я строю - чёрная линия.


Это кусочек трека, обведённого моей прожкой.

Было бы интересно и математическим способом решить эту задачу.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2009, 14:45
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Prinz @ Mar 31 2009, 15:01) *
Я Вам скриншёт сейчас пришлё.
Вот, как у меня это вышло, и как оно должно быть.
Н-да... Сформулировать задачу Вы так не удосужились... Формулировка: "типа, как на рисунке" - решению задачи не поможет. Повторюсь: грамотная формулировка задачи - половина решения!
Цитата(Prinz @ Mar 31 2009, 15:01) *
Было бы интересно и математическим способом решить эту задачу.
Наверное, решение - есть. Но, вот, постановки задачи -нет. Если не принимать во внимание, что границу Вы проводите на некотором расстоянии от трека и "сглаживаете" углы границы, а провести границу по линиям трека, то задача, имхо, элементарная. Обойдите свой трек по отрезкам, в каждом узле или точке пересечения отрезков трека выбирая самый "левый" отрезок трека (т.е. обход трека "по часовой стрелке"), затем проделайте те же действия, но "против часовой стрелки". Выбор самого "левого" ("правого") отрезков осуществляйте по значению углов между последним отрезком границы и отрезками возможного продолжения обхода. Надеюсь, что как определить углы между отрезками Вы догадаетесь самостоятельно...
Go to the top of the page
 
+Quote Post
Ledmaster
сообщение Mar 31 2009, 19:38
Сообщение #36


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

Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141



Цитата(Prinz @ Mar 31 2009, 18:01) *
Вот, как у меня это вышло, и как оно должно быть.
Красная линия - это трек. который надо обвести с определённой точностью.
Граница области, которую я строю - чёрная линия.

Это кусочек трека, обведённого моей прожкой.

Забавно, как раз в левом верхнем углу этого скриншота находится мой офис! beer.gif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 1 2009, 08:53
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Палыч @ Mar 31 2009, 17:45) *
Надеюсь, что как определить углы между отрезками Вы догадаетесь самостоятельно...
Для тех, кто слаб в математике… Пусть на плоскости тремя точками заданы два отрезка АВ и ВС. Точка А не совпадает с точкой В; точка В не совпадает с точкой С. Точки заданы координатами x и y: точка А, например, имеет координаты xa и ya. Определить угол fi образованный отрезком ВС и продолжением отрезка АВ (см. рисунок).
Прикрепленное изображение

Для определения угла fi в диапазоне от минус pi до плюс pi необходимо получить синус и косинус угла.
Косинус угла можно получить, если вспомнить скалярное произведение векторов
AB * BC * Cos fi = ABx * BCx + ABy * BCy
где AB и ВС – длина соответствующего вектора (отрезка); т.е. AB = Sqrt ( (xb-xa)^2 + (yb-ya)^2)
ABx и BCx– проекции вектора (отрезка) на ось Х; т.е. ABx = xb – xa
ABy и BСy – проекции вектора (отрезка) на ось Y

Синус угла получаем из произведения векторов
AB * BC * Sin fi = ABx * BCy - ABy * BCx
Обозначения – см. выше.

По найденным синусу и косинусу определяем угол. Обычно, в языках высокого уровня для этого используют функцию atan2(Sin fi,Cos fi).
Go to the top of the page
 
+Quote Post
Prinz
сообщение Apr 8 2009, 11:02
Сообщение #38


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

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



Задачу решил подностью.
Всё с помощью тогоже битмапа.
Теперь есть и внутреении и наружнеи зоны.
И даже фильтрация излишних точек.
Получилось следующее:

Цитата(Ledmaster @ Apr 1 2009, 00:38) *
Забавно, как раз в левом верхнем углу этого скриншота находится мой офис! beer.gif


А мой тоже рядышком. biggrin.gif

Цитата(Палыч @ Apr 1 2009, 13:53) *
Для тех, кто слаб в математике… Пусть на плоскости тремя точками заданы два отрезка АВ и ВС. Точка А не совпадает с точкой В; точка В не совпадает с точкой С. Точки заданы координатами x и y: точка А, например, имеет координаты xa и ya. Определить угол fi образованный отрезком ВС и продолжением отрезка АВ (см. рисунок).

Для определения угла fi в диапазоне от минус pi до плюс pi необходимо получить синус и косинус угла.
Косинус угла можно получить, если вспомнить скалярное произведение векторов
AB * BC * Cos fi = ABx * BCx + ABy * BCy
где AB и ВС – длина соответствующего вектора (отрезка); т.е. AB = Sqrt ( (xb-xa)^2 + (yb-ya)^2)
ABx и BCx– проекции вектора (отрезка) на ось Х; т.е. ABx = xb – xa
ABy и BСy – проекции вектора (отрезка) на ось Y

Синус угла получаем из произведения векторов
AB * BC * Sin fi = ABx * BCy - ABy * BCx
Обозначения – см. выше.

По найденным синусу и косинусу определяем угол. Обычно, в языках высокого уровня для этого используют функцию atan2(Sin fi,Cos fi).



Спасибо за консультацию. С этими азами знаком. Но всё равно спасибо.

Цитата(Палыч @ Mar 31 2009, 19:45) *
Н-да... Сформулировать задачу Вы так не удосужились... Формулировка: "типа, как на рисунке" - решению задачи не поможет. Повторюсь: грамотная формулировка задачи - половина решения!
Наверное, решение - есть. Но, вот, постановки задачи -нет. Если не принимать во внимание, что границу Вы проводите на некотором расстоянии от трека и "сглаживаете" углы границы, а провести границу по линиям трека, то задача, имхо, элементарная. Обойдите свой трек по отрезкам, в каждом узле или точке пересечения отрезков трека выбирая самый "левый" отрезок трека (т.е. обход трека "по часовой стрелке"), затем проделайте те же действия, но "против часовой стрелки". Выбор самого "левого" ("правого") отрезков осуществляйте по значению углов между последним отрезком границы и отрезками возможного продолжения обхода. Надеюсь, что как определить углы между отрезками Вы догадаетесь самостоятельно...




На счёт задачи формулировки задачи я с Вами полностью согласен.
У меня не очень просто большой опыт спрашивания.
Спасибо за советы.
Буду пробовать.
Идея конечно ясна.
Ещё раз спасибо! rolleyes.gif
Прикрепленные файлы
Прикрепленный файл  screen.bmp ( 165.18 килобайт ) Кол-во скачиваний: 18
 
Go to the top of the page
 
+Quote Post
zzzzzzzz
сообщение Apr 8 2009, 11:34
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 724
Регистрация: 1-05-05
Из: Нью Крыжопыль
Пользователь №: 4 641



Опять "тень на плетень" навели, - область внутри петли у вас не выбрана оказалась. Незачет. biggrin.gif
"Битмап", как вы изволили выразится, это матрично-сеточное решение.
Хотя, жить вам...
Go to the top of the page
 
+Quote Post
Prinz
сообщение Apr 21 2009, 07:32
Сообщение #40


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

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



Цитата(zzzzzzzz @ Apr 8 2009, 16:34) *
Опять "тень на плетень" навели, - область внутри петли у вас не выбрана оказалась. Незачет. biggrin.gif
"Битмап", как вы изволили выразится, это матрично-сеточное решение.
Хотя, жить вам...


Где что не выбрано???
На последнем моём прикрёплённом файлике внутреннии зоны рисуются.
И впринципе в моём алгоритме можно задать сначала, какой должна быть площадь внутренних зон, чтобы её выбирать.
Получилось просто всё очень удобно.
Ещё подключил алгоритмик, чтобы убрать лишнюю избыточность точек.
На некоторых кривых по 1000 точек достаточно всего 100 моих.

Ещё раз всем большое спасибо за советы.

Могу подробно описать, как делал.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:24
Рейтинг@Mail.ru


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