Отчет по лабораторной работе №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
скачать
Другие похожие работы: