Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 22:53   #1
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию Алгоритм подсчета числа вершин синусоиды?


Вот например у меня есть такой график, подскажите хотя бы названия алгоритмов с помощью которых можно привести его к сглаженному виду(если надо для подсчета вершин) А также отфильтровать мини возвышенности, а учесть только крупные вершины? Заранее благодарен.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 07.06.2009, 13:18   #2
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Есть хотя бы какие-нибудь советы или предположения?
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 07.06.2009, 13:49   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Если у тебя только рисунок то по цвету. Т.е. проходи по верхнему ряду пикселей и ищем точки графика. (предпологается, что мы знаем его цвет). Затем по следующему ряду. и так далее. Если встречаем точку, значит она вершина, при условии, что ее координата (x,y) а точка с координатами (x,y-1) не является точкой грачика (не забываем, о том, что ось OY направленна вниз, а не вверх!). (или наоборот, (x,y+1) если это точка находится внизу).
Убедились, что это вершина? запомминаем ее коордианту. (Думаю,ч то важна будет только коордианата по y).

Как только прошли весь график, сверху донизу, смотрим полученнные результаты. Вычисляем среднее значение. Все вершины, которые сильно (насколько сильно, решать вам) отличаются от среднего значения отбрасываем.

Подсчитываем кол-во неотброшенных вершин.


P.S.

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

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 07.06.2009, 14:23   #4
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

ROD, нет у меня не рисунок, а точки то есть значения x и y а по этим данным построен рисунок. Я думал считать? что вершина это переход с возрастания на убывания, а впадина наоборот, только вот как убрать весь этот шум с рисунка, то есть не нужные мини вершины? Видимо надо интерполировать то есть все эти зазубринки убрать с помощью проведения средней линии, но как это сделать? Для идеальных вершин алгорим считает нормально, также нормально если при рассчете установить макс амлитуду шума и считать расстояние от вершины до впадины и если оно меньше чем у шума, то не считать как вершину. Но опять же пользователь должен вмешаться, а это не есть хорошо - надо полностью автоматизировать.
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 07.06.2009, 15:32   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

А что вы подразумеваете под ненужными минивершинами? маленькие перепады высоты на верху графика? Если да, то можно попробовать определить на какой области (от x0, до x1) эти вершинки находятся. И усреднить их высоту. А затем смотреть как ведет себя функция в окрестности этой области. Т.е. если при любом x<x0 y<y0 и при любом x>x1 y<y1, то это максимум, если ровно наоборот, то мимнимум.

Вобщем надо определить область, которую можно считать как вершину. и значение функции в ней считать равным среднему значению всех "шумов"

Правда судя по графику, там помимо вершин, есть просто точки экстремума.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 07.06.2009, 15:59   #6
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Да я понимаю под ними маленьки перепады. Но как определить на каком участке они находятся? Ведь они могут быть в любом месте абсолютно.

Это, например переход на первую нижнюю вершину(то есть впадину)
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 07.06.2009, 18:22   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

хм... ну думаю, что их надо сравнить с другими перепадами. Скажем, если у вас точки (0,1)(1,4)(2,3.5)(3,3)(4,1), то весьма вероятно, что точка (2,3.5) и енсть маленький перепадик, т.к. она не сильно отличается от окружающих ее вершин.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 07.06.2009, 18:28   #8
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Можно и так, но это ведь не даст 100% результат исключения ошибки? Вот все таки склоняюсь к режиму интерполяции, чтобы эти маленьки перепадики вообще убрать, но не знаю каким методом лучше интерполировать, насколько это быстро и где бы найти алгоритмы интерполяции.Одно дело когда есть микровершиныотносительно оси графика, но другое, когда эти микровершины на самой возвышенности и вот их мне не удается вычислить точно.(((
Страх это слабость и потому, кто испугался уже побежден.
Mixasik вне форума Ответить с цитированием
Старый 07.06.2009, 18:39   #9
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вот гугл выдал сайт с алгоритмами интерполяций на разных языках http://alglib.sources.ru/interpolation/

А если попробовать так сгладить график:
Берем 3 соседние вершины. если средняя больше или равна левой, но меньше или равна правой, при условии, что |x1-x2|<E1 |x2-x3|<E1; (где E1 - некторое максимальное расстояние между двумя рассматриваемыми вершинами) и что бы |y1-y2|<E2 и |y2-y3|<E2, где E2 - максимальный "скачек" который мы будем сглаживать.

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

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 07.06.2009 в 18:44.
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура подсчета суммы heavenly Общие вопросы по Java, Java SE, Kotlin 2 17.05.2010 21:09
составить программу подсчета числа элементов одномерного массива, превосходящих СРЕДНЕЕ ГЕОМЕТРИЧЕСКОЕ Fatality Помощь студентам 4 05.02.2009 07:53
Алгоритм перевода числа в hex text. Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 02.12.2008 21:36
Алгоритм перевода двоичного числа в десятичное и обратно strab Общие вопросы Delphi 5 17.06.2008 21:33
Помогите с заданием подсчета! werser Microsoft Office Excel 6 08.12.2007 18:58