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

otchet_laba_2_kompyuternaya_grafika

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

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

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

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

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

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

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

ОТЧЕТ

К лабораторной работе №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. Создать проект

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

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

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

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

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

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

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

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

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

Контрольные вопросы к лабораторной работе №2

  1. Опишите кратко алгоритм генерации отрезка ЦДА

  1. Определить количество узлов N, используемых для построения отрезка

  2. За N циклов вычисляются координаты очередных точек отрезка.

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

  1. Чем отличаются обычный и несимметричный алгоритмы ЦДА?

В несимметричном алгоритме ЦДА можно работать с нецелыми значениями координат отрезка, в обычном алгоритме только с целыми.

  1. Кратко опишите основную идею алгоритма Брезенхема генерации отрезка

Основная идея алгоритма состоит в том, что если угловой коэффициент прямой < ½, то точку, следующую за точкой (0;0), поставить в позицию (1;0), а если угловой коэффициент > ½, то в позицию (1;1). Для принятия решение, куда заносить очередной пиксел, вводится величина отклонения Е точной позиции от середины между двумя возможными растровыми точками в направлении наименьшей относительной координаты. Знак Е используется как критерий для выбора ближайшей растровой точки.

Если E<0, то точное Y-значение округляется до последнего целочисленного значения, в противном случае увеличивается на1.

  1. Опишите алгоритм генерации окружности

По методу построения он похож на рисование линии. В этом алгоритме строится дуга окружности для первого квадранта, а координаты точек окружности для остальных квадрантов получаются симметрично. На каждом шаге алгоритма рассматриваются три пикселя, и из них выбирается наиболее подходящий путём сравнения расстояний от центра до выбранного пикселя с радиусом окружности.

  1. Что такое «растр»?

Растр — точечная структура графического изображения при печати.

  1. Что такое растровая компьютерная графика?

Растровая компьютерная графика основывается на представлении изображения в виде совокупности отдельных точек/пикселей.

  1. Что такое «пиксель»?

Пиксель – это мельчайшая единица изображения в растровой графике. Представляет собой неделимый объект прямоугольной формы, обладающий определенным цветом, градацией серого или прозрачностью.

  1. Как получить отображение толстой линии?

Чтобы получить отображение толстой линии, нужно взять алгоритм вывода тонкой линии и вместо вывода отдельного пиксела поставить вывод фигуры или линии, соответствующей перу.

  1. Как получить отображение пунктирной линии?

Чтобы получить отображение пунктирной линии, нужно взять алгоритм

вывода тонкой непрерывной линии и ввести новую переменную – счетчик пикселов линии. Если она удовлетворяет некоторому условию, то рисуется пиксель заданного цвета с текущими координатами.

Заключение

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

Приложение А

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

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]