- Главная
- Информатика
- ГРАФИКА_анимация_LAZARUS_Мартынюк

Содержание
- 2. ПРЕОБРАЗОВАНИЕ ИЗОБРАЖЕНИЙ Все основные изменения рисунков можно выполнить с помощью трех базовых операций: переноса изображения с
- 3. ПЕРЕМЕЩЕНИЕ x,y x1,y1 dx dy x1=x+dx y1=y+dy dx и dy задают скорости перемещения точки dx>0 -
- 4. МАСШТАБИРОВАНИЕ xm,ym x,y Необходимо задать: 1. коэффициенты масштабирования kx и ky. 2. координаты точки, относительно которой
- 5. ВРАЩЕНИЕ x,y x1,y1 xv,yv Необходимо задать: 1. Угловую скорость вращения dfi (положительное направление поворота против часовой
- 6. ФОРМИРОВАНИЕ ДВИЖУЩИХСЯ ИЗОБРАЖЕНИЙ При создании движущихся изображений используются рассмотренные геометрические преобразования: перемещение, масштабирование и поворот. Принцип
- 7. Пример движения пропеллера итреугольника h h/2 4 1 3 unit Unit2; {$mode objfpc}{$H+} interface uses Classes,
- 9. Перемещение пропеллера var dfi,fi, k :real; pr,prn:tmas; xv, yv,xm,ym, xc,yc,h, kol : Integer; dx, dy: Integer;
- 10. Масштабирование пропеллера procedure TForm1.Button2Click(Sender: TObject); //Масштабирование begin xc:=form1.ClientWidth div 4; yc:=form1.ClientHeight div 4; h:=yc; // xc:=(form1.ClientWidth
- 11. Вращение пропеллера procedure TForm1.Button3Click(Sender: TObject); //Вращение begin xc:=form1.ClientWidth div 4; yc:=form1.ClientHeight div 2-20; h:=yc div 2;
- 12. Сложное движение пропеллера procedure TForm1.Button4Click(Sender: TObject); // Сложное begin xc:=form1.ClientWidth div 4; yc:=form1.ClientHeight div 4; h:=yc
- 14. Скачать презентацию
Слайд 2ПРЕОБРАЗОВАНИЕ ИЗОБРАЖЕНИЙ
Все основные изменения рисунков можно выполнить с помощью трех базовых операций:
переноса
ПРЕОБРАЗОВАНИЕ ИЗОБРАЖЕНИЙ
Все основные изменения рисунков можно выполнить с помощью трех базовых операций:
переноса

увеличения или уменьшения размеров отображаемого рисунка (масштабирования);
изменения ориентации рисунка (вращения).
Слайд 3ПЕРЕМЕЩЕНИЕ
x,y
x1,y1
dx
dy
x1=x+dx
y1=y+dy
dx и dy задают скорости перемещения точки
dx>0 - перемещение точки по горизонтали
ПЕРЕМЕЩЕНИЕ
x,y
x1,y1
dx
dy
x1=x+dx
y1=y+dy
dx и dy задают скорости перемещения точки
dx>0 - перемещение точки по горизонтали

dx<0 - по горизонтали влево
dy>0 - перемещение по вертикали вниз
dy<0 - по вертикали вверх
При написании программы не надо вводить дополнительные переменные x1 и y1.
x=x+dx
y=y+dy
Слайд 4 МАСШТАБИРОВАНИЕ
xm,ym
x,y
Необходимо задать:
1. коэффициенты масштабирования kx и ky.
2. координаты точки, относительно которой
МАСШТАБИРОВАНИЕ
xm,ym
x,y
Необходимо задать:
1. коэффициенты масштабирования kx и ky.
2. координаты точки, относительно которой

Масштабирование может быть:
однородным (коэффициенты масштабирования по горизонтали и вертикали одинаковы и пропорции объекта сохраняются)
неоднородным (коэффициенты масштабирования неодинаковы по горизонтали и вертикали и пропорции объекта не сохраняются)
Координаты точки (Х,Y) после масштабирования рисунка определяются по формулам:
x=xm*(1-kx)+kx*x
y=ym*(1-ky)+ky*y
При KX>1 и KY>1 рисунок увеличивается в размерах и удаляется от центра масштабирования;
при KX<1 и KY<1 рисунок уменьшается в размерах и приближается к центру масштабирования
Слайд 5ВРАЩЕНИЕ
x,y
x1,y1
xv,yv
Необходимо задать:
1. Угловую скорость вращения dfi (положительное направление поворота против часовой стрелки,
ВРАЩЕНИЕ
x,y
x1,y1
xv,yv
Необходимо задать:
1. Угловую скорость вращения dfi (положительное направление поворота против часовой стрелки,

2. координаты точки, относительно которой производится поворот xv и yv (центр вращения).
dfi
Координаты точки (x1,y1) после поворота рисунка определяются по формулам:
x1=xv+(x-xv)*cos(dfi)+(y-yv)*sin(dfi)
y1=yv+(y-yv)*cos(dfi)-(x-xv)*sin(dfi)
Убрать x1 и y1 просто так нельзя, так как в первой формуле X перевычисляется. А во второй формуле надо использовать старое значение x. Кроме этого, при многократном перевычислении координат при округлении ошибка будет накапливаться, и рисунок будет искажаться. Поэтому надо сохранить координаты начального положения рисунка, и вычислять угол, на который повернут рисунок от начального положения.
fi=fi+dfi
x=xv+(xn-xv)*cos(fi)+(yn-yv)*sin(fi)
y=yv+(yn-yv)*cos(fi)-(xn-xv)*sin(fi)
Слайд 6ФОРМИРОВАНИЕ ДВИЖУЩИХСЯ ИЗОБРАЖЕНИЙ
При создании движущихся изображений используются рассмотренные геометрические преобразования: перемещение, масштабирование
ФОРМИРОВАНИЕ ДВИЖУЩИХСЯ ИЗОБРАЖЕНИЙ
При создании движущихся изображений используются рассмотренные геометрические преобразования: перемещение, масштабирование

Все программы, позволяющие воспроизводить движущееся изображение, имеют следующую особенность. Поскольку человеческий глаз обладает определенной инерционностью восприятия, то нельзя нарисовать изображение, затем сразу же стереть его и нарисовать новое изображение. Перед стиранием изображения необходимо предусмотреть задержку. Интервал времени, в течение которого высвечивается изображение, должен быть больше, чем интервал времени, в течение которого изображение отсутствует.
Элемент управления Timer
Движение моделируется с помощью невизуального компонента Timer.
Он применяется для повторения выполнения заданных алгоритмов через определенные интервалы времени.
Основные свойства:
Interval - определяет интервал времени, через который Timer должен «включаться» и выполнять заложенный алгоритм. Чем меньше Interval, тем быстрее будет двигаться фигура.
Enabled – включает Timer (если Enabled = False, Timer выключен).
Слайд 7Пример движения пропеллера итреугольника
h
h/2
4
1
3
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,forms, Graphics;
type tmas=array[1..4] of tpoint;
Пример движения пропеллера итреугольника
h
h/2
4
1
3
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,forms, Graphics;
type tmas=array[1..4] of tpoint;

procedure ris(pr:tmas;fff:tform);
procedure ristr(tr:tmas1;fff:tform);
procedure fon(fff:tform);
implementation
procedure ris(pr:tmas;fff:tform);
begin
fff.Canvas.Pen.Color:=clred;
fff.Canvas.Brush.Color:=clblue;
fff.Canvas.Polygon(pr);
end;
procedure ristr(tr:tmas1;fff:tform);
begin
fff.Canvas.Pen.Color:=clred;
fff.Canvas.Brush.Color:=clyellow;
fff.Canvas.Polygon(tr);
end;
//************************************************
procedure fon(fff:tform);
begin
fff.Canvas.Pen.Color:=clblack;
fff.Canvas.Brush.Color:=15000000;
fff.Canvas.Rectangle(0,0,fff.ClientWidth,fff.ClientHeight);
fff.Canvas.Brush.Color:=clgreen;
fff.Canvas.Rectangle(0,fff.ClientHeight div 2,fff.ClientWidth,fff.ClientHeight);
end;
end.
Слайд 9Перемещение пропеллера
var
dfi,fi, k :real;
pr,prn:tmas;
xv, yv,xm,ym, xc,yc,h, kol :
Перемещение пропеллера
var
dfi,fi, k :real;
pr,prn:tmas;
xv, yv,xm,ym, xc,yc,h, kol :

dx, dy: Integer;
tr,trn:tmas1;
procedure TForm1.Button1Click(Sender: TObject); //Перемещение
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div 4;
h:=yc div 2;
pr[1].X:= xc - h div 2; pr[1].Y:= yc - h div 4;
pr[2].X:= xc + h div 2 ; pr[2].y:= yc + h div 4;
pr[3].X:= xc + h div 2 ; pr[3].Y:= yc - h div 4;
pr[4].X:= xc - h div 2; pr[4].Y:= yc + h div 4;
ris(pr,form1);
dx:= 2;
dy:= 2;
Timer1.Enabled:= True;
end;
procedure TForm1.Timer1Timer(Sender: TObject); //Перемещение
var i:integer;
begin
form1.Refresh;
for i:=1 to 4 do
begin
pr[i].x:=pr[i].x+dx;
pr[i].y:=pr[i].y+dy;
end;
ris(pr,form1);
if (pr[4].y>form1.ClientHeight)or(pr[1].y<0) then dy:=-dy;
if (pr[2].x>form1.ClientWidth)or(pr[1].x<0) then dx:=-dx;
end;
Слайд 10Масштабирование пропеллера
procedure TForm1.Button2Click(Sender: TObject); //Масштабирование
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div 4;
h:=yc;
Масштабирование пропеллера
procedure TForm1.Button2Click(Sender: TObject); //Масштабирование
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div 4;
h:=yc;

//yc:=(form1.ClientHeight div 4)*3;
pr[1].X:= xc - h div 2; pr[1].Y:= yc - h div 4;
pr[2].X:= xc + h div 2 ; pr[2].y:= yc + h div 4;
pr[3].X:= xc + h div 2 ; pr[3].Y:= yc - h div 4;
pr[4].X:= xc - h div 2; pr[4].Y:= yc + h div 4;
ris(pr,form1);
xm:=form1.ClientWidth;
ym:=form1.ClientHeight;
k:=0.98;
//k:=1.02;
Timer2.Enabled:= True;
end;
procedure TForm1.Timer2Timer(Sender: TObject); //Масштабирование
var i:integer;
begin
form1.Refresh;
for i:=1 to 4 do
begin
pr[i].x:=round(k*pr[i].x+(1-k)*xm);
pr[i].y:=round(k*pr[i].y+(1-k)*ym);
end;
ris(pr,form1);
end;
Слайд 11Вращение пропеллера
procedure TForm1.Button3Click(Sender: TObject); //Вращение
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div 2-20;
h:=yc
Вращение пропеллера
procedure TForm1.Button3Click(Sender: TObject); //Вращение
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div 2-20;
h:=yc

pr[1].X:= xc - h div 2; pr[1].Y:= yc - h div 4;
pr[2].X:= xc + h div 2 ; pr[2].y:= yc + h div 4;
pr[3].X:= xc + h div 2 ; pr[3].Y:= yc - h div 4;
pr[4].X:= xc - h div 2; pr[4].Y:= yc + h div 4;
prn:=pr;
ris(pr,form1);
dfi:= -PI / 18;
fi:=0;
kol:= 0;
xv:= 200;
yv:= 200;
Timer3.Enabled:= True;
end;
procedure TForm1.Timer3Timer(Sender: TObject); // Вращение
var i:integer;
begin
fon(form1);
fi:=fi+dfi;
for i:=1 to 4 do
begin
pr[i].x:=round(xv+(prn[i].x-xv)*cos(fi)+(prn[i].y-yv)*sin(fi));
pr[i].y:=round(yv+(prn[i].y-yv)*cos(fi)-(prn[i].x-xv)*sin(fi));
end;
ris(pr,form1);
kol:=kol+1;
if (kol mod 18)=0 then dfi:=-dfi;
end;
Слайд 12Сложное движение пропеллера
procedure TForm1.Button4Click(Sender: TObject); // Сложное
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div
Сложное движение пропеллера
procedure TForm1.Button4Click(Sender: TObject); // Сложное
begin
xc:=form1.ClientWidth div 4;
yc:=form1.ClientHeight div

h:=yc div 2;
pr[1].X:= xc - h div 2; pr[1].Y:= yc - h div 4;
pr[2].X:= xc + h div 2 ; pr[2].y:= yc + h div 4;
pr[3].X:= xc + h div 2 ; pr[3].Y:= yc - h div 4;
pr[4].X:= xc - h div 2; pr[4].Y:= yc + h div 4;
prn:=pr;
ris(pr,form1);
dx:= 2;
dy:= 2;
dfi:= -PI / 18;
fi:=0;
xv:=xc;
yv:=yc;
//xv:= pr[2].X;
//yv:= pr[2].Y;
// xv:= 200;
// yv:= 200;
Timer4.Enabled:= True;
end;
procedure TForm1.Timer4Timer(Sender: TObject); // Сложное
var i:integer;
begin
fon(form1);
for i:=1 to 4 do
begin
prn[i].x:=prn[i].x+dx;
prn[i].y:=prn[i].y+dy;
end;
xv:=xv+dx;
yv:=yv+dy;
fi:=fi+dfi;
for i:=1 to 4 do
begin
pr[i].x:=round(xv+(prn[i].x-xv)*cos(fi)+(prn[i].y-yv)*sin(fi));
pr[i].y:=round(yv+(prn[i].y-yv)*cos(fi)-(prn[i].x-xv)*sin(fi));
end;
ris(pr,form1);
end;

Путешествие в мир информатики
Растровая и векторная графика
Введение в программирование (часть 2). Переменные и константы
CryptoHands. Первый абсолютно Безрисковый блокчейн проект!
Cube Online в цифрах
Построение дерева вывода
Программирование циклов с помощью цикла До
Cокская сельская библиотека
Technologie mobilne Mobilne systemy baz danych
Характеристики языка Java
Программирование на языке Python
Циклы по переменной. Программирование на языке Python
Автоматизована система управління службою швидкої допомоги для ТОВ “Порятунок сердця”
Многопоточное программирование (Лекция 0)
Компьютерные вирусы
Правда о рекламе
Реестры тегов
Linux now and forever
Служба DHCP
Табличний процесор. Введення і редагування даних - Презентация_
1.Вводная лекция
Єлектронное портфолио студента
ВКР: Программная реализация эмулятора администрирования конфигурации сетевого элемента (VLAN)
Кібербулінг
Пакет подготовки презентаций Microsoft Power Point
Чек-лист инструментов презентации
Электронные таблицы
Информационная система Microsoft Dynamics Ax