Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_zbirna.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆

1.5 Відображення

Відображення визначається поворотом на 180° навколо осі, що лежить у площині х у. На простій мові це дзеркальне відображення трикутника.

1) Обертання навколо прямої y=x задається матрицею:

.

Після декартового добутку одержимо матрицю:

.

В результаті отримаємо трикутник А*B*C*.

2 ) Обертання навколо осі y=0

задається матрицею:

.

Після декартового добутку одержимо матрицю:

.

В результаті отримаємо трикутник А*B*C*.

1.6 Зміна масштабу

Зміна масштабу визначається значенням 2-х елементів головної діагоналі матриці. Якщо використовуємо матрицю

,

т о маємо збільшення в 2 рази. Якщо

значення елементів не рівні, то має місце

спотворення.

Нехай трикутник заданий

координатами А(1, 1), В(3, 1) та С(1, 3).

Тепер збільшимо трикутник в 3 рази.

В результаті отримаємо трикутник А*B*C*.

1.7 Двовимірний зсув і однорідні координати

Введемо третій компонент у вектори точок (x, y) і (x* y*) -

(x y 1) і (x* y* 1).

Матриця перетворення матиме вигляд:

.

Таким чином,

.

Константи m, n викликають зсув x* і y*

відносно x і y.

Матриця 3х2 не квадратна - вона не має

оберненої матриці.

Доповнимо матрицю перетворення до

квадратної

.

Третій компонент не змінюється.

ПОРЯДОК ВИКОНАННЯ РОБОТИ

1. Побудуйте декартову систему координат.

2. Виведіть на панель можливість задання координат точок та матриці перетворення.

3. Здійсніть масштабування однієї поділки по осях OX та OY.

4. Побудуйте точку у декартовій системі координат. Здійсніть усі перетворення точок за допомогою матричних перетворень.

5. Побудуйте відрізок. Виведіть на панель можливість введення координат відрізка та матриці перетворення. Здійсніть перетворення відрізків.

6. Побудуйте трикутник. Здійсніть перетворення трикутника: обертання, відображення, масштабування, зсув.

ВИМОГИ ДО ЗВІТУ

Звіт повинен містити:

1) назву роботи;

2) мету роботи;

3) короткий теоретичний вступ;

4) завдання до лабораторної роботи;

5) тексти розроблених і відлагоджених програм;

6) рисунки з реалізацією програми;

7) висновки.

ПРИКЛАД ПРОГРАМНОЇ РЕАЛІЗАЦІЇ

unit Unit1;

interface

uses

Windows, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

E1: TEdit;

E2: TEdit;

e7: TEdit;

e8: TEdit;

e9: TEdit;

Label4: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

e10: TEdit;

Button6: TButton;

Button7: TButton;

Button8: TButton;

E3: TEdit;

e4: TEdit;

E5: TEdit;

E6: TEdit;

P: TPaintBox;

Label1: TLabel;

Button9: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure PPaint(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button9Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

y2,x2,x,y,i,j,k,kk,Dx:integer;

v:array[1..10] of integer;

error:boolean=false;

implementation

{$R *.DFM}

procedure getparam;

begin

with form1 do

for i := 1 to 10 do

if TEdit(FindComponent(‘E’ +

IntToStr(i))).Text <>’’ then

v[i]:=StrToInt(TEdit(FindComponent(‘E’ +

IntToStr(i))).Text) else error:=true;

end;

procedure T;

begin

with form1.p do

begin

canvas.moveto((Width div 2)+(v[1]*dx),(Height div

2)-(v[2]*dx));

canvas.lineto((Width div 2)+(v[3]*dx),(Height div

2)-(v[4]*dx));

canvas.MoveTo((Width div 2)+(v[3]*dx),(Height div

2)-(v[4]*dx));

canvas.LineTo((Width div 2)+(v[5]*dx),(Height div

2)-(v[6]*dx));

canvas.MoveTo((Width div 2)+(v[5]*dx),(Height div

2)-(v[6]*dx));

canvas.LineTo((Width div 2)+(v[1]*dx),(Height div

2)-(v[2]*dx));

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

getparam;

p.Canvas.Pen.Width:=p.Canvas.Pen.Width+10;

p.Canvas.Pen.Color:=cllime;

p.Canvas.MoveTo((p.Width div 2)+(v[1]*dx),

(p.Height div 2)-(v[2]*dx));

p.Canvas.LineTo((p.Width div 2)+(v[1]*dx),

(p.Height div 2)-(v[2]*dx));

p.Canvas.Pen.Width:=p.Canvas.Pen.Width-10;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

getparam;

p.Canvas.Pen.Width:=p.Canvas.Pen.Width+10;

p.Canvas.Pen.Color:=cLYELLOW;

p.Canvas.Moveto((p.Width div 2)+(v[1]*dx)*v[7]

,(p.Height div 2)-(v[2]*dx));

p.Canvas.Lineto((p.Width div 2)+(v[1]*dx)*v[7]

,(p.Height div 2)-(v[2]*dx));

p.Canvas.Pen.Width:=p.Canvas.Pen.Width-10;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

getparam;

p.Canvas.Pen.Color:=cLgreen;

p.Canvas.Pen.Width:=p.Canvas.Pen.Width+10;

p.Canvas.moveto((p.Width div 2)+(v[1]*dx)*v[7]

,(p.Height div 2)-(v[2]*dx)*v[10]);

p.Canvas.Lineto((p.Width div 2)+(v[1]*dx)*v[7]

,(p.Height div 2)-(v[2]*dx)*v[10]);

p.Canvas.Pen.Width:=p.Canvas.Pen.Width-10;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

getparam;

p.Canvas.Pen.Color:=cLwhite;

p.Canvas.Pen.Width:=p.Canvas.Pen.Width+10;

p.Canvas.moveto((p.Width div 2)+(v[1]*dx)*-1

,(p.Height div 2)-(v[2]*dx));

p.Canvas.Lineto((p.Width div 2)+(v[1]*dx)*-1

,(p.Height div 2)-(v[2]*dx));

p.Canvas.Pen.Width:=p.Canvas.Pen.Width-10;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

getparam;

p.Canvas.Pen.Color:=cLAqua;

p.Canvas.Pen.Width:=p.Canvas.Pen.Width+10;

p.Canvas.moveto((p.Width div 2)+(v[1]*dx)*-1

,(p.Height div 2)-(v[2]*dx)*-1);

p.Canvas.Lineto((p.Width div 2)+(v[1]*dx)*-1

,(p.Height div 2)-(v[2]*dx)*-1);

p.Canvas.Pen.Width:=p.Canvas.Pen.Width-10;

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

getparam;

p.Canvas.Pen.Color:=cLred;

p.Canvas.Pen.Width:=p.Canvas.Pen.Width+10;

k:=(p.Height div 2)-((v[1]*v[8]+v[2])*dx);

p.Canvas. moveto((p.Width div 2)+(v[1]*dx),k);

p.Canvas. Lineto((p.Width div 2)+(v[1]*dx),k);

p.Canvas.Pen.Width:=p.Canvas.Pen.Width-10;

end;

procedure TForm1.PPaint(Sender: TObject);

var w:integer;

begin

i:=1;

w:=-10;

with p.Canvas do

begin

p.Canvas.FillRect(rect(0,0,p.width,p.height));

pen.Color:=clwhite;

moveto(p.Width div 2,0);

lineto(p.Width div 2,p.Height-0);

moveto(0,p.Height div 2);

lineto(p.Width-0,p.Height div 2);

dX:=p.Width div 20;

font.Color:=cllime;

while i<p.Width do

begin

moveto(i,(p.Height div 2));

lineto(i,(p.height div 2)+5);

if w<>0 then

textout(i-4,(p.height div 2)+6,

IntToStr(w));

i:=i+dX;

inc(w);

end;

i:=1;

w:=10;

while i<p.Height do

begin

moveto((p.width div 2),i);

lineto((p.width div 2)+5,i);

if w<>0 then

textout((p.width div 2)+5,i-7,IntToStr(w));

i:=i+dx;

dec(w);

end;

end;

end;

procedure TForm1.Button7Click(Sender: TObject);

var k,kk:integer;

begin

getparam;

x:=(p.Width div 2)+(v[1]*dx);

y:=(p.Height div 2)-(v[2]*dx);

ppaint(form1);

x2:=(p.Width div 2)+(v[3]*dx);

y2:=(p.Height div 2)-(v[4]*dx);

p.Canvas.MoveTo(x,y);

p.Canvas.LineTo(x2,y2);

k:=((v[7]*v[1])+(v[9]*v[2]));

kk:=((v[8]*v[1])+(v[10]*v[2]));

x:=(p.Width div 2)+(k*dx);

y:=(p.Height div 2)-(kk*dx);

k:=((v[7]*v[3])+(v[9]*v[4]));

kk:=((v[8]*v[3])+(v[10]*v[4]));

x2:=(k*dx)+(p.Width div 2);

y2:=(p.Height div 2)-(kk*dx);

p.Canvas.MoveTo(x,y);

p.Canvas.LineTo(x2,y2);

end;

procedure TForm1.Button8Click(Sender: TObject);

var vv:array[0..10] of integer;

begin

getparam;

ppaint(form1);

t;

// for xy=z & y=0

for i:=1 to 10 do

vv[i]:=v[i];

vv[1]:=v[1]*v[7]+v[2]*v[9];

vv[2]:=v[1]*v[8]+v[2]*v[10];

vv[3]:=v[3]*v[7]+v[4]*v[9];

vv[4]:=V[3]*v[8]+v[4]*v[10];

vv[5]:=v[5]*v[7]+v[6]*v[9];

vv[6]:=v[5]*v[8]+v[6]*v[10];

for i:=1 to 10 do

v[i]:=vv[i];

t;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

label4.Caption:=’a : b: ‘+

#10+#13+#10+#13+#10+#13+’c : d :’;

label1.Caption:=’X1 X2

X3'+#10+#13

+#10+#13+’Y1 Y2

Y3';

end;

procedure TForm1.Button9Click(Sender: TObject);

var vv:array[0..10] of integer;

begin

getparam;

ppaint(form1);

t;

// a=n;b=m;

for i:=1 to 10 do

vv[i]:=v[i];

vv[1]:=v[1]+v[8];

vv[2]:=v[2]+v[7];

vv[3]:=v[3]+v[8];

vv[4]:=V[4]+v[7];

vv[5]:=v[5]+v[8];

vv[6]:=v[6]+v[7];

for i:=1 to 10 do

v[i]:=vv[i];

t;

end;

end.

Лабораторна робота №2

Робота в просторовій системі координат

Мета роботи: Ознайомлення з основами комп‘ютерної графіки в просторовій системі координат.

Теоретичні основи

2.1 Вступ

Для кращого сприйняття форми об’єкта необхідно мати його зображення в тривимірному просторі. У багатьох випадках наочне представлення про об’єкт можна одержати шляхом виконання операцій обертання і переносу, а також побудови проекцій. Введемо однорідні координати. Точка в тривимірному

(x y z) просторі задається чотиримірним вектором (x y z 1) або ж (X Y Z H). Перетворення з однорідних координат описується співвідношеннями

(4.1)

де T - деяка матриця перетворення.

Ця матриця може бути представлена у вигляді 4 окремих частин

Матриця 3x3 здійснює лінійне перетворення у виді зміни масштабу, зсуву й обертання. Матриця-рядок 1х3 робить перенос, а матриця-стовпець 3х1 - пере­творення в перспективі. Останній скалярний елемент виконує загальну зміну масштабу. Повне перетворення, отримане шляхом впливу на вектор положення матрицею 4x4 і нормалізації перетвореного вектора, будемо називати білінійним перетворенням. Воно забезпечує виконання комплексу операцій зсуву, часткової зміни масштабу, обертання, відображення, переносу, а також зміни масштабу зображення в цілому.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]