Перерисовка образов


uses Graph, Crt;
var Gd, Gm, i, j, k, n,  xc, yc, r, m: integer;
    x, y, x1, y1, x2, y2: array[1..12] of integer;   alfa: real;
begin
     Gd:=Detect;    InitGraph(Gd,  Gm,  '');    SetWriteMode(1);
                                                           { координаты узлов на квадрате - исходной фигуры: }
    for i:=7 to 10 do begin  x1[i]:= 10;  y1[i]:= 10+(i-7)*40  end;
    for i:=1 to  4 do begin  x1[i]:=130;  y1[i]:=130-(i-1)*40  end;
           x1[11]:= 50;  x1[12]:= 90;  y1[11]:=130;  y1[12]:=130;
           x1[ 6]:= 50;  x1[ 5]:= 90;  y1[ 5]:= 10;  y1[ 6]:= 10;
                                                                  { координаты узлов на звезде - целевой фигуры: }
           xc:= 500;  yc:= 300;                         { центр звезды }
    for i:= 1 to 12 do begin  alfa:= (1-i)*(2*pi)/12;
                            if (i mod 2)=0 then r:=30 else r:=100;
                                  x2[i]:= xc + round(r*cos(alfa));
                                  y2[i]:= yc + round(r*sin(alfa)) 
                        end;
     m:= 60;                    { координаты узлов на промежуточных образах: }
  for k:= 0 to  m do begin
     for i:=1 to 12 do begin x[i]:=x1[i]+round((x2[i]-x1[i])*k/m);
                             y[i]:=y1[i]+round((y2[i]-y1[i])*k/m)
                        end;
     for j:= 1 to 2 do begin                { перерисовка промежуточных образов }
                               moveto(x[12], y[12]);
                          for i:= 1 to 12 do LineTo(x[i],  y[i] );
                          if j = 1 then delay(40) 
                       end 
  end;            
       readln;   CloseGraph
end. 

Перерисовку образов удобно делать двойным рисованием в режиме SetWriteMode(1),  либо используя процедуры работы с видеопамятью в режиме XorPut.  Задержка видимости образа (delay) определяет скорость преобразования.  В приведенной демонстрационной программе задается исходный контур из 12 точек  X1[i],  Y1[i] - координаты узлов на квадрате,  а целевой контур из 12 точек  X2[i], Y2[i] - координаты вершин звезды. 

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

Комментариев нет:

Отправить комментарий

Если у вас интересные исходники и вы не прочь поделиться, то присылайте daslex@yandex.ru с указанием Темы: Графика Паскаль
К вашей работе будет прикреплено ваше авторство и по желанию добавлена ссылка на ваш сайт.
На одну страницу - Одна работа. На одну работу - Одна ссылка + указание автора


Основное требование - это один файл .pas без сторонних модулей (только с родными. предпочтение Graph).
Можно использовать ассемблерные вставки.

Все что Запускается у меня и работает, я выкладываю. в этом блоге.
Яндекс.Метрика