Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет лаба 2 компьютерная графика

.docx
Скачиваний:
20
Добавлен:
11.05.2015
Размер:
74.81 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра компьютерных систем в управлении и проектировании (КСУП)

ОТЧЕТ

К лабораторной работе №2 по дисциплине «компьютерная графика».

Алгоритмы растровой графики. Построение векторов и окружностей.

Вариант 2

Студентка гр.583-1

_______ Аригунова И.Н.

«___»_____________2014 г.

Принял:

_____________________

_____________________

«___»_____________2014 г.

Введение

Цель работы – изучение и реализация алгоритмов растровой графики: генерация отрезка алгоритмами Брезенхема, цифровым дифференциальным симметричным и несимметричным, генерация окружности и вывод линий разных стилей.

Задание лабораторную работу №2

  1. В проекте реализовать вывод отрезков обычным ЦДА.

  2. Добавить возможность вывода толстой линии.

  3. Реализовать вывод на экран фигуры. Координаты вводятся с клавиатуры (использовать компоненты Edit).

Описание работы

С помощью ЦДА решается дифференциальное уравнение отрезка, имеющее вид:

где Py = Yk – Yn приращение по Y

Px = Xk – Xn приращение по Х

Xn, Yn – начальные координаты точки отрезка

Xk, Yk – конечные координаты точки отрезка

Затем определяется количество узлов N. За N циклов вычисляются координаты следующих узлов:

Получаемые значения округляются до целочисленных. Пиксель выводится на экран.

Координаты начала и конца отрезка будем задавать в интерактивном режиме: пользователь нажимает на правую кнопку мыши (начало отрезка) , затем, не отпуская, протягивает отрезок до конечной точки, отпускает правую кнопку – на экране появляется отрезок.

  1. Создать проект

    Рисунок 1. Интерфейс программы

  2. Создать форму, как изображено на рисунке ниже

  3. Написать программный код вывода отрезка. Координаты начальной точки фиксируются нажатием правой кнопки мыши на компоненте PaintBox. Для этого в Events инспектора объектов напротив события OnMouseDown сделать двойной щелчок и перейти к редактированию кода.

  4. Конечная точка фиксируется при отпускании кнопки мыши. Использовать событие OnMouseUp и отредактировать код.

  5. Ввести кнопку для очистки поля рисования. Прописать процедуру очистки поля PaintBox.

  6. Чтобы вывести толстую линию нужно использовать ЦДА. Должен закрашиваться не только полученный пиксель, но и соседние.

    Рисунок 2. Результат работы программы

  7. Для вывода многоугольника использовать массив точек.

Результат работы программы на рисунке 2.

Заключение

В данной лабораторной работе были реализованы алгоритмы растровой графики: обычный ЦДА, вывод толстой линии, а также построение многоугольников по заданным точкам.

Приложение А

Листинг программы

procedure TForm1.pb1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (rb1.Checked or rb2.Checked) then

begin

xn:=X; yn:= Y;

end

else

ShowMessage('вы не выбрали алгоритм ввода фигуры');

end;

procedure TForm1.pb1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var i, j, dx,dy: Integer;

xt, yt: Real;

begin

xk:= X;

yk:= Y;

dx:= xk-xn;

dy:= yk-yn;

n:=1000;

xt:=xn;

yt:=yn;

if (rb1.Checked) then

for i:=1 to n do

begin

pb1.Canvas.Pixels[round(xt), round(yt)] := clBlack;

xt:= xt+dx/n;

yt:= yt+dy/n;

end;

if (rb2.Checked) then

for j:=1 to n do

begin

pb1.Canvas.Pixels[round(xt), round(yt)] := clBlack;

pb1.Canvas.Pixels[round(xt+1), round(yt+1)] := clBlack;

pb1.Canvas.Pixels[round(xt+2), round(yt+2)] := clBlack;

pb1.Canvas.Pixels[round(xt-1), round(yt-1)] := clBlack;

pb1.Canvas.Pixels[round(xt-2), round(yt-2)] := clBlack;

xt:= xt+dx/n;

yt:= yt+dy/n;

end;

end;

procedure TForm1.btn1Click(Sender: TObject);

var i , j :Integer;

begin

for i := 0 to pb1.Width do

for j := 0 to pb1.Height do

pb1.Canvas.Pixels[i,j]:= clWhite;

end;

procedure TForm1.btn2Click(Sender: TObject);

begin

x1:= StrToInt(edt1.Text);

x2:= StrToInt(edt2.Text);

x3:= StrToInt(edt3.Text);

x4:= StrToInt(edt4.Text);

x5:= StrToInt(edt5.Text);

y1:= StrToInt(edt6.Text);

y2:= StrToInt(edt7.Text);

y3:= StrToInt(edt8.Text);

y4:= StrToInt(edt9.Text);

y5:= StrToInt(edt10.Text);

ptArray[0]:=Point(x1, y1);

ptArray[1]:=Point(x2, y2);

ptArray[2]:=Point(x3, y3);

ptArray[3]:=Point(x4, y4);

ptArray[4]:=Point(x5, y5);

pb1.Canvas.Polygon(ptArray);

end;

end.