Главная страница
    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.037 c
14-1129553071
Игорь Шевченко
2005-10-17 16:44
2005.11.06
Почти по Екклезиасту...


1-1129190192
MixAnOL
2005-10-13 11:56
2005.11.06
Автоматическое фокусирование окна


1-1129270616
Marsel
2005-10-14 10:16
2005.11.06
Подключение библиотек


9-1119515222
Slavikk
2005-06-23 12:27
2005.11.06
(GLScene) Кто какие скрипты использует?


1-1129728289
diwww
2005-10-19 17:24
2005.11.06
Как отследыть событие "сворачивание окна" в TrayBar у формы?





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