NetNado
  Найти на сайте:

Учащимся

Учителям



Отчет по лабораторной работе №3 по дисциплине компьютерная графика


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

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

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Институт кибернетики

Кафедра информатики и проектирования систем

Отчет по лабораторной работе №3
по дисциплине КОМПЬЮТЕРНАЯ ГРАФИКА


Разработчик:

студент группы 8в83

Сафронов Б.А.


Согласовано:

доцент

Демин А. Ю.


Томск 2011

Задание:

Реализовать простейший векторный редактор, позволяющий рисовать окружности. Редактировать их за узлы (центр окружности). Функции редактирования: изменение координат центра, изменение радиуса, удаление окружности, задание стилей линий. Окружности рисуются по алгоритму Брезенхейма.

Теоретическая часть:

Алгоритм Брезенхе́ма (англ. Bresenham's line algorithm) — это алгоритм, определяющий, какие точки двумерного растра нужно закрасить, чтобы получить близкое приближение прямой линии между двумя заданными точками. Это один из старейших алгоритмов в машинной графике — он был разработан Джеком Е. Брезенхэмом (Jack E. Bresenham) в компании IBM в 1962 году. Алгоритм широко используется, в частности, для рисования линий на экране компьютера.

Отрезок проводится между двумя точками — (x0,y0) и (x1,y1), где в этих парах указаны колонка и строка, соответственно, номера которых растут вправо и вниз. Сначала мы будем предполагать, что наша линия идёт вниз и вправо, причём горизонтальное расстояние x1 − x0 превосходит вертикальное y1 − y0, т.е. наклон линии от горизонтали — менее 45°. Наша цель состоит в том, чтобы для каждой колонки x между x0 и x1, определить, какая строка y ближе всего к линии, и нарисовать точку (x,y).

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

Реализация:

private void draw() {

for (int i = 0; i < a.Count; i++)

{

int X1 = a[i].e.X;

int Y1 = a[i].e.Y;

int R = a[i].r;

int x = 0;

int y = R;

int delta = 2 - 2 * R;

int error = 0;

Color col = a[i].color ;

while (y >= 0)

{

if (isIn(X1 + x, Y1 + y))

draw_lin(X1 + x, Y1 + y,a[i].width, col);

if (isIn(X1 + x, Y1 - y))

draw_lin(X1 + x, Y1 - y,a[i].width ,col);

if (isIn(X1 - x, Y1 + y))

draw_lin(X1 - x, Y1 + y,a[i].width ,col);

if (isIn(X1 - x, Y1 - y))

draw_lin(X1 - x, Y1 - y, a[i].width, col);

error = 2 * (delta + y) - 1;

if ((delta < 0) && (error <= 0))

{

delta += 2 * ++x + 1;

continue;

}

error = 2 * (delta - x) - 1;

if ((delta > 0) && (error > 0))

{

delta += 1 - 2 * --y;

continue;

}

x++;

delta += 2 * (x - y);

y--;

}}

private void draw_lin(int c_x, int c_y, int s,Color colo)

{

for (int i = c_x - s; i < c_x +s; i++)

{

for (int j = c_y - s; j < c_y +s; j++)

{

if (isIn(i, j)&& Math.Sqrt(Math.Pow(i-c_x,2)+Math.Pow(j-c_y,2))<=s)

{

btmBack.SetPixel(i, j, colo);

}}}}



Результат:







Вывод:В результате выполнения лабораторной работы мною была изучено построение дракона Харпера Хейтуэя и реализован алгоритм на языке Delphi. Построение происходит через прорисовку прямых линий под углом в 90*;

страница 1


скачать

Другие похожие работы: