8.3.2. Построение центральных проекций.

Pассмотрим алгоритм построения центральной проекции поверхности, заданной фун-к-цией z = f(х, у), область определения которой в плоскости XY ограни­чена не­пе­ре­се­ка­ю­щи­ми­ся ломаными линиями. В области определения строится тре­у­голь­ная сет­ка, в узлах которой заданы значения фун­кции f(х, у). Эта функция при­бли­жа­ется фун­к­цией та­ким образом, что над каждым треугольником функция f(х, у), за­ме­ня­ется линейной по трем заданным значениям. Функция пред­став­ля­ет собой поверхность, сложенную из треугольных элемен­тов, их про­ек­ции и бу­дут рассматриваться. В узловых точках зна­чения функции f(х, у) и бу­дут сов­па­дать.

На взаимное расположение центра проекции, поверхности и кар­тинной плоскости накладываются следующие ограничения:

а) точка (XV, YV) - проекция точки зрения на плоскость XY - должна лежать вне области определения функции;

б) проецируемая поверхность должна целиком находиться "перед лицом" наблюдателя, т. е. она должна полностью лежать по одну сторону от плоскости, параллельной картинной плоскости и прохо­дящей через центр проекции.

Применяемый алгоритм удаления невидимых линий основывается на методе экранирования. Смысл этого метода заключается в том, что отмечается часть плоскости, занятая изображением, и при про­ведении новой линии рисуется только тот ее отрезок, который не попадает в эту уже занятую часть плоскости.

Следовательно, треугольные элементы поверхности должны быть упорядочены так, чтобы при рисовании последующие не закрывали предыдущих. Упорядочение элементов поверхности согласуется с упорядочением соответствующих треугольников в области опреде­ления функции и поэтому сначала изображается элемент, соответ­ствующий тому треугольнику в области определения, который не закрывается никаким другим, затем - элемент, соответствующий треугольнику, который может закрываться лишь первым, и т. д. В условиях принятых ограничений на взаимное расположение центра проекции, картинной плоскости и поверхности такое упорядочение всегда существует (см. СПИСОК ЛИТЕРАТУРЫ).

Алгоритм упорядочения включает в себя алгоритм определения видимости от­дель­но­го треугольника. Будем называть сторону треу­гольника условно видимой, если угол меж­ду вектором внешней нор­мали и проекцией луча зрения больше 90°. В про­тив­ном случае сто­рона называется условно невидимой. Tреугольник ABC (рис.8.18) с ос­но­ва­ни­ем AB, где AB - граничный отрезок, считается видимым и выбирается, если сто­ро­на AB условно видима, а две другие стороны либо условно невидимы, либо ус­лов­но видимая сторона является граничной. При этом никакая из условно видимых гра­нич­ных сторон не должна закрываться другими условно видимыми отрезками гра­ни­цы.


Рис.8.18. К построению упорядоченной последовательности треугольников .

Пусть выбран видимый треугольник ABC. Выбор очередного видимого тре­у­голь­ника производится следующим образом. Если сторона AC была условно невидимой, то в пер­вую очередь исследуется треу­гольник с основанием AC. Если он не подходит, то про­ве­ря­ем треу­гольники, лежащие от него слева и справа вдоль границы. Если и эти треугольники не подходят, еще раз сдвигаемся влево и вправо и так до тех пор, по­ка не найдем подходящий треугольник, либо не обойдем весь контур, которому при­над­ле­жит отрезок AC. В этом случае выбираем ближайший к точке (XV, YV) гра­нич­ный отрезок и выполняем для него аналогичную операцию. Если же с самого начала сто­ро­на AC была условно видимой (при выборе предыдущего треу­гольника), то этот про­цесс начинаем с отрезка CB.

После того как сделан выбор треугольника в области определе­ния, элемент поверхности, соответствующий этому треугольнику, изображается с учетом текущего экрана. Затем экран изменяется и осуществляется переход к выбору очередного треугольника. И так до тех пор, пока не будут исчерпаны все треугольники.

 

8.3.3. Экранирование.

По мере рисования элементов поверхнос­ти требуется запоминать ту часть картинной плоскости, которая уже занята изображением. Для проведения необходимых вычислений нужно, прежде всего, выбрать на картинной плоскости некоторую систему координат x1y1 (рис.8.19). Направим ось x1 вправо (если смотреть от наблюдателя, стоящего вертикально в центре проекции) параллельно линии пересечения картинной плоскости с плоскостью xy. Ось y1 выберем перпендикулярной оси x1 и направ­ленной в сторону возрастания координаты z.

Для проведения экранирования в картинной плоскости определя­ется пря­мо­у­голь­ник со сторонами, параллельными осям координат, внутри которого будет за­клю­че­но изображение. Часть прямоугольни­ка, которая уже занята изображением и в ко­то­рой рисовать запре­щается, запоминается следующим образом. Прямоугольник мыс­лен­но разбивается на равные части рядом вертикальных линий, назовем их экранными линиями (рис.8.20), т.е. вводится физическая сетка (ср. с пп.8.1.2, 8.2.1). На каж­дой экранной линии выделяются отрезки, принадлежащие той фигуре, которую нуж­но запомнить. На­бор таких отрезков и является экраном, характеризующим эту фи­гу­ру.


Рис.8.19. Выбор системы координат на картинной плоскости.


Рис.8.20. Экранные линии. Экран.

Изображение поверхности строится последовательно по отдель­ным треугольникам в том порядке как описывалось выше. При рисовании каждого треугольника вы­чер­чи­ва­ются те его стороны, ко­торые до этого еще не рисовались (каждое ребро при­над­ле­жит двум треугольникам, но вычерчивается оно всего один раз). Вычерчива­ние про­и­с­хо­дит при неизменном экране, затем экран модифицирует­ся. В экран за­но­сят­ся отрезки экранных линий, которые оказывают­ся внутри спроецированного тре­у­голь­ни­ка. При этом, если необхо­димо, происходит склеивание нескольких от­рез­ков в один.

Для запоминания экрана служат два массива ISCR и SCRN. Mас­сив SCRN трех­мер­ный, граничными значениями его индексов являются следующие величины: ко­ли­чес­т­во экранных линий, характеризующее частоту физической сетки, число отрезков на од­ной экранной линии и число 2. Для оценки максимального числа отрезков, которое мо­жет встречаться на экранных линиях, поступаем следующим образом (см. СПИСОК ЛИТЕРАТУРЫ). Спро­е­ци­ру­ем центр проекции на плоскость xy и подсчитаем, сколько раз луч, выходящий из построенной точки, может пересе­кать область определения, и к результату при­ба­вим единицу. Число отрезков на каждой экранной линии не будет превышать по­лу­чен­ной величины. Например, для области, показанной на рис.8.21, число отрезков на эк­ран­ной линии не превысит трех для центра проекции в точке 1 и двух - в точке 2.


Рис.8.21. К определению максимального числа отрезков на экранной линии.

Число 2 в описании массива SCRN обусловлено тем, что запо­минаются начало и конец отрезка. Поэтому k-й отрезок на i-й экранной линии записывается в этом массиве так: его координата Y меняется в пределах SCRN(I, K, 1) £ Y £ SCRN(I, K, 2). Другой массив, ISCR, одномерный, его длина определяется количеством экран­ных линий. В ISCR(I) запоминает­ся число отрезков на i-й экранной линии. Перед началом рисования массив ISCR обнуляется.

При изображении очередного треугольника приходится искать точки пересечения его ребер с границей фигуры, внутри которой рисовать запрещено. Поэтому надо уметь восстанавливать границу фигуры по ее экрану. Чтобы понять как это делается, достаточно рассмотреть случай с двумя соседни­ми экранными линиями.

а) Число отрезков на них одинаково

Tогда нижние отрезки соеди­няются между собой, верх­ние - между собой, осталь­ные - ана­ло­гич­но.

б) Число отрезков различно

Построение границы идет как в а), только на той линии, где отрезков больше, (n-k) наименьших по длине отрезков в построении не участвуют.

Описать коротко сам процесс изображения отрезка с учетом экрана можно следующим образом. Будем говорить, что характерис­тика видимости точки на картинной плоскости равна 1, если точка лежит вне экрана, и 0 в противном случае. Для того чтобы нарисо­вать отрезок, нужно найти точки, где меняется характеристика видимости. Эти точки ищутся так. Экранными линиями весь отрезок разбивается на меньшие отрезки, для каждого из них определяются характеристики видимости его концов. Если они различны, то ищет­ся точка пересечения отрезка с граничной линией экрана, в про­тивном случае исследуется следующий малый отрезок и т. д.