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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2013, 02:49   #1
Natizk
 
Регистрация: 21.04.2013
Сообщений: 7
По умолчанию Как преобразовать нарисованную кривую в формулу

Необходимо из нарисованной кривой (в двумерной системе координат) получить формулу (с коэффициентами полинома) описывающую данную кривую. Необходимо определиться с методом интерполяции. И как будет выглядеть алгоритм данной программы? кто знает - отпишитесь плиз.
icq 404247279
Natizk вне форума Ответить с цитированием
Старый 21.04.2013, 08:35   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

В общем случае (т.е. как написано в заголовке) задача неразрешима.
Если же нам заранее известен вид кривой (например, полином конкретной степени), то задача сводится лишь к подбору коэффициентов.
Коэффициенты обычно подбирают, используя МНК.

Да, с "нарисованной кривой" в любом случае ничего сделать нельзя - ее нужно преобразовать в последовательность точек.
s-andriano вне форума Ответить с цитированием
Старый 21.04.2013, 11:03   #3
Natizk
 
Регистрация: 21.04.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
В общем случае (т.е. как написано в заголовке) задача неразрешима.
Если же нам заранее известен вид кривой (например, полином конкретной степени), то задача сводится лишь к подбору коэффициентов.
Коэффициенты обычно подбирают, используя МНК.

Да, с "нарисованной кривой" в любом случае ничего сделать нельзя - ее нужно преобразовать в последовательность точек.
Спасибо что откликнулся!
Рисовать кривую надо в той же программе с помощью "мышки" и точек. Т.е. мне надо и рисовалку сделать (изначально прямая, из которой "мышкой" вытягиваю нужную мне кривую). Ограничение "x" в 20сек и частота дискретизации регулируется до 100гц.
Значит надо через равные промежутки времени брать значение "y" из кривой с помощью одного из методов интерполяции. Получится последовательность точек, которую с учетом разных степеней полиномов, необходимо представить формулой с коэффициентами полинома.
Как это реализовать в delphi?

Последний раз редактировалось Natizk; 21.04.2013 в 12:38.
Natizk вне форума Ответить с цитированием
Старый 21.04.2013, 14:14   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

В первом сообщении ничего похожего на "x" в 20сек и частота дискретизации не было.
Поэтому я не могу понять, о чем вообще идет речь.
Сформулируйте задачу полностью.
s-andriano вне форума Ответить с цитированием
Старый 21.04.2013, 15:03   #5
Natizk
 
Регистрация: 21.04.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Сформулируйте задачу полностью.
Входными данными является нарисованная пользователем кривая в делфи, в двумерной системе координат (X, Y). Ось X - время, не превышает 20 сек. Ось Y не превышает 2047 единиц. Далее пользователь вносит частоту дискретизации Fд<100Гц. Программа должна уметь сохранять параметры (рассчитанные коэффициенты полинома, описывающие нашу кривую, частота дискретизации...) в файл и считывать параметры из файла для повторного использования этой же кривой и ее редактирования.

Последний раз редактировалось Natizk; 21.04.2013 в 15:37.
Natizk вне форума Ответить с цитированием
Старый 21.04.2013, 16:00   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Natizk Посмотреть сообщение
Входными данными является нарисованная пользователем кривая в делфи, в двумерной системе координат (X, Y).
Что в Вашем понимании ""нарисованная пользователем кривая?
В каком виде она представлена в компьютере?
Цитата:
Ось X - время, не превышает 20 сек. Ось Y не превышает 2047 единиц.
Т.е. по оси X непрерывная шкала, а по оси Y - дискретная?
Цитата:
Далее пользователь вносит частоту дискретизации Fд<100Гц.
Правильно ли я понимаю, что Вы хотите сказать:
"По оси X тоже дискретная шкала с шагом 10мс?
И, таким образом, общее количество отсчетов по X составляет 2000."
?
Цитата:
Программа должна уметь сохранять параметры (рассчитанные коэффициенты полинома, описывающие нашу кривую,
Откуда взялся полином?
Цитата:
частота дискретизации...) в файл и считывать параметры из файла для повторного использования этой же кривой и ее редактирования.
Ну, т.е. нужно составить список переменных, полностью описывающих состояние и уметь их считывать/записывать из/в файл?
Если это так, то чем не устраивает просто записать в файл 2000 чисел, описывающих кривую во всех точках?

Или я чего-то не понял?
s-andriano вне форума Ответить с цитированием
Старый 21.04.2013, 16:43   #7
Natizk
 
Регистрация: 21.04.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
"нарисованная пользователем кривая"?
Изначально прямая, которую мы делаем кривой с помощью "мышки", т.е. вытягиваем "мышкой" точки в нужные нам позиции. Кривая должна быть сглаженная.

Цитата:
Сообщение от s-andriano Посмотреть сообщение
В каком виде она представлена в компьютере?
Это не рисунок. Я должен представить в уме кривую и с помощью "мышки" и делфи - нарисовать.

Цитата:
Сообщение от s-andriano Посмотреть сообщение
По оси X тоже дискретная шкала с шагом 10мс?
И, таким образом, общее количество отсчетов по X составляет 2000.
?
Правильно. X и Y - дискретная. X составляет 2000. Ось Y не превышает 2047 единиц.

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Откуда взялся полином?
Мне сказали с использованием полиномов и коэффициентов...

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

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Если это так, то чем не устраивает просто записать в файл 2000 чисел, описывающих кривую во всех точках?
Этот вариант интересен. Но даже его мне трудно реализовать. И я бы использовал его, но мне сказали получить рассчитанные коэффициенты полинома, описывающие кривую.

Последний раз редактировалось Natizk; 21.04.2013 в 16:51.
Natizk вне форума Ответить с цитированием
Старый 21.04.2013, 16:55   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

У меня осталось слишком много вопросов.
По порядку:
Цитата:
Сообщение от Natizk Посмотреть сообщение
Изначально прямая, которую мы делаем кривой с помощью "мышки", т.е. вытягиваем "мышкой" точки в нужные нам позиции. Кривая должна быть сглаженная.
Невозможно работать неизвестно с чем.
Нужно определиться, как представляется кривая в компьютере.
Как она выглядит на экране - уже следствие, причем, следствие, скорее всего, неадекватное. Хотя бы потому, что у нас кривая задана на дискретном поле 2000х2047, а размеры экрана меньше. Следовательно, при выводе на экран часть информации неизбежно будет потеряна.

Итак - что такое "кривая"?
Цитата:
Этот вариант интересен. Но даже его мне трудно реализовать. И я бы использовал его, но мне сказали получить рассчитанные коэффициенты полинома, описывающие кривую.
Лично мне пока непонятно, как связаны между собой те 2000 отсчетов, что имеются, с полиномами:
1. Нужно построить кусочный сплайн по 2000 точкам для обеспечения гладкого восполнения.
2. Нужно построить кусочный сплайн по гораздо меньшему числу точек, чтобы по нему можно было посчитать значение функции в любой из 2000 точек.
3. Всю совокупность имеющихся точек нам нужно описать единым полиномом заданного порядка.
4. Еще какой-то вариант, который мне с ходу не приходит в голову.

И еще один важный момент.
Вы упомянули время и частоту дискретизации. Но в данном случае, вероятно, более рационально искать представление интересующей нас кривой не в виде ряда Тейлора, а в виде ряда Фурье. По крайней мере, со звуковыми данными следует поступать именно так. Какова специфика Вашего случая - не знаю.
s-andriano вне форума Ответить с цитированием
Старый 21.04.2013, 17:02   #9
Natizk
 
Регистрация: 21.04.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
У меня осталось слишком много вопросов.
Можно с Вами иначе связаться? Может по почте?

Последний раз редактировалось Natizk; 21.04.2013 в 17:44.
Natizk вне форума Ответить с цитированием
Старый 21.04.2013, 17:30   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Natizk Посмотреть сообщение
Можно с Вами иначе связаться?
Извините, не вижу в этом смысла.
Я не пишу софт за деньги. Так что если Вы хотите, чтобы за Вас кто-то написал, - нужно размещать объявление в разделе Фриланс. Если хотите писать сами, то обсудить, как это лучше сделать, можно и здесь.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заданную логическую формулу преобразовать в эквивалентную днф sergei15 Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2012 06:21
[Си++ Билдер]Преобразовать математическую формулу в нормальный для компилятора вид mrG0bliN Помощь студентам 7 24.01.2012 19:28
как стереть нарисованную линию? Yokka Общие вопросы .NET 4 06.02.2011 19:15
Интерполяция. Как получить гладкую кривую? Blade Свободное общение 3 18.02.2010 01:49
Преобразовать формулу в макрос Viento Microsoft Office Excel 10 23.01.2009 22:35