- •1. Предмет кг. Области применения кг. Совр. Тенденции развития кг.
- •2. История развития кг. Современные тенденции развития кг.
- •3. Основные понятия кг. Аппаратное обеспечение кг. Принципы формирования изображения.
- •4. Растровые графические дисплеи с регенерацией изображения.
- •5. Устройство электронно-лучевой трубки. Устройство цветной растровой элт. Системы с телевизионным растром.
- •7. Вывод изображения. Система черезстрочной развертки.
- •8. Мультимедиа.
- •9. Оборудование для компьютерной графики.
- •10. Аппаратные решения в компьютерной графике.
- •11. Архитектура рабочих станций. Графический ускоритель. Арi.
- •12. Архитектура графических рабочих станций. Технологии 3d графики.
- •13. Архитектура графических рабочих станций. Принципы конвейерной архитектуры.
- •14. Общие положения алгоритмов сжатия изображений.
- •15. Алгоритмы архивации без потерь: rle, lz/lzw, Хаффман.
- •16. Алгоритмы архивации с потерями, проблемы алгоритмов архивации с потерями. Основные идеи алгоритмов jpeg, фрактальный, волновой.
- •17. Геометрическое моделирование и решаемые им задачи.
- •18. Представление геометрических моделей. Полигональные сетки.
- •19. Аффинные преобразования, их свойства, однородные координаты.
- •20. Аффинные преобразования на плоскости.
- •21. Аффинные преобразования в пространстве. Использование матричного представления. Составные аффинные преобразования в пространстве.
- •22. Проецирование. Общий вид преобразований в пространстве. Виды проекций.
- •23. Этапы создания графического объекта. Преобразование положения объекта. Понятие камеры. Особенности матричных преобразований.
- •24. Понятие растрового алгоритма. Понятие связности. Основные требования, предъявляемые к растровым алгоритмам.
- •25. Растровое представление отрезка: постановка задачи, простейший алгоритм, алгоритм цда.
- •26. Растровое представление отрезка: постановка задачи, алгоритм Брезенхейма.
- •27. Растровое представление отрезка: построение сглаженной линии (метод Флойда-Стейнберга, модификация алгоритма Брезенхейма, сглаживание всей сцены).
- •28. Растровое представление окружности: постановка задачи, простой алгоритм, алгоритм Брезенхейма.
- •29. Алгоритм закраски области, заданной цветом границы.
- •30. Nvidia cuda. Понятие gpgpu.
- •31. История расчётов на gpu. Области применения параллельных расчётов на gpu. История развития cuda.
- •32. Возможности nvidia cuda.
- •33. Преимущества и ограничения cuda.
- •34. Решения с поддержкой nvidia cuda.
- •35. Состав nvidia cuda.
- •36. Оптимизация программ на cuda.
27. Растровое представление отрезка: построение сглаженной линии (метод Флойда-Стейнберга, модификация алгоритма Брезенхейма, сглаживание всей сцены).
Основной причиной лестничного эффекта является то, что отрезок или ребро какой-либо фигуры непрерывны для того, чтобы соответствовать дискретным пикселам экрана дисплея.
При наличии нескольких интенсивностей, т. е. полутонов серого или оттенков цвета, внешний вид ребра или отрезка может быть улучшен размыванием краев. Простой метод состоит в том, чтобы устанавливать интенсивность пиксела на ребре пропорционально площади части пиксела, находящейся внутри многоугольника.
В результате простой модификации алгоритма Брезенхейма можно получить аппроксимацию площади части пиксела, находящейся внутри многоугольника. Эту аппроксимацию можно использовать для модуляции интенсивности. При пересечении пиксела и отрезка с тангенсом угла наклона m (0 <= m <= 1) может быть задействован либо один, либо два пиксела. Если пересекается только один пиксел, то площадь правее и ниже отрезка равна уi+ m/2. Если же надо рассмотреть два пиксела, то площадь нижнего пиксела составляет 1 - (1 - yi)2/2m, а верхнего - (yi-1+m)2/2m. Суммарная площадь для двух пикселов равна уi + m /2.
Алгоритм Брезенхейма, учитывающий площадь части пиксела для устранения ступенчатости.
Если к ошибке в исходном алгоритме Брезенхейма добавить величину w = 1 - m, т.е. ввести преобразование e' = e + w, то 0<=e'<=1. Теперь ошибка е' - это мера площади той части пиксела, которая находится внутри многоугольника, т. е. уi+m/2. В связи с этими модификациями начальное значение ошибки равно 1/2, поэтому для первого пиксела алгоритм, приводившийся на первом рисунке, всегда будет выдавать значение интенсивности, равное половине максимальной. Более реалистичное значение для первого пиксела дает перемещение оператора активирования пиксела на другое место. Более того, можно получить непосредственно значение интенсивности, а не десятичную дробь от ее максимума с помощью умножения на максимальное число доступных уровней интенсивности I следующих величин: тангенса угла наклона (m), весового коэффициента (w) и ошибки е'.
28. Растровое представление окружности: постановка задачи, простой алгоритм, алгоритм Брезенхейма.
Из геометрии мы знаем, что окружность с центром в точке (xc,yc) и радиусом r, задается параметрически с помощью системы уравнений:
Отсюда не сложно получить алгоритм генерации окружности:
Полагаем А=0.
Е сли А больше либо равно 2p, то окружность отрисована.
Вычислим x=Trunc(xc+r*cos(A)), y=Trunc(yc+r*sin(A))
Screen[x,y]=Color
Увеличим A на d и перейдем к шагу 2.
В данном алгоритме d подбираем в зависимости от радиуса окружности и разрешающей способности устройства вывода. Основная причина, по которой использование данного алгоритма нецелесообразно – очень низкая скорость работы, связанная с использованием вещественных чисел, и тем более вычислением тригонометрических функций.
Если точка (x,y) лежит на окружности с центром в точке (0,0), то и точка (x,-y), так же лежит на этой окружности. Последнее утверждение можно развить, а именно: если точка (x,y) лежит на окружности с центром в точке (0,0), то и точки (x,-y);(-x,-y);(-x,y);(y,x),(y,-x);(-y,-x);(-y,x), так же лежат на этой окружности. Координата x увеличивается на единицу на каждом шаге. Так же координата y либо уменьшается на единицу, либо остается без изменений. Нужно выбрать, куда переходить из точки (xi,yi) либо в точку (xi+1,yi), либо в точку (xi+1,yi-1). Для того, чтобы осуществить выбор рассмотрим две невязки:
di1=(xi+1)2+yi2-r2
di2=(xi+1)2+(yi-1)2-r2
А так же будем следить за их суммой:
di=di1+di2
Рассмотрим несколько вариантов расположения "вещественной" окружности относительно "целых" точек:
Случай 1. di1 < 0, di2 < 0, и следовательно di < 0.
Случай 2. di1= 0, di2 < 0, и следовательно di < 0.
Случай 3. di1 > 0, di2 < 0, и следовательно имеем два варианта для di:
Случай 3.1. |di1| < |di2| и следовательно di < 0.
Случай 3.2. |di1| > |di2| и следовательно di > 0.
Случай 4. di1 > 0, di2=0, и следовательно di > 0:
Случай 5. di1 > 0, di2 > 0, и следовательно di > 0:
В случае, если di < 0 надо активировать точку (xi+1,yi), а в случае, если di > 0 надо активировать точку (xi+1,yi-1). di=di1+di2=(xi+1)2+yi2-r2+(xi+1)2+(yi-1)2-r2=2xi2+2yi2+4xi-2yi+3-2r2
Теперь получим выражение di+1 через di .
di+1=2xi+12+2yi+12+4xi+1-2yi+1+3-2r2=di+4(xi-yi)+10
Осталось получить значение d1 в начальной точке (x1=0,y1=r):
d1=3-2r
Если x > y, то выходим.
1. Screen[x+xc,y+yc]:=Color;
2. Screen[x+xc,-y+yc]:=Color;
3. Screen[-x+xc,y+yc]:=Color;
4. Screen[-x+xc,-y+yc]:=Color;
5. Screen[y+xc,x+yc]:=Color;
6. Screen[y+xc,-x+yc]:=Color;
7. Screen[-y+xc,x+yc]:=Color;
8. Screen[-y+xc,-x+yc]:=Color;
Если d < 0, то d:=d+4*x+6, переходим на Шаг 13
d:=d+4(x-y)+10; y:=y-1;