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);
}
Алгоритм апроксимации
(нужен именно алгоритм, стандартные или дополнительные компоненты не прокатят, не вложусь по скорости).
Сразу отвечаю, насчет самому наваять - не влом, но со временем напряги:(
Это
Цитата:
Мда... Надо разбираться. Но побыстрому не получиться, это я уже понял. Сенк.
Потом составляешь уравнения парабол для точек :
т..12 - т..2 - т..23, т..23 - т..3 - т..34 и тд.
Таким образом ты получиш набор функций для различных учасков графика...
Цитата:
Originally posted by sinyk
В принципе задачу можно свести би квадратным уравнениям (то есть для апроксимации использовать обычную параболу) . Сначала находишь точки лежащие посередине отрезков соединяющих каждые близлежащие две точки.(точка1-т..2 = т..12)
Потом составляешь уравнения парабол для точек :
т..12 - т..2 - т..23, т..23 - т..3 - т..34 и тд.
Таким образом ты получиш набор функций для различных учасков графика...
В принципе задачу можно свести би квадратным уравнениям (то есть для апроксимации использовать обычную параболу) . Сначала находишь точки лежащие посередине отрезков соединяющих каждые близлежащие две точки.(точка1-т..2 = т..12)
Потом составляешь уравнения парабол для точек :
т..12 - т..2 - т..23, т..23 - т..3 - т..34 и тд.
Таким образом ты получиш набор функций для различных учасков графика...
Промахнулся...:) Точки т12,т23 и тд. надо подбирать по принципу равенства производной , а то лажа получается
Наверное, оптимально будет сделать так, как предложил sinyk, т.к. через 3 точки все равно ничего "гладче" параболы не проведешь...:-)
Тем более, что у вас там "зазоры" в штуках пикселей < 5 как я понял меряются...
P.S. В общем нет смысла, кажись, с серьезной аппроксимацией завязываться.
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.
В общем если на TCanvas рисешь то смотри в сторону:
TCanvas::PolyBezier
TCanvas::PolyBezierTo
В результате (если выкинуть шелуху по пересчетам координат при из.размеров)получается
Код:
причем [0] и [3] - это реальные значения а [1] и [2]в реалиях нет - для растяжки. По X смещение для моего 4-ех пиксельного промежутка + и -6.
Y вообще не трогаю. График просто песТня. Так что PolyBezier - то, что доктор прописал. Всем спасибо.
каждую секунду ставим данные полученный последний раз, тогда получается:
Код:
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;
Цитата:
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 )
Подскажите, алгоритм аппроксимации, при котором кривая при любых значениях обязательно проходила бы через нуль