Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Сглаживание графиков   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
9-1117662227
Темас
2005-06-02 01:43
2005.11.06
Реалистичная траектория падения снежинки Как сделать ?


14-1129180394
Ega23
2005-10-13 09:13
2005.11.06
С днем рождения! 13 октября


3-1127814213
Бизон
2005-09-27 13:43
2005.11.06
Структурирование в XML файлах


14-1129638502
Германн
2005-10-18 16:28
2005.11.06
Ну почему для самого важного всегда используют самое ненужное?


14-1129217046
ArtemESC
2005-10-13 19:24
2005.11.06
Дизассемблер-редактор