3.7 Эффект зазубренного ребра
Аналогичный эффект возникает и справа при x = 18. Такой эффект приводит к появлению зазубренных боковых ребер. Проблема с зазубренностью боковых ребер решается включением в массивы верхнего и нижнего горизонтов ординат, соответствующих штриховым линиям на рис. 3.7. Это можно выполнить эффективно, создав ложные боковые ребра. Приведем алгоритм, реализующий эту идею для обеих ребер.
Обработка левого бокового ребра:
Если Pn является первой точкой на первой кривой, то запомним Pn в качестве Pn-1 и закончим заполнение. В противном случае создадим ребро, соединяющее Pn и Pn-1.
Занесем в массивы верхнего и нижнего горизонтов ординаты этого ребра и запомним Pn в качестве Pn-1.
Обработка правого бокового ребра:
Если Pn является последней точкой на первой кривой, то запомним Pn в качестве Pn-1 и закончим заполнение. В противном случае создадим ребро, соединяющее Pn и Pn-1.
Занесем в массивы верхнего и нижнего горизонтов ординаты этого ребра и запомним Pn в качестве Pn-1.
Теперь полный алгоритм выглядит так:
Для каждой плоскости z = const.
Обработать левое боковое ребро.
Для каждой точки, лежащей на кривой из текущей плоскости:
Если при некотором заданном значении x соответствующее значение у на кривой больше максимума или меньше минимума по у для всех предыдущих кривых при этом x, то кривая видима (в этой точке). В противном случае она невидима.
Если на сегменте от предыдущего (xn) до текущего (xn+k) значения x видимость кривой изменяется, то вычисляется пересечение (xi).
Если на участке от xn до (xn+k) сегмент кривой полностью видим, то он изображается целиком; если он cтал невидимым, то изображается его кусок от xn до xi; если же он стал видимым, то изображается его кусок от xi до xn+k.
Заполнить массивы верхнего и нижнего плавающих горизонтов.
Обработать правое боковое ребро.
Если функция содержит очень острые участки (пики), то приведенный алгоритм может дать некорректные результаты. Во избежании этого если встречаются узкие участки, то функцию следует вычислять в большем числе точек.
3.8 Функция y = (1/5) sin x cos z - (3/2) cos (7a/4) * exp (-a), a = (x - p)2 + (z - p)2, изображённая в интервале (0, 2p) с помощью алгоритма плавающего горизонта
На рис. 3.8 показан типичный результат работы алгоритма плавающего горизонта. Запись этого алгоритма приводиться ниже.
Алгоритм плавающего горизонта
Гэкран – разрешение экрана в горизонтальном направлении
Вэкран – разрешение экрана в вертикальном направлении
Верх – массив, содержащий координаты верхнего горизонта
Низ – массив, содержащий координаты нижнего горизонта
Y – текущее значение функции y = f ( x, z ) при z = const
Тфлаг – флаг видимости для текущей точки
Пфлаг – флаг видимости для предыдущей точки, равный
0 = невидима
1 = видима и выше верхнего горизонта
-1 = видима и ниже нижнего горизонта
Draw – графическая команда, которая чертит видимую линию между точками, заданными их координатами.
Xmin, Xmax – минимальная и максимальная абсциссы функции
Xшаг – шаг приращения вдоль оси x
Zmin, Zmax – минимальная и максимальная аппликата функции
Zшаг – шаг между плоскостями z = const
Dimension Верх (Гэкран), Низ (Гэкран)
инициализация переменных
Xлевое = -1; Yлевое = -1; Xправое = -1; Yправое = -1
инициализация массивов горизонтов
Верх = 0
Низ = Вэкран
Вычисление функции на каждой плоскости z = const, начиная с ближайшей к наблюдателю плоскости Zmax
for z = Zmax to Zmin step - Zшаг
инициализация предыдущих значений по x и y: Xпред и Yпред
Xпред = Xmin
Yпред = f (Xmin, z)
если используется видовое преобразование, то его нужно применить к Xпред, Yпред, z в данной точке
обработка левого бокового ребра
call Обрребра (Xпред, Yпред, Xлев, Yлев; Верх, Низ)
call Видимость (Xпред, Yпред, Верх, Низ; Пфлаг)
для каждой точки на кривой, лежащей в плоскости z = const
for x = Xmin to Xmax step Xшаг
y = f (x, z)
если используется видовое преобразование, то его нужно применить к данной точке
проверка видимости текущей точки и заполнение соответствующего массива горизонта
call Видимость (x, y, Верх, Низ; Тфлаг)
if Тфлаг = Пфлаг then
if (Тфлаг = 1) or (Тфлаг = -1) then
Draw (Xпред, Yпред, x, y)
call Горизонт (Xпред, Yпред, x, y; Верх, Низ)
end if
если видимость изменилась, то вычисляется пересечение и заполняется массив горизонта
else
if Тфлаг = 0 then
if Пфлаг = 1 then
call Пересечение (Xпред, Yпред, x, y, Верх; Xi, Yi)
else
call Пересечение (Xпред, Yпред, x, y, Низ; Xi, Yi)
end if
Draw (Xпред, Yпред, Xi, Yi)
сall Горизонт (Xпред, Yпред, Xi, Yi, Верх, Низ)
else
if Тфлаг = 1 then
if Пфлаг = 0 then
call Пересечение (Xпред, Yпред, x, y, Верх; Xi, Yi)
Draw (Xi, Yi, x, y)
сall Горизонт (Xi, Yi, x, y; Верх, Низ)
else
call Пересечение (Xпред, Yпред, x, y, Низ; Xi, Yi)
Draw (Xпред, Yпред, Xi, Yi)
call Горизонт (Xпред, Yпред, Xi, Yi; Верх, Низ)
call Пересечение (Xпред, Yпред, x, y, Верх; Xi, Yi)
Draw (Xi, Yi, x, y)
call Горизонт (Xi, Yi, x, y; Верх, Низ)
end if
else
if Пфлаг = 0 then
call Пересечение (Xпред, Yпред, x, y, Верх; Xi, Yi)
Draw (Xi, Yi, x, y)
call Горизонт (Xi, Yi, x, y; Верх, Низ)
else
call Пересечение (Xпред, Yпред, x, y, Верх; Xi, Yi)
Draw (Xпред, Yпред, Xi, Yi)
call Горизонт (Xпред, Yпред, Xi, Yi; Верх, Низ)
call Пересечение (Xпред, Yпред, x, y, Низ; Xi, Yi)
Draw (Xi, Yi, x, y)
call Горизонт (Xi, Yi, x, y; Верх, Низ)
end if
end if
end if
end if
вновь инициализировать Пфлаг, Xпред, Yпред
Пфлаг = Тфлаг
Xпред = x
Yпред = y
next x
обработка правого концевого ребра
call Обрребра (x, y, Xправ, Yправ; Верх, Низ)
next z
finish
подпрограмма обработки бокового ребра
Subroutine Обрребра (x, y, Xребра, Yребра; Верх, Низ)
если Xребра = -1, то встречена первая кривая и ребро не создаётся
if Xребра = -1 then 1
call Горизонт (Xребра, Yребра, x, y; Верх, Низ)
... Разновидности компьютерной графики Двумерная графика Двумерная компьютерная графика классифицируется по типу представления графической информации, и следующими из него алгоритмами обработки изображений. Обычно, компьютерную графику разделяют на: · векторную · растровую, · фрактальную Они отличаются принципами формирования изображения при отображении на экране монитора или при печати на ...
... в качестве реальной альтернативы системе Unix. _ 23.Платформа Intel ПК с процессором Intel продолжает оставаться наиболее распространённой платформой в сфере компьютерной графики и анимации. Главным событием, имеющим к ней непосредственное отноше- ние, стала демонстрация компанией Autodesk четвёртой версии программы 3D Studio - ...
... простыми. Большинство цветовых оттенков образуется смешением основных цветов. Способ разделения цветового оттенка на составляющие компоненты называется цветовой моделью. Существует много различных типов цветовых моделей, но в компьютерной графике, как правило, применяется не более трех. Эти модели известны под названиями: RGB, CMYK, НSB. Цветовая модель RGB Наиболее проста для понимания и ...
... прочие). В соответствии с принципами формирования изображения аддитивным или субтрактивным методами разработаны способы разделения цветового оттенка на составляющие компоненты, называемые цветовыми моделями. В компьютерной графике в основном применяют модели RGB и HSB (для создания и обработки аддитивных изображений) и CMYK (для печати копии изображения на полиграфическом оборудовании). Цветовые ...
0 комментариев