Палыч 10 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба А кто-нибудь с такой задачей сталкивался?В том то и дело, что Вашу задачу никто толком понять не может. Я так понимаю - фильтрация точек трека... Но не понимаю по какому принципу. Какой Вы применили алгоритм? Что не получается (в каком случае алгоритм не работает)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба Нисего не помогает. Курите теорию R-функций. (Функции Рвачева). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 23 марта, 2009 Опубликовано 23 марта, 2009 (изменено) · Жалоба Нисего не помогает. :((((((((((((((((((((((( У меня горе просто! Есть очень кривыии линии. Со всяки провальчиками, пычками. ОТфильтруешь одно, третье вылазит. Треть, четвёртое. У меня уже прога листов на 10 получилась. На одном работает, треий подключил, всё съехало. То, что не решается аналитически, можно решить графически: отрисуйте треки в битмап ( достаточно бит на точку, много еста не займет), тогда задача сведется к банальной заливке области. Если начальную точку выбрать гарантированно во внешней области, как раз гарантированно зальется все, что вне. З.Ы. чтобы не было "протеканий" во внутрь, треки нужно рисовать толстыми линиями. Как раз получится отступ, который Вы рисовали, в половину толщины линии. Изменено 23 марта, 2009 пользователем Ledmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zigrund 0 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба А что за совет? А то советов, вроде, много было.. Решение: 1. Попарно находятся пересекающиеся отрезки ломаной, и в точках пересечения разбиваются каждый на два отрезка. 2 Находим все замкнутые участки ломаной (это будут границы внутренних областей) 3. Попарно проверяются внутренние области, ограниченные этими замкнутыми участками ломаной на предмет вхождения одной области в другую; если область входит в другую, то ломаная - граница области исключается (удаляется) 4 Оставшиеся ломаные – решение То, что не решается аналитически, можно решить графически: отрисуйте треки в битмап ( достаточно бит на точку, много еста не займет), тогда задача сведется к банальной заливке области. Если начальную точку выбрать гарантированно во внешней области, как раз гарантированно зальется все, что вне. З.Ы. чтобы не было "протеканий" во внутрь, треки нужно рисовать толстыми линиями. Как раз получится отступ, который Вы рисовали, в половину толщины линии. Решил задачу аналогично вашему совету. Сожалею, что поздно прочитал Ваш совет, а то неделю думал, голову ломал. Работает просто всё шикарно. Теперь буду выделять внутреннии области. Если необходимо могу моим последователям выложить код программки на билдере. Буду аналогично внутреенни зоны вычленять. Всем большое спасибо за советы. То, что не решается аналитически, можно решить графически: отрисуйте треки в битмап ( достаточно бит на точку, много еста не займет), тогда задача сведется к банальной заливке области. Если начальную точку выбрать гарантированно во внешней области, как раз гарантированно зальется все, что вне. З.Ы. чтобы не было "протеканий" во внутрь, треки нужно рисовать толстыми линиями. Как раз получится отступ, который Вы рисовали, в половину толщины линии. Решил задачу аналогично вашему совету. Сожалею, что поздно прочитал Ваш совет, а то неделю думал, голову ломал. Работает просто всё шикарно. Теперь буду выделять внутреннии области. Если необходимо могу моим последователям выложить код программки на билдере. Буду аналогично внутреенни зоны вычленять. Всем большое спасибо за советы. Курите теорию R-функций. (Функции Рвачева). Заинтересовало очень Ваше придложение с математической точки зрения. Слышал о них, но дела с ними никогда не имел. А посоветуйте книжечку пожалуйста. В моих книжках по Вышке такого нет. Курите теорию R-функций. (Функции Рвачева). Заинтересовало очень Ваше придложение с математической точки зрения. Слышал о них, но дела с ними никогда не имел. А посоветуйте книжечку пожалуйста. В моих книжках по Вышке такого нет. В том то и дело, что Вашу задачу никто толком понять не может. Я так понимаю - фильтрация точек трека... Но не понимаю по какому принципу. Какой Вы применили алгоритм? Что не получается (в каком случае алгоритм не работает)? Я Вам скриншёт сейчас пришлё. Вот, как у меня это вышло, и как оно должно быть. Красная линия - это трек. который надо обвести с определённой точностью. Граница области, которую я строю - чёрная линия. Это кусочек трека, обведённого моей прожкой. Было бы интересно и математическим способом решить эту задачу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба Я Вам скриншёт сейчас пришлё. Вот, как у меня это вышло, и как оно должно быть. Н-да... Сформулировать задачу Вы так не удосужились... Формулировка: "типа, как на рисунке" - решению задачи не поможет. Повторюсь: грамотная формулировка задачи - половина решения! Было бы интересно и математическим способом решить эту задачу.Наверное, решение - есть. Но, вот, постановки задачи -нет. Если не принимать во внимание, что границу Вы проводите на некотором расстоянии от трека и "сглаживаете" углы границы, а провести границу по линиям трека, то задача, имхо, элементарная. Обойдите свой трек по отрезкам, в каждом узле или точке пересечения отрезков трека выбирая самый "левый" отрезок трека (т.е. обход трека "по часовой стрелке"), затем проделайте те же действия, но "против часовой стрелки". Выбор самого "левого" ("правого") отрезков осуществляйте по значению углов между последним отрезком границы и отрезками возможного продолжения обхода. Надеюсь, что как определить углы между отрезками Вы догадаетесь самостоятельно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба Вот, как у меня это вышло, и как оно должно быть. Красная линия - это трек. который надо обвести с определённой точностью. Граница области, которую я строю - чёрная линия. Это кусочек трека, обведённого моей прожкой. Забавно, как раз в левом верхнем углу этого скриншота находится мой офис! :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 1 апреля, 2009 Опубликовано 1 апреля, 2009 · Жалоба Надеюсь, что как определить углы между отрезками Вы догадаетесь самостоятельно... Для тех, кто слаб в математике… Пусть на плоскости тремя точками заданы два отрезка АВ и ВС. Точка А не совпадает с точкой В; точка В не совпадает с точкой С. Точки заданы координатами 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zigrund 0 8 апреля, 2009 Опубликовано 8 апреля, 2009 · Жалоба Задачу решил подностью. Всё с помощью тогоже битмапа. Теперь есть и внутреении и наружнеи зоны. И даже фильтрация излишних точек. Получилось следующее: Забавно, как раз в левом верхнем углу этого скриншота находится мой офис! :beer: А мой тоже рядышком. Для тех, кто слаб в математике… Пусть на плоскости тремя точками заданы два отрезка АВ и ВС. Точка А не совпадает с точкой В; точка В не совпадает с точкой С. Точки заданы координатами 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). Спасибо за консультацию. С этими азами знаком. Но всё равно спасибо. Н-да... Сформулировать задачу Вы так не удосужились... Формулировка: "типа, как на рисунке" - решению задачи не поможет. Повторюсь: грамотная формулировка задачи - половина решения! Наверное, решение - есть. Но, вот, постановки задачи -нет. Если не принимать во внимание, что границу Вы проводите на некотором расстоянии от трека и "сглаживаете" углы границы, а провести границу по линиям трека, то задача, имхо, элементарная. Обойдите свой трек по отрезкам, в каждом узле или точке пересечения отрезков трека выбирая самый "левый" отрезок трека (т.е. обход трека "по часовой стрелке"), затем проделайте те же действия, но "против часовой стрелки". Выбор самого "левого" ("правого") отрезков осуществляйте по значению углов между последним отрезком границы и отрезками возможного продолжения обхода. Надеюсь, что как определить углы между отрезками Вы догадаетесь самостоятельно... На счёт задачи формулировки задачи я с Вами полностью согласен. У меня не очень просто большой опыт спрашивания. Спасибо за советы. Буду пробовать. Идея конечно ясна. Ещё раз спасибо! :rolleyes: screen.bmp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zzzzzzzz 0 8 апреля, 2009 Опубликовано 8 апреля, 2009 · Жалоба Опять "тень на плетень" навели, - область внутри петли у вас не выбрана оказалась. Незачет. "Битмап", как вы изволили выразится, это матрично-сеточное решение. Хотя, жить вам... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zigrund 0 21 апреля, 2009 Опубликовано 21 апреля, 2009 · Жалоба Опять "тень на плетень" навели, - область внутри петли у вас не выбрана оказалась. Незачет. "Битмап", как вы изволили выразится, это матрично-сеточное решение. Хотя, жить вам... Где что не выбрано??? На последнем моём прикрёплённом файлике внутреннии зоны рисуются. И впринципе в моём алгоритме можно задать сначала, какой должна быть площадь внутренних зон, чтобы её выбирать. Получилось просто всё очень удобно. Ещё подключил алгоритмик, чтобы убрать лишнюю избыточность точек. На некоторых кривых по 1000 точек достаточно всего 100 моих. Ещё раз всем большое спасибо за советы. Могу подробно описать, как делал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться