Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.033 c
2-1128628571
leonw
2005-10-06 23:56
2005.11.06
Directory


9-1119442278
Lostcoder
2005-06-22 16:11
2005.11.06
Зеркальное отражение


14-1129495965
LordOfRock
2005-10-17 00:52
2005.11.06
Xakep.ru


5-1108374336
AndyBond
2005-02-14 12:45
2005.11.06
TCollection + Компонент + Инспектор объектов Delphi


2-1127840799
bogdan
2005-09-27 21:06
2005.11.06
задача на вычисление количества чисел





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский