Главная страница
    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.056 c
1-1129651397
TStas
2005-10-18 20:03
2005.11.06
Как отследить прекращение работы консольного приложения?


1-1129278586
Prohodil Mimo
2005-10-14 12:29
2005.11.06
Как установить фокус на компонент?


10-1106918721
vano_
2005-01-28 16:25
2005.11.06
Задание номера порта для CORBA-сервера


10-1106802962
Григорьев Антон
2005-01-27 08:16
2005.11.06
Выделение и освобождение памяти для out-параметров COM-серверов


3-1127827263
vishnia
2005-09-27 17:21
2005.11.06
Index is out of date - почему?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский