- •1.Двумерные алгоритмы. Преобразование координат: сдвиг, поворот.
- •2.Двумерные алгоритмы. Окна и Области вывода. Отсечение линий (общее представление, простой алгоритм). Автоматический подбор размеров и позиций.
- •3.Двумерные алгоритмы Понятие о рекурсии. Понятие о фракталах. Сглаживание кривых.
- •4.Векторы. Скалярное и векторное произведения векторов.
- •5.Однородные координаты.
- •6.Перенос и повороты в трехмерном пространстве.
- •7.Видовое преобразование
- •8.Перспективное преобразование
- •9.Алгоритм определения невидимых линий.
- •10.Удаление невидимых линий и поверхностей. Алгоритмы плавающего горизонта и Робертса.
- •11.Алгоритм Варнока.
- •12.Алгоритмы построения криволинейных поверхностей.
- •13. Типы графических устройств: графические дисплеи на запоминающей трубке, векторные графические дисплеи с регенерацией изображения, растровые графические дисплеи с регенерацией изображения.
- •14. Устройство электронно-лучевой трубки, устройство цветной растровой элт.
- •16.Алгоритм брезенхема для генерации окружности
- •17.Заполнение многоугольников
- •19. Построение реалистических изображений. Простая модель освещенности. Определение нормали к поверхности. Определение вектора отражения.
- •20. Построение реалистических изображений. Закраска методами Гуро и Фонга.
- •22.Тени.
1.Двумерные алгоритмы. Преобразование координат: сдвиг, поворот.
Преобразование и новые координаты Сдвиг:
Р ассмотрим следующую систему уравнений
Эти уравнения можно интерпретировать двояким образом:
1)Все точки на плоскости ху переместились вправо на расстояние а
2)координатные оси х и у переместились влево на расстояние а
Пусть необходимо повернуть точку Р(х,у) вокруг начала координат О на угол φ. Изображение новой точки обозначим P’(x’,y’). Существуют четыре числа а,b,c,d, такие, что новые координаты х’, y’ могут быть вычислены по значениям старых координат х и у из следующих уравнений
x'=ax+by
y'=cx+dy
Для получения значений а,b,c,d рассмотрим вначале точки (х, у) = (1, 0). Полагая х=1 и у=0 в этой системе получим
x’=a
y’=c.
Но в этом простом случае,как это видно из следующего рисунка, значения x’ и y’ равны соответственно cos φ и sin φ. Тогда будем иметь
а = cos φ
с = sin φ
Аналогичным образом из второй половинки рисунка следует
b = - sin φ
d = cos φ
Т огда исходную систему можно переписать
x’ = x cos φ – y sin φ
y’ = x sin φ + y cos φ
Поворот:
Эта система описывает поворот вокруг начала координат, но обычно это не то, что требуется. Если требуется выполнить поворот относительно заданной точки (х0,у0),то в этом уравнении можно заменить х на х-х0, у на у-у0, x’ на x’-x0, y’ на у‘-у0
x' –x0=(x-x0) cos φ- (y-y0) sin φ
y' – y0=(x-x0) sin φ + (y-y0) cos φ (2)
Матричная запись
С истема уравнений (2) может быть записана в виде одного матричного уравнения
[x’ y’]= [x y]
или с использованием вектора столбца
=
у равнение переноса можно записать в виде
[x’ y’] =[x y 1]
, но лучше записать в виде
[x’ y’] =[x y 1]*
Запись каждого преобразования в форме произведения матриц позволяет совмещать несколько преобразований в одном.
2.Двумерные алгоритмы. Окна и Области вывода. Отсечение линий (общее представление, простой алгоритм). Автоматический подбор размеров и позиций.
ОКНА:
Часто встречаются ситуации. Когда требуется вычертить объекты, размеры которых заданы в единицах, совершенно не совместимых с экранной системой координат.
Проблемно-ориентированные размеры выражаются в так называемых мировых координатах.(х,у).
Введем теперь понятие окна. Окно – это прямоугольник, в пределах которого вычерчивается объект (или его часть). Стороны прямоугольника параллельны координатным осям. Во избежание затруднений в понимании происходящего важно отметить. что окно относится к объекту, но не к изображению, которое будет сформировано. Очевидно, что размеры и положение окна определяется в системе мировых координат..
Необходимо также задать прямоугольную область на экране, которая определит размеры желаемой картинки. Эта область называется областью вывода. Она задается аналогично окну, то есть указываются минимальное и максимальное значения по координатным осям Х и У в единицах измерения на экране, значения которых будут определяться прописными буквами Х и У. Теперь окно нужно отобразить на область вывода. Вначале вычисляются коэффициенты масштабирования по осям: Xmax-Xmin
fx = xmax- xmin
fy = Ymax-Ymin
ymax- ymin
Затем расстояние X-Xmin точки изображения от левого края области вывода вычисляется умножением коэффициента fx на соответствующее расстояние х-хmin
От исходной точки до левого края окна. Расстояние Y – Ymin Следовательно, координаты точки изображения будут определены из соотношений
X = Xmin + fx (x - xmin)
Y = Ymin + fy (y – ymin)
Сделаем замечания.
1)Окно не обязательно должно охватывать весь объект.
2)fx и fy могут быть различны, но если углы на изображении должны бытьтакими же как на объекте, то их надо установить равными, выбрав меньший из коэффициентов
ОТСЕЧЕНИЕ ЛИНИЙ:
Предположим, что мировые и экранные координаты одинаковые, то есть совпадают:
На рисунке показан прямоугольник ABCD, который является окном. В видимые отрезки и линии должны лежать внутри окна. То есть при вычерчивании отрезка прямой линии части, лежащие вне окна, должны быть отсечены. Процесс отсечения должен выполняться автоматически.
На рисунке прямоугольник ABCD вычерчивается раньше, чем треугольник PQR, так что вместо этого треугольника надо вычертить ломаную PP’Q’Q.
П оскольку заданы только три точки P, Q и R, координатная пара (xp’, yp’) должна быть вычислена из значений координат точек (xp, yp) и (xR,yR).Из рисунка видно, что наклон отрезка PR можно вычислить двумя способами, что приводит к следующему уравнению
Совмещая это с соотношением
yp = ymax
п олучим
xp’ = xp +
Отсюда легко вычисляются координаты точки P’, если известно, что концевая точка Р находится внутри окна, а другая концевая точка R (xR, yR) удовлетворяет неравенствам
xmin < xR < xmax
yR > xmax
Однако необходимо рассмотреть значительно больше ситуаций. Представим их в таблице
1001 |
0001 |
0101 |
1000 |
0000 |
0100 |
1010 |
0010 |
0110 |
b3b2b1b0, где bi т быть либо 0, либо 1.
Запишем значения битов используя выражения языка Pasсal
b3 = (x < xmin)
b2 = (x > xmax)
b1 = (y < ymin)
b0 = (y > ymax)
АВТОМАТИЧЕСКИЙ ПОДБОР РАЗМЕРОВ И ПОЗИЦИЙ:
Чтобы картинка была нарисована в пределах границ области вывода, необходимо сначала выполнить отсечение по заданному окну, а затем отразить окно и его содержимое на область вывода. Для многих приложений такая процедура вполне достаточна. Однако достаточно часто требуется другой подход, который отличается следующими аспектами:
1)Объект будет вычерчиваться целиком, так что отсечение не понадобится;
2 )Окно будет определено расчетом, а не задано заранее;
3)при отражении окна на область вывода будет использоваться одинаковый коэффициент масштабирования по обеим осям.
Из первого пункта следует, что объект должен быть конечным.
П ункт 2 может быть реализован путем двойного просмотра данных, описывающих объект. Во время первого просмотра определяются границы окна xmin, xmax, ymin, ymax,
Вычерчивание производится во время второго просмотра. Пункт 3 означает, что любой треугольник на картинке будет подобен исходному треугольнику на объекте, что означает неизменность угловых соотношений при отображении.
В качестве коэффициента масштабирования f выберем наименьшее из значений fx, fy: f = min (fx, fy).
Совершенно ясно, что такой одинаковый коэффициент масштабирования дет к отображению треугольника, который точно равен по величине размеру области вывода по одной из осей, а по другой может остаться свободное пространство. Таким образом изображение желательно поровну разделить соответственно между верней и нижней, между правой и левой частями области вывода. Для этого необходимо правильно рассчитать позицию центра С: Cх: xc = (xmin + xmax) / 2
Xc = (Xmin + Xmax) / 2
Cx = Xc – f xc
Cy: Для Cy аналогично.
Для любой точки объекта (x, y)
X = fx +cx
Y = fy + cy