Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм апроксимации

989
26 августа 2003 года
Vlad232ua
182 / / 02.04.2003
Ув. коллеги. Есть такой вопросик. Цикл опроса конт-ра 5 сек (отсюда - 4-ре пиксели свободных). На основе данных формирую (обновляю, смещаю) графики. Все хорошо, но хотелось бы иметь не ломаные линии, а что-то похожее на синусоиды. Никто не встречал алгоритма апроксимации по трем точкам применительно к графикам.
(нужен именно алгоритм, стандартные или дополнительные компоненты не прокатят, не вложусь по скорости).
Сразу отвечаю, насчет самому наваять - не влом, но со временем напряги:(
460
26 августа 2003 года
Berg
261 / / 27.03.2003
Это

http://algolist.manual.ru/maths/approx.php

не покатит?
989
26 августа 2003 года
Vlad232ua
182 / / 02.04.2003
Цитата:
Originally posted by Berg
Это

http://algolist.manual.ru/maths/approx.php

не покатит?


Мда... Надо разбираться. Но побыстрому не получиться, это я уже понял. Сенк.

596
26 августа 2003 года
sinyk
58 / / 07.07.2003
В принципе задачу можно свести би квадратным уравнениям (то есть для апроксимации использовать обычную параболу) . Сначала находишь точки лежащие посередине отрезков соединяющих каждые близлежащие две точки.(точка1-т..2 = т..12)
Потом составляешь уравнения парабол для точек :
т..12 - т..2 - т..23, т..23 - т..3 - т..34 и тд.
Таким образом ты получиш набор функций для различных учасков графика...
596
26 августа 2003 года
sinyk
58 / / 07.07.2003
Цитата:
Originally posted by sinyk
В принципе задачу можно свести би квадратным уравнениям (то есть для апроксимации использовать обычную параболу) . Сначала находишь точки лежащие посередине отрезков соединяющих каждые близлежащие две точки.(точка1-т..2 = т..12)
Потом составляешь уравнения парабол для точек :
т..12 - т..2 - т..23, т..23 - т..3 - т..34 и тд.
Таким образом ты получиш набор функций для различных учасков графика...




Промахнулся...:) Точки т12,т23 и тд. надо подбирать по принципу равенства производной , а то лажа получается

460
26 августа 2003 года
Berg
261 / / 27.03.2003
Vlad232ua:
Наверное, оптимально будет сделать так, как предложил sinyk, т.к. через 3 точки все равно ничего "гладче" параболы не проведешь...:-)
Тем более, что у вас там "зазоры" в штуках пикселей < 5 как я понял меряются...

P.S. В общем нет смысла, кажись, с серьезной аппроксимацией завязываться.
358
26 августа 2003 года
moonmike
423 / / 18.10.2002
Use PolyBezier to draw cubic Bezier curves using the endpoints and control points specified by the Points parameter. The first curve is drawn from the first point to the fourth point, using the second and third points as control points. Each subsequent curve in the sequence needs exactly three more points: the ending point of the previous curve is used as the starting point, the next two points in the sequence are control points, and the third is the ending point.

The Points parameter gives the endpoints to use when generating the BЁ¦zier curves.

The Points_Size parameter is the index of the last point in the array (one less than the total number of points).

This procedure draws lines by using the current pen.

Control points after a[Index+3] are ignored. Nothing happens if there aren't enough control points.
358
26 августа 2003 года
moonmike
423 / / 18.10.2002
Смешно у меня предыдуший пост получился=)))
В общем если на TCanvas рисешь то смотри в сторону:
TCanvas::PolyBezier
TCanvas::PolyBezierTo
989
27 августа 2003 года
Vlad232ua
182 / / 02.04.2003
"Посмотрел во все стороны":)
В результате (если выкинуть шелуху по пересчетам координат при из.размеров)получается
 
Код:
for(i=0; i<N-1; i++)
         { points[0] = Point(A_Points.X,A_Points.Y));
           points[1] = Point(A_Points.X+6,A_Points.Y));
           points[2] = Point(A_Points[i+1].X-6,A_Points[i+1].Y);
           points[3] = Point(A_Points[i+1].X,A_Points[i+1].Y);
           PaintBox1->Canvas->PolyBezier(points, 3);
         }

причем [0] и [3] - это реальные значения а [1] и [2]в реалиях нет - для растяжки. По X смещение для моего 4-ех пиксельного промежутка + и -6.
Y вообще не трогаю. График просто песТня. Так что PolyBezier - то, что доктор прописал. Всем спасибо.
4
28 августа 2003 года
mike
3.7K / / 01.10.2002
Самый просто способ:

каждую секунду ставим данные полученный последний раз, тогда получается:

 
Код:
4 4 4 4 4 8 8 8 8 8 7 7 7 7 7 5 5 5 5 5


после чего каждое число заменяется на среднее арифметическое его, двух соседей справа и двух слева :)

радиус можно регулировать. Нет ничего проще

 
Код:
b=(a[i-2]+a[i-1]+a+a[i+1]+a[i+2])/5;
989
01 сентября 2003 года
Vlad232ua
182 / / 02.04.2003
Цитата:
Originally posted by mike
Самый просто способ:

каждую секунду ставим данные полученный последний раз, тогда получается:

 
Код:
4 4 4 4 4 8 8 8 8 8 7 7 7 7 7 5 5 5 5 5


после чего каждое число заменяется на среднее арифметическое его, двух соседей справа и двух слева :)

радиус можно регулировать. Нет ничего проще

 
Код:
b=(a[i-2]+a[i-1]+a+a[i+1]+a[i+2])/5;


:-? :-? :-? 4,8,7,5 слишком просто. 2, 163, 30, 25
Действительно, вместо моей ломанной - получаю более мелкую ломанную + куча доп.расчетов + на моих 200 еще массив в 600 точек + при изменении масштабирования еще доп расчеты + при смещении временной шкалы получу совсем другой график или придется просчитывать те точки которых не видно на экране (я с этой идеи начинал:D )

13K
05 сентября 2005 года
flowering
1 / / 05.09.2005
Подскажите, алгоритм аппроксимации, при котором кривая при любых значениях обязательно проходила бы через нуль
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог