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

Вниз

Нужна информация по сглаживанию линий   Найти похожие ветки 

 
Mihey_temporary ©   (2004-09-01 23:19) [0]

Нужно реализовать сглаживание линий. Нужны именно алгоритмы или реализации с исходным кодом дабы можно было переделать под конкретный случай.


 
MBo ©   (2004-09-02 07:15) [1]

http://www.antigrain.com/
http://www.cs.wpi.edu/~matt/courses/cs563/talks/antialiasing/methods.html
efg тебе известно.
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.simdesign.nl/tips/tip002.html
И поищи Graphics Gems, 1 том.


 
Mihey_temporary ©   (2004-09-02 16:10) [2]

Спасибо за ссылки, весьма интересные источники ты берёшь. Но боюсь, что я не правильно выразился.

Мне нужно скруглить, сгладить, сделать более плавной некоторую кривую или ломаную - вот, что я имел ввиду :). Пока что линия не представлена никак, с этим я также буду разбираться, но всё это значит, что подойдут самые разные алгоритмы.


 
Mihey_temporary ©   (2004-09-03 18:25) [3]

up


 
wicked ©   (2004-09-04 01:52) [4]

то есть нужны сплайны?....
PolyBezier подойдет?...


 
Рыба ©   (2004-09-04 20:06) [5]

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;


Бери Steps > 2.


 
Mihey_temporary ©   (2004-09-04 20:59) [6]

Так, спасибо, будем пробовать.



Страницы: 1 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.397 c
4-1098434674
Naive_file
2004-10-22 12:44
2004.12.05
OpenDialog


1-1100970808
ЛёхА
2004-11-20 20:13
2004.12.05
Радактор кода


14-1100700493
Eugenez
2004-11-17 17:08
2004.12.05
GUID decode ???


1-1100777872
termit
2004-11-18 14:37
2004.12.05
как удалить запись из файла?


3-1099463364
Sour
2004-11-03 09:29
2004.12.05
MySQL