Основи комп’ютерної графіки. Робота в декартовій системі координат

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

Лабораторна робота №1 Тема: Основи комп’ютерної графіки. Робота в декартовій системі координат Мета: Ознайомлення з основами комп’ютерної графіки. Теоретичні основи Представления точок Точка задається за допомогою двох значень (х у), наприклад, (2 3) . Перетворення точок Розглянемо результати матричного множення (x, y) , що визначає точку, і матриці перетворення 2х2 загального виду   Дослідимо декілька часткових випадків: 1) a=d=1, b=c=0. Змін не відбувається.  2) d=1, b=c=0 Зміна масштабу по осі x   3) b=c=0 Зміна масштабу по осях x і y.   4) b=c=0, d=1, a=-1. Відображення координат відносно осі y.  5) b=c=0, d=a<0. Відображення відносно початку координат.  6) d=a =l, c=0. Зсув   1.3 Перетворення прямих ліній (відрізків) Будь-яка пряма будується за допомогою двох точок, наприклад, АВ. Нехай точки À i В задані координатами - А (0, l) i В (2, 3). Матриця ж перетворення, задана такими значеннями:  В результаті декартового добутку вектора-точки на матрицю перетворення одержимо:   Обертання Розглянемо плоскийтрикутник АВС.Нехай координати трикутника задані такими значеннями: А(3,1), В(6,1) та С(6,4) Матриця перетворення для повороту на 90° проти годинникової стрілки виглядає так:  Після декартового добутку одержимо матрицю:  Матриця перетворення для повороту на 180° проти годинникової стрілки виглядає так:  Після декартового добутку одержимо матрицю:   Матриця перетворення для повороту на 270° проти годинникової стрілки виглядає так:  Після декартового добутку одержимо матрицю:   Відображення Відображення визначається поворотом на 180° навколо осі, що лежить в площині х,y. 1)Обертання навколо прямої х=у задається матрицею:  Після декартового добутку одержимо матрицю:   2)Обертання навколо осі у=0 задається матрицею:  Після декартового добутку одержимо:   Зміна масштабу. Зміна масштабу визначається значениям 2-х елементів головної діагоналі матриці. Якщо використовуємо матрицю  то маємо збільшення в 2 рази. Якщо значения елементів не pівні, то мае місце спотворення. Збільшимо трикутник в 3 рази. Після декартового добутку одержимо матрицю:   Двовимірний зсув i однорідні координати Введемо третій компонент у вектори точок (x,y) і (х*,у*). (x,y,1) і (х*,у*,1) Матриця перетворення матиме вигляд:  Таким чином:  Константи m і n викликають зсув х*,у*, відносно x,y. Порядок роботи Побудуйте декартову систему координат. Виведіть на панель можливість задания координат тонок та матриці перетворення. Здійсніть масштабування однієї поділки по осях ОХ та OY. Побудуйте точку у декартовій системі координат. Здійсніть yci перетворення точок за допомогою матричних перетворень. Побудуйте відрізок. Виведіть на панель можливість введения координат відрізка та матриці перетворення. Здійсніть перетворення відрізків. Побудуйте трикутник 3дійсніть перетворення трикутника: обертання, відображення, масштабування, зсув. Хід роботи unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, ToolWin; type TForm1 = class(TForm) PaintBox1: TPaintBox; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; Button1: TButton; LabeledEdit1: TLabeledEdit; LabeledEdit2: TLabeledEdit; LabeledEdit3: TLabeledEdit; LabeledEdit4: TLabeledEdit; LabeledEdit5: TLabeledEdit; LabeledEdit6: TLabeledEdit; Button2: TButton; LabeledEdit7: TLabeledEdit; LabeledEdit8: TLabeledEdit; Button3: TButton; LabeledEdit9: TLabeledEdit; LabeledEdit10: TLabeledEdit; LabeledEdit11: TLabeledEdit; LabeledEdit12: TLabeledEdit; Button4: TButton; LabeledEdit13: TLabeledEdit; LabeledEdit14: TLabeledEdit; LabeledEdit15: TLabeledEdit; LabeledEdit16: TLabeledEdit; LabeledEdit17: TLabeledEdit; LabeledEdit18: TLabeledEdit; Button5: TButton; LabeledEdit19: TLabeledEdit; LabeledEdit20: TLabeledEdit; LabeledEdit21: TLabeledEdit; LabeledEdit22: TLabeledEdit; Button6: TButton; LabeledEdit23: TLabeledEdit; LabeledEdit24: TLabeledEdit; LabeledEdit25: TLabeledEdit; LabeledEdit26: TLabeledEdit; ComboBox1: TComboBox; ComboBox2: TComboBox; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; ComboBox3: TComboBox; function y(a:integer):integer; procedure draw_axises(); 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 ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure Button7Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button8Click(Sender: TObject); procedure ComboBox3Change(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button12Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; xc,yc:integer; llength,wwidth:integer; implementation {$R *.dfm} function TForm1.y(a:integer):integer; begin y:=((PaintBox1.Height div 2)-a); end; procedure TForm1.draw_axises(); var x,y,i:integer; begin with PaintBox1.Canvas do begin PaintBox1.Refresh; Pen.Color:=clBlack; MoveTo(0,yc); LineTo(PaintBox1.Width,yc); MoveTo(xc,0); LineTo(xc,(PaintBox1.Width)); x:=xc; while (x>0) do begin MoveTo(x,yc-wwidth); LineTo(x,yc+wwidth); x:=x-llength; end; x:=xc; while (x<PaintBox1.Width) do begin MoveTo(x,yc-wwidth); LineTo(x,yc+wwidth); x:=x+llength; end; y:=yc; while (y>0) do begin MoveTo(xc-wwidth,y); LineTo(xc+wwidth,y); y:=y-llength; end; y:=yc; while (y<PaintBox1.Height) do begin MoveTo(xc-wwidth,y); LineTo(xc+wwidth,y); y:=y+llength; end; TextOut(round(PaintBox1.Width*0.98),round(yc*1.1),'X'); TextOut(round(xc*1.05),round(PaintBox1.Height*0.02),'Y'); end; end; procedure TForm1.Button1Click(Sender: TObject); var xp,yp:integer; point_size:integer; begin draw_axises(); point_size:=2; xp:=strtoint(LabeledEdit1.Text); yp:=strtoint(LabeledEdit2.Text); with PaintBox1.Canvas do begin Pen.Color:=clRed; Ellipse(xp*llength+xc-point_size,yc-yp*llength-point_size, xc+xp*llength+point_size,yc-yp*llength+point_size); end; end; procedure TForm1.Button2Click(Sender: TObject); var xp,yp:integer; point_size:integer; a,b,c,d:double; begin Button1.Click; point_size:=2; a:=strtofloat(LabeledEdit3.Text); b:=strtofloat(LabeledEdit4.Text); c:=strtofloat(LabeledEdit5.Text); d:=strtofloat(LabeledEdit6.Text); xp:=strtoint(LabeledEdit1.Text); yp:=strtoint(LabeledEdit2.Text); xp:=round(xp*a+yp*c); yp:=round(xp*b+yp*d); with PaintBox1.Canvas do begin Pen.Color:=clGreen; Ellipse(xp*llength+xc-point_size,yc-yp*llength-point_size, xc+xp*llength+point_size,yc-yp*llength+point_size); end; end; procedure TForm1.Button3Click(Sender: TObject); var xp1,yp1,xp2,yp2:integer; point_size:integer; begin draw_axises(); point_size:=2; xp1:=strtoint(LabeledEdit7.Text); yp1:=strtoint(LabeledEdit8.Text); xp2:=strtoint(LabeledEdit13.Text); yp2:=strtoint(LabeledEdit14.Text); with PaintBox1.Canvas do begin Pen.Color:=clRed; Ellipse(xp1*llength+xc-point_size,yc-yp1*llength-point_size, xc+xp1*llength+point_size,yc-yp1*llength+point_size); MoveTo(xp1*llength+xc,yc-yp1*llength); LineTo(xc+xp2*llength,yc-yp2*llength); Ellipse(xp2*llength+xc-point_size,yc-yp2*llength-point_size, xc+xp2*llength+point_size,yc-yp2*llength+point_size); end; end; procedure TForm1.Button4Click(Sender: TObject); var xp1,yp1,xp2,yp2:integer; x1,x2,y1,y2:integer; point_size:integer; a,b,c,d:double; begin Button3.Click; point_size:=2; a:=strtofloat(LabeledEdit9.Text); b:=strtofloat(LabeledEdit11.Text); c:=strtofloat(LabeledEdit10.Text); d:=strtofloat(LabeledEdit12.Text); x1:=strtoint(LabeledEdit7.Text); y1:=strtoint(LabeledEdit8.Text); x2:=strtoint(LabeledEdit13.Text); y2:=strtoint(LabeledEdit14.Text); xp1:=round(x1*a+y1*c); yp1:=round(x1*b+y1*d); xp2:=round(x2*a+y2*c); yp2:=round(x2*b+y2*d); with PaintBox1.Canvas do begin Pen.Color:=clGreen; Ellipse(xp1*llength+xc-point_size,yc-yp1*llength-point_size, xc+xp1*llength+point_size,yc-yp1*llength+point_size); MoveTo(xp1*llength+xc,yc-yp1*llength); LineTo(xc+xp2*llength,yc-yp2*llength); Ellipse(xp2*llength+xc-point_size,yc-yp2*llength-point_size, xc+xp2*llength+point_size,yc-yp2*llength+point_size); end; end; procedure TForm1.Button5Click(Sender: TObject); var xp1,yp1,xp2,yp2,xp3,yp3:integer; point_size:integer; a,b,c,d,n,m:double; begin draw_axises(); point_size:=2; a:=strtofloat(LabeledEdit19.Text); b:=strtofloat(LabeledEdit20.Text); c:=strtofloat(LabeledEdit21.Text); d:=strtofloat(LabeledEdit22.Text); xp1:=strtoint(LabeledEdit15.Text); yp1:=strtoint(LabeledEdit17.Text); xp2:=strtoint(LabeledEdit16.Text); yp2:=strtoint(LabeledEdit18.Text); xp3:=strtoint(LabeledEdit23.Text); yp3:=strtoint(LabeledEdit24.Text); with PaintBox1.Canvas do begin Pen.Color:=clRed; Ellipse(xp1*llength+xc-point_size,yc-yp1*llength-point_size, xc+xp1*llength+point_size,yc-yp1*llength+point_size); MoveTo(xp1*llength+xc,yc-yp1*llength); LineTo(xc+xp2*llength,yc-yp2*llength); Ellipse(xp2*llength+xc-point_size,yc-yp2*llength-point_size, xc+xp2*llength+point_size,yc-yp2*llength+point_size); MoveTo(xp2*llength+xc,yc-yp2*llength); LineTo(xc+xp3*llength,yc-yp3*llength); Ellipse(xp3*llength+xc-point_size,yc-yp3*llength-point_size, xc+xp3*llength+point_size,yc-yp3*llength+point_size); MoveTo(xp3*llength+xc,yc-yp3*llength); LineTo(xc+xp1*llength,yc-yp1*llength); end; end; procedure TForm1.Button6Click(Sender: TObject); var xp1,yp1,xp2,yp2,xp3,yp3:integer; x1,x2,x3,y1,y2,y3:integer; point_size:integer; a,b,c,d,n,m:double; begin Button5.Click; point_size:=2; a:=strtofloat(LabeledEdit19.Text); b:=strtofloat(LabeledEdit20.Text); c:=strtofloat(LabeledEdit21.Text); d:=strtofloat(LabeledEdit22.Text); m:=strtofloat(LabeledEdit25.Text); n:=strtofloat(LabeledEdit26.Text); x1:=strtoint(LabeledEdit15.Text); y1:=strtoint(LabeledEdit17.Text); x2:=strtoint(LabeledEdit16.Text); y2:=strtoint(LabeledEdit18.Text); x3:=strtoint(LabeledEdit23.Text); y3:=strtoint(LabeledEdit24.Text); xp1:=round(x1*a+y1*c+m); yp1:=round(x1*b+y1*d+n); xp2:=round(x2*a+y2*c+m); yp2:=round(x2*b+y2*d+n); xp3:=round(x3*a+y3*c+m); yp3:=round(x3*b+y3*d+n); with PaintBox1.Canvas do begin Pen.Color:=clGreen; Ellipse(xp1*llength+xc-point_size,yc-yp1*llength-point_size, xc+xp1*llength+point_size,yc-yp1*llength+point_size); MoveTo(xp1*llength+xc,yc-yp1*llength); LineTo(xc+xp2*llength,yc-yp2*llength); Ellipse(xp2*llength+xc-point_size,yc-yp2*llength-point_size, xc+xp2*llength+point_size,yc-yp2*llength+point_size); MoveTo(xp2*llength+xc,yc-yp2*llength); LineTo(xc+xp3*llength,yc-yp3*llength); Ellipse(xp3*llength+xc-point_size,yc-yp3*llength-point_size, xc+xp3*llength+point_size,yc-yp3*llength+point_size); MoveTo(xp3*llength+xc,yc-yp3*llength); LineTo(xc+xp1*llength,yc-yp1*llength); end; end; procedure TForm1.ComboBox1Change(Sender: TObject); var itemname:integer; begin itemname:=ComboBox1.ItemIndex; case itemname of 0:begin LabeledEdit3.Text:='3'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='1'; end; 1:begin LabeledEdit3.Text:='1'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='3'; end; 2:begin LabeledEdit3.Text:='3'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='3'; end; 3:begin LabeledEdit3.Text:='1'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='-1'; end; 4:begin LabeledEdit3.Text:='-1'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='1'; end; 5:begin LabeledEdit3.Text:='-1'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='-1'; end; 6:begin LabeledEdit3.Text:='1'; LabeledEdit4.Text:='0'; LabeledEdit5.Text:='1'; LabeledEdit6.Text:='1'; end; 7:begin LabeledEdit3.Text:='1'; LabeledEdit4.Text:='1'; LabeledEdit5.Text:='0'; LabeledEdit6.Text:='1'; end; 8:begin LabeledEdit3.Text:='1'; LabeledEdit4.Text:='2'; LabeledEdit5.Text:='2'; LabeledEdit6.Text:='1'; end; end; Button2.Click; end; procedure TForm1.ComboBox2Change(Sender: TObject); var itemname:integer; begin itemname:=ComboBox2.ItemIndex; case itemname of 0:begin LabeledEdit9.Text:='3'; LabeledEdit11.Text:='0'; LabeledEdit10.Text:='0'; LabeledEdit6.Text:='1'; end; 1:begin LabeledEdit9.Text:='1'; LabeledEdit11.Text:='0'; LabeledEdit10.Text:='0'; LabeledEdit12.Text:='3'; end; 2:begin LabeledEdit9.Text:='3'; LabeledEdit4.Text:='0'; LabeledEdit10.Text:='0'; LabeledEdit12.Text:='3'; end; 3:begin LabeledEdit9.Text:='1'; LabeledEdit11.Text:='0'; LabeledEdit10.Text:='0'; LabeledEdit12.Text:='-1'; end; 4:begin LabeledEdit9.Text:='-1'; LabeledEdit11.Text:='0'; LabeledEdit10.Text:='0'; LabeledEdit12.Text:='1'; end; 5:begin LabeledEdit9.Text:='-1'; LabeledEdit11.Text:='0'; LabeledEdit10.Text:='0'; LabeledEdit12.Text:='-1'; end; 6:begin LabeledEdit9.Text:='1'; LabeledEdit11.Text:='0'; LabeledEdit10.Text:='1'; LabeledEdit12.Text:='1'; end; 7:begin LabeledEdit9.Text:='1'; LabeledEdit11.Text:='1'; LabeledEdit10.Text:='0'; LabeledEdit12.Text:='1'; end; 8:begin LabeledEdit9.Text:='1'; LabeledEdit11.Text:='2'; LabeledEdit10.Text:='2'; LabeledEdit12.Text:='1'; end; end; Button4.Click; end; procedure TForm1.Button7Click(Sender: TObject); var l,w:integer; begin l:=llength; llength:=round(llength*1.1); if (llength-l)<1 then llength:=llength+2; w:=wwidth; if (wwidth<10) then begin wwidth:=round(wwidth*1.1); if (wwidth-w)<1 then wwidth:=wwidth+1; end; Button2.Click; end; procedure TForm1.FormCreate(Sender: TObject); begin xc:=PaintBox1.Width div 2; yc:=PaintBox1.Height div 2; llength:=PaintBox1.Height div 40; wwidth:=6; end; procedure TForm1.Button8Click(Sender: TObject); begin llength:=round(llength*0.9); wwidth:=round(wwidth*0.9); Button2.Click; end; procedure TForm1.ComboBox3Change(Sender: TObject); var itemname:integer; begin itemname:=ComboBox3.ItemIndex; case itemname of 0:begin LabeledEdit19.Text:='0'; LabeledEdit20.Text:='1'; LabeledEdit21.Text:='-1'; LabeledEdit22.Text:='0'; LabeledEdit25.Text:='0'; LabeledEdit26.Text:='0'; end; 1:begin LabeledEdit19.Text:='-1'; LabeledEdit20.Text:='0'; LabeledEdit21.Text:='0'; LabeledEdit22.Text:='-1'; LabeledEdit25.Text:='0'; LabeledEdit26.Text:='0'; end; 2:begin LabeledEdit19.Text:='0'; LabeledEdit20.Text:='-1'; LabeledEdit21.Text:='1'; LabeledEdit22.Text:='0'; LabeledEdit25.Text:='0'; LabeledEdit26.Text:='0'; end; 3:begin LabeledEdit19.Text:='0'; LabeledEdit20.Text:='1'; LabeledEdit21.Text:='1'; LabeledEdit22.Text:='0'; LabeledEdit25.Text:='0'; LabeledEdit26.Text:='0'; end; 4:begin LabeledEdit19.Text:='1'; LabeledEdit20.Text:='0'; LabeledEdit21.Text:='0'; LabeledEdit22.Text:='-1'; LabeledEdit25.Text:='0'; LabeledEdit26.Text:='0'; end; 5:begin LabeledEdit19.Text:='2'; LabeledEdit20.Text:='0'; LabeledEdit21.Text:='0'; LabeledEdit22.Text:='2'; LabeledEdit25.Text:='0'; LabeledEdit26.Text:='0'; end; 6:begin LabeledEdit19.Text:='1'; LabeledEdit20.Text:='0'; LabeledEdit21.Text:='0'; LabeledEdit22.Text:='1'; LabeledEdit25.Text:='4'; LabeledEdit26.Text:='6'; end; end; Button6.Click; end; procedure TForm1.Button10Click(Sender: TObject); var l,w:integer; begin l:=llength; llength:=round(llength*1.1); if (llength-l)<1 then llength:=llength+2; w:=wwidth; if (wwidth<10) then begin wwidth:=round(wwidth*1.1); if (wwidth-w)<1 then wwidth:=wwidth+1; end; Button4.Click; end; procedure TForm1.Button11Click(Sender: TObject); var l,w:integer; begin l:=llength; llength:=round(llength*1.1); if (llength-l)<1 then llength:=llength+2; w:=wwidth; if (wwidth<10) then begin wwidth:=round(wwidth*1.1); if (wwidth-w)<1 then wwidth:=wwidth+1; end; Button6.Click; end; procedure TForm1.Button9Click(Sender: TObject); begin llength:=round(llength*0.9); wwidth:=round(wwidth*0.9); Button4.Click; end; procedure TForm1.Button12Click(Sender: TObject); begin llength:=round(llength*0.9); wwidth:=round(wwidth*0.9); Button6.Click; end; end.  Рис.1.Результат роботи програми Висновок: На даній лабораторній роботі я ознайомився з основами комп’ютерної графіки. Побудував точку у декартовій системі координат і здійснив yci перетворення точок за допомогою матричних перетворень.Також побудував відрізок та трикутник, здійснивши такі його перетворення,як: обертання, відображення, масштабування , зсув і двовимірний зсув.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!