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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра автоматизованих систем управління

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

Рік:
2009
Тип роботи:
Лабораторна робота
Предмет:
Інформаційні технології
Група:
КН- 411

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Інститут комп’ютерних наук та інформаційних технологій Кафедра автоматизованих систем управління  Лабораторна робота №4 З курсу: «Комп’ютерна графіка» Тема: Алгоритм креслення відрізків. Мета: Освоїти найпростіший метод креслення відрізків. . ТЕОРЕТИЧНІ ОСНОВИ Оскільки екран растрового дисплея з електронно-променевою трубкою (ЕПТ) можна розглядати як матрицю дискретних елементів (пікселів), кожний з яких може бути підсвічений, не можна безпосередньо провести ввдрізок з однієї точки в іншу. Процес визначення пікселів, щонайкраще апроксимуючих заданий відрізок, називається розкладанням у растр. У сполученні з процесом порядкової візуалізації зображення він відомий як перетворення растрової розгортки. Для горизонтальних, вертикальних i нахилених під кутом 45° відрізків вибір растрових елемента очевидний. При будь-якій іншій opiєнтації вибрати потрібні пікселі складніше, що i показано на рис.4.1.  Рис.4.1. Розкладання в растр відрізків прямих В цій лабораторній роботі, нам потрібно показати вci недоліки растру, при малюванні прямих. Загальні вимоги до алгоритмів креслення відрізків наступні: відрізки повинні виглядати прямими, починатися i закінчуватися в заданих точках, яскравість уздовж відрізка повинна бути постійною i не залежати від довжини i нахилу, малювати потрібно швидко. Постійна уздовж всього відрізка яскравість досягається лише при проведенні горизонтальних, вертикальних i нахилених під кутом 45° прямих. Для всіх інших орієнтація розкладання в растр приведе до нерівномірності яскравості, як це показано на рис.4.1. Текст програмного коду: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ExtCtrls; type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; Button1: TButton; Image1: TImage; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure koord(); procedure draw_P(x_k,y_k:integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; x0,y0,delta:integer; implementation procedure TForm1.koord(); var delta_p,x1,x2,x3,x4,y1,y2,y3,y4,i:integer; begin x0:=round(image1.Width/2); y0:=round((image1.Height)/2); with image1.Canvas do begin if (image1.Width-x0)>(image1.Height-y0) then delta:=round((image1.Height-y0)/10) else delta:=round((image1.Width-x0)/10); x1:=x0; x2:=x0; x3:=x0; x4:=x0; y1:=y0; y2:=y0; y3:=y0; y4:=y0; for i:=0 to 30 do begin delta_p:=delta; MoveTo(x0,y1); LineTo(x0,y1-delta_p); moveto(x0-2,y1-delta_p); LineTo (x0+2,y1-delta_p); y1:=y1-delta_p; MoveTo(x0,y2); LineTo(x0,y2+delta_p); moveto(x0-2,y2+delta_p); LineTo (x0+2,y2+delta_p); y2:=y2+delta_p; MoveTo(x3,y0); LineTo(x3+delta_p,y0); moveto(x3+delta_p,y0-2); LineTo (x3+delta_p,y0+2); x3:= x3+delta_p; MoveTo(x4,y0); LineTo(x4-delta_p,y0); moveto(x4-delta_p,y0-2); LineTo (x4-delta_p,y0+2); x4:= x4-delta_p; end; x1:=x0; x2:=x0; x3:=0; x4:=x0; y1:=Image1.Height; y2:=y0; y3:=y0; y4:=y0; for i:=0 to 30 do begin delta_p:=delta; pen.Style:=psDot; moveto(0,y1-delta_p); LineTo (image1.Width,y1-delta_p); moveto(x3+delta_p,0); LineTo (x3+delta_p,image1.Height); y1:=y1-delta_p; x3:= x3+delta_p; end; end; end; procedure TForm1.draw_P(x_k,y_k:integer); var xx,yy,col:integer; begin with image1.Canvas do begin pen.Color:=clgray; pen.Width:=5; xx:=x0+x_k*delta; yy:= y0-y_k*delta; MoveTo(xx,yy); LineTo(xx,yy); pen.Width:=1; col:= brush.Color; brush.Color:=clblack; fillRect(rect(xx,yy,xx+delta,yy-delta)); brush.Color:=col; TextOut(x0+x_k*delta,y0+7,inttostr(x_k)); TextOut(x0+7,y0-y_k*delta,inttostr(y_k)); pen.Style:=psSolid; end; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var str: array[0..2] of array[0..2] of integer; x:array[0..2]of array[0..2] of integer; a:array[0..2]of array[0..2] of integer; i,j,l,x_t,y_t,x_t0,y_t0,x_tk,y_tk,flag:integer; m,e:double; begin image1.Canvas.FillRect(Rect(0,0,image1.Width,image1.Height)); image1.Transparent:=true; koord(); x_t0:=strtoint(StringGrid1.Cells[0,0]); y_t0:=strtoint(StringGrid1.Cells[1,0]); draw_P(x_t0,y_t0); ///***************** x_tk:=strtoint(StringGrid2.Cells[0,0]); y_tk:=strtoint(StringGrid2.Cells[1,0]); draw_P(x_tk,y_tk); //********** e:=-0.5; x_t:=x_t0; y_t:=y_t0; flag:=0; if x_tk-x_t0 =0 then begin m:=(x_tk-x_t0)/(y_tk-y_t0); flag:=1; end else m:=(y_tk-y_t0)/ (x_tk-x_t0) ; while ((x_t<x_tk) or (y_t<y_tk)) do begin if (m<=1) and (flag=0) then begin e:=e+m; if e<0 then begin x_t:=x_t+1; draw_P(x_t,y_t); end else begin y_t:=y_t+1; x_t:=x_t+1; draw_P(x_t,y_t); e:=e-1; end; end else begin m:=(x_tk-x_t0)/(y_tk-y_t0); flag:=1; e:=e+m; if e<0 then begin y_t:=y_t+1; draw_P(x_t,y_t); end else begin y_t:=y_t+1; x_t:=x_t+1; draw_P(x_t,y_t); e:=e-1; end; end; end; with image1.Canvas do begin pen.color:=clGreen; Moveto(x0+x_t0*delta,y0-y_t0*delta); LineTo(x0+delta+x_tk*delta,y0-delta-y_tk*delta); pen.color:=clBlack; end; end; end. Результати роботи програми:      Рис. 1. Розкладання в растр відрізків прямих Висновок: На даній лабораторній роботі я освоїла найпростіший метод креслення відрізків.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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