Составить графический алгоритм по коду:
unit unit1;
interface
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms,
dialogs, extctrls;
type
tform1 = class(tform)
timer1: ttimer;
image1: timage;
procedure timer1timer(sender: tobject);
procedure formcreate(sender: tobject);
private
{ private declarations }
public
{ public declarations }
cnt, oblakopos: integer;
raina: array [0..9] of integer; // массив дляд ождя
procedure drawsky(canvas: tcanvas; width, height, x, y: integer);
procedure drawrain(canvas: tcanvas; width, height, w, h, x, y: integer);
end;
var
form1: tform1;
implementation
{$r *.dfm}
procedure tform1.drawsky(canvas: tcanvas; width, height, x, y: integer);
begin
// рисуем небо
canvas.brush.color : = rgb( 0, 224, 255); //clblue;
canvas.rectangle(0, 0, width, height*3 div 5);
//рисуем землю
canvas.brush.color : = clgreen;
canvas.rectangle(0, height*3 div 5, width, height);
//рисуемо блако
canvas.pen.color : = clwhite;
canvas.brush.color : = clwhite;
canvas.ellipse(x , y-15, x+50, y+15);
canvas.ellipse(x-25, y-35, x+25, y+ 5);
canvas.ellipse(x-50, y-25, x, y+ 5);
end;
procedure tform1.drawrain(canvas: tcanvas; width, height, w, h, x, y: integer);
var
i: integer;
begin
for i : = low(raina) to high(raina) do begin
if raina[i] > 0 then begin // если больше 0 то рисуем каплю дождя
// в массиве содержится текущая высота капли. она смещается на x и y
canvas.moveto(x + i*w, y + h - raina[i]);
canvas.lineto(x + i*w, y + h - raina[i] + 20);
raina[i] : = raina[i] - 5;
end else begin // если 0, то случайным образом присваиваем высоту
if random(1000) < 100 then
raina[i] : = h;
end;
end;
end;
procedure tform1.timer1timer(sender: tobject);
begin
if (cnt < 300) or (cnt > 600) then
oblakopos : = oblakopos + 1;
drawsky(image1.canvas, image1.width , image1.height, oblakopos, 100);
if (cnt > 300) and (cnt < 600) then
drawrain(image1.canvas, image1.width , image1.height, 10, 200, oblakopos-50, 100);
cnt : = cnt + 1;
if cnt > 950 then //timer1.enabled : = false;
begin
cnt : = 0;
oblakopos : = cnt; // либо повтор цикла
end;
end;
procedure tform1.formcreate(sender: tobject);
begin
randomize;
cnt : = 0;
oblakopos : = cnt;
timer1.interval : = 20;
image1.width : = 660;
image1.height : = 500;
image1.picture.bitmap.width : = 640;
image1.picture.bitmap.height : = 480;
clientwidth : = 660;
clientheight : = 500;
fillchar(raina, sizeof(integer)*(high(raina)-low(raina)+1), 0);
form1.doublebuffered : = true;
end;
end.
Процесс создания мультипликационного фильма состоит из многих этапов. Сначала придумывается сюжет мультика, пишется его сценарий, где описывают поэтапно все события, которые в нем будут происходить, создаются эскизы героев. Но не всем известно, что для того чтобы такой нарисованный персонаж ожил и находился в движении в течение одной минуты, понадобится более чем полторы тысячи рисунков. Такие изображения называются кадрами. Они столь быстро меняются один за другим, что человеческие глаза воспринимают это чередование, как живую картинку. Чтобы форма объектов изменялась плавно, за одну секунду должно поменяться 12 – 16 кадров. Такой принцип имитации движения ещё называют анимацией.
Объяснение:
Думаю так