Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизСглаживание графиков Найти похожие ветки
← →
x.pro (2005-10-16 21:42) [0]Здравствуйте, уважаемые!
У меня такая проблема. Я строю график на TImage. Координаты точек беру из ListView.
// принцип такой:
x := listview1.items[i].caption;
y := listview1.items[i].subitems[0];
image1.moveto(x,y)
график получается не гладкий. А мне его нужно таковым сделать. Вопрос: как?
спасибо!
← →
Fenik © (2005-10-16 22:32) [1]Не оттуда координаты берешь.
← →
x.pro (2005-10-16 22:40) [2]Да не принципиально, от куда я беру координаты! Какой мне алгоритм нужно выписать, что бы получилось сглаживание графика? Его то я научился строить, а вот сгладить его это уже больное место....
в listview я просто вношу координаты точек и по ним уже строю.
← →
GanibalLector © (2005-10-17 00:01) [3]
procedure DrawCubicCurve(Canvas: TCanvas; const Points: array of TPoint; Steps: cardinal);
function Interpolate(const p1, p2, p3, p4: TPoint; t: single): TPoint;
function cubic(v1, v2, v3, v4, t: single): single;
begin
result:= v2 + t*((-v1 + v3) +
t*((2*v1 - 2*v2 + v3 - v4) +
t*(-v1 + v2 - v3 + v4)));
end;
begin
Result.x:= round(cubic(p1.x, p2.x, p3.x, p4.x, t));
Result.y:= round(cubic(p1.y, p2.y, p3.y, p4.y, t));
end;
var
i, s: integer;
p, p1, p2, p3, p4: TPoint;
begin
if Length(Points) < 2 then
exit;
Canvas.MoveTo(Points[0].x, Points[0].y);
p2:= Points[0];
p3:= Points[0];
p4:= Points[1];
for i:= 0 to High(Points)-1 do
begin
p1:= p2;
p2:= p3;
p3:= p4;
if i+2 < Length(Points) then
p4:= Points[i+2];
for s:= 1 to Steps do begin
p:= Interpolate(p1, p2, p3, p4, s / Steps);
Canvas.LineTo(p.x, p.y);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawCubicCurve(Image1.Canvas,[Point(5,50),Point(50,20),Point(100,150),Point(150,50)],1);
DrawCubicCurve(Image2.Canvas,[Point(5,50),Point(50,20),Point(100,150),Point(150,50)],5);почувствуй разницу
end;
// чем выше Step тем лучше "гладит"
P.S.Автор : Рыба © (04.09.04 20:06) [5]
← →
x.pro (2005-10-17 00:03) [4]СПАСИБО!!!!!
← →
Fenik © (2005-10-17 00:44) [5]> GanibalLector © (17.10.05 00:01) [3]
> P.S.Автор : Рыба © (04.09.04 20:06) [5]
Блин, мои клоны меня преследуют.. Автор не Рыба. Я это как Рыба заявляю :)))
А нашел я эту функцию вот здесь - http://homepages.borland.com/efg2lab/Library/UseNet/2001/0504c.txt
← →
Германн © (2005-10-17 01:17) [6]2 x.pro (16.10.05 21:42)
В твоём случае требуется некий "алгоритм интерполяции". Вот это и ищи в поисковиках.
Ответ GanibalLector © (17.10.05 00:01) [3] - есть лишь один из множества вариантов реализации сабжа.
Не в упрек GanibalLector ©, а просто в дополнение, нет универсального алгоритма интерполяции! :(
← →
GanibalLector © (2005-10-17 02:00) [7]Вот еще :
http://www.google.ru/groups?hl=ru&lr=&ie=UTF-8&group=borland.public.delphi.graphics
http://www.google.ru/groups?hl=ru&lr=&ie=UTF-8&group=comp.graphics.algorithms
http://www.antigrain.com/
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c