отчет лаба 2 компьютерная графика
.docxМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра компьютерных систем в управлении и проектировании (КСУП)
ОТЧЕТ
К лабораторной работе №2 по дисциплине «компьютерная графика».
Алгоритмы растровой графики. Построение векторов и окружностей.
Вариант 2
Студентка гр.583-1
_______ Аригунова И.Н.
«___»_____________2014 г.
Принял:
_____________________
_____________________
«___»_____________2014 г.
Введение
Цель работы – изучение и реализация алгоритмов растровой графики: генерация отрезка алгоритмами Брезенхема, цифровым дифференциальным симметричным и несимметричным, генерация окружности и вывод линий разных стилей.
Задание лабораторную работу №2
-
В проекте реализовать вывод отрезков обычным ЦДА.
-
Добавить возможность вывода толстой линии.
-
Реализовать вывод на экран фигуры. Координаты вводятся с клавиатуры (использовать компоненты Edit).
Описание работы
С помощью ЦДА решается дифференциальное уравнение отрезка, имеющее вид:
где Py = Yk – Yn приращение по Y
Px = Xk – Xn приращение по Х
Xn, Yn – начальные координаты точки отрезка
Xk, Yk – конечные координаты точки отрезка
Затем определяется количество узлов N. За N циклов вычисляются координаты следующих узлов:
Получаемые значения округляются до целочисленных. Пиксель выводится на экран.
Координаты начала и конца отрезка будем задавать в интерактивном режиме: пользователь нажимает на правую кнопку мыши (начало отрезка) , затем, не отпуская, протягивает отрезок до конечной точки, отпускает правую кнопку – на экране появляется отрезок.
-
Создать проект
Рисунок 1. Интерфейс программы
-
Создать форму, как изображено на рисунке ниже
-
Написать программный код вывода отрезка. Координаты начальной точки фиксируются нажатием правой кнопки мыши на компоненте PaintBox. Для этого в Events инспектора объектов напротив события OnMouseDown сделать двойной щелчок и перейти к редактированию кода.
-
Конечная точка фиксируется при отпускании кнопки мыши. Использовать событие OnMouseUp и отредактировать код.
-
Ввести кнопку для очистки поля рисования. Прописать процедуру очистки поля PaintBox.
-
Чтобы вывести толстую линию нужно использовать ЦДА. Должен закрашиваться не только полученный пиксель, но и соседние.
Рисунок 2. Результат работы программы
-
Для вывода многоугольника использовать массив точек.
Результат работы программы на рисунке 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.