DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Метод цифрового диференціального аналізатора

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

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

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

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Комп'ютерна графіка
Група:
КН
Коротко про документ

Про що ця робота

У роботі досліджено метод цифрового диференціального аналізатора для побудови відрізків у растрі. Наведено теоретичні відомості, алгоритм та реалізацію мовою програмування Delphi.

У роботі розглядаються

  • Комп'ютерна графіка
  • Растрові алгоритми
  • Побудова відрізків
  • Програмістьке забезпечення графіки
  • Алгоритмізація

Зміст і розділи

  1. Мета
  2. Теоретичні основи
  3. Порядок роботи
  4. Текст програми
  5. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Викладач кафедри

Ключові поняття

ВідрізокДиференціальне рівнянняПіксельАлгоритмДекартова система координатDelphi

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

Міністерство освіти та науки України Національний університет «Львівська політехніка» Кафедра автоматизованих систем управління  Лабораторна робота №4 з дисципліни «Комп’ютерна графіка» на тему: “Метод цифрового диференціального аналізатора” Мета: Освоїти розкладання відрізка в растр методом цифрового диференціального аналізатора. ТЕОРЕТИЧНІ ОСНОВИ Один з методів розкладання відрізка в растр полягає в розв’язуванні диференціального рівняння, що описує цей процес. Для прямої лінії маємо dy/dx=const чи Dy/Dx=(y2 – y1)/(x2 – x1). Розв’язок представляється у вигляді yi+1=yi+Dy yi+1=yi+Dx(y2 – y1)/(x2 – x1) де x1, x2, y1, y2 – кінці відрізка, що розкладається, yi - початкове значення для чергового кроку вздовж відрізка. Фактично рівняння являє собою рекурентне співвідношення для послідовних значень у вздовж потрібного відрізка. Цей метод, використовуваний для розкладання в растр відрізків, називається цифровим диференціальним аналізатором (ЦДА). У простому ЦДА або Dx, або Dy (більше із збільшень) вибирається як одиниця растра. Нижче наводиться простий алгоритм, що працює у всіх квадрантах: передбачається, що кінці відрізка ( x1, y1) і (x2, y2) не збігаються. Апроксимуємо довжину відрізка: if abs(x2 – x1)>=abs(y2 – y1) then L= abs(x2 – x1) else L= abs(y2 – y1) назначаємо більше із збільшень Dx чи Dy рівним одиниці растра Dx=(x2 – x1)/L Dy=(y2 – y1)/L округляємо величини, а не відкидаємо дробову частину. Використання знакової функції робить алгоритм придатним для всіх квадрантів x=x1 y=y1 Plot(round(x),round(y)) //промалювання пікселі початок основного циклу i=1; while i<=L do begin x=x+Dx y=y+Dy i:=i+1; Plot(round(x),round(y)) End; finish ПОРЯДОК РОБОТИ Побудувати декартову двовимірну систему координат, у якій максимальне значення по осях х і у було би близько 10. Розграфити площину побудови відрізків у вигляді сітки, на якій будуть малюватися пікселі. Побудувати псевдовідрізок, який би з’єднував початок з кінцем відрізку. Привести результат роботи алгоритму накреслення відрізку методом цифрового диференціального аналізатора, у якому би підсвічувалися пікселі, або ж клітинки сітки. Проаналізувати результати. Текст програми unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, StdCtrls, Buttons; type TForm1 = class(TForm) Bevel1: TBevel; PaintBox1: TPaintBox; BitBtn1: TBitBtn; Label3, Label4, Label5, Label6: TLabel; Label7, Label8, Label9, Label10: TLabel; Label11, Label12, Label13, Label1: TLabel; Label2, Label14: TLabel; ex1, ey1, ex2, ey2: TEdit; Label15, Label16: TLabel; procedure Chusto; procedure Sitka; procedure Tochka(x,y: byte); procedure FiksYryxX(x1,y1,x2,y2: byte); procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); private public end; const CP=30;//ціна поділки var Form1: TForm1; x0,y0,w,h,x1,x2,y1,y2: integer; new,draw: Boolean; implementation {$R *.DFM} procedure TForm1.Chusto; begin new:=true; PaintBox1.Repaint; end; procedure TForm1.Sitka; var j: byte; begin with PaintBox1.Canvas do begin Pen.Color:=clGray; for j:=0 to 13 do begin MoveTo(x0+j*CP,y0); LineTo(x0+j*CP,0); MoveTo(x0,y0-j*CP); LineTo(w,y0-j*CP); end; end; end; procedure TForm1.Tochka(x,y: byte); begin with PaintBox1.Canvas do begin Brush.Color:=clGreen; Rectangle(x0+x*CP,y0-(y+1)*CP,x0+(x+1)*CP,y0-y*CP); FloodFill(x0+x*CP+1,y0-(y+1)*CP+1,clGreen,fsBorder); end; end; procedure TForm1.FiksYryxX(x1,y1,x2,y2: byte); var x,y: byte; begin x:=x1; y:=y1; Tochka(x1,y1); while (x<>x2)or(y<>y2) do begin if (x1<=x2)and(x<>x2) then inc(x); if (x1>x2)and(x<>x2) then dec(x); if (y1<=y2)and(y<>y2) then inc(y); if (y1>y2)and(y<>y2) then dec(y); Tochka(x,y); end; end; procedure TForm1.FormCreate(Sender: TObject); begin w:=PaintBox1.Width; x0:=0; h:=PaintBox1.Height; y0:=h; draw:=false; Chusto; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin if (ex1.Text='')or(ex2.Text='')or(ey1.Text='')or(ey2.Text='') then begin Chusto; exit; end; x1:=StrToInt(ex1.Text); y1:=StrToInt(ey1.Text); x2:=StrToInt(ex2.Text); y2:=StrToInt(ey2.Text); draw:=true; new:=true; PaintBox1.Repaint; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin if new=true then begin new:=false; Sitka; end; if draw=true then begin draw:=false; FiksYryxX(x1,y1,x2,y2); end; end; end.  Висновок: в даній лабораторній роботі я ознайомився з основами комп’ютерної графіки – алгоритмом побудови відрізків методом цифрового диференціального аналізатора.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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