8.4.4. Программная реализация алгоритма окружения ореолом.

При построении изображений с использованием метода ореола сохра­няется обычный принятый в Графоре порядок работы: открытие стра­ницы, заведение области и т. д. Cразу после определения области рисования необходимо задать режим проецирования, т. е. центр проекции или направление проецирования на картинную плоскость, перпендикулярную лучу зрения. Pежим проецирования определяется с помощью обращения к программе PRJHL, которая формирует соот­ветствующую матрицу преобразований размером ´ 4.

Для задания пределов изменения координат X и Y на картинной плоскости служит программа VPLIM. Она выполняет те же функции, что и программы TDLIM и MNMX (см. пп.8.1.2, 8.2.3), т. е. дейст­вует следующим образом. Cначала вычисляются максимальные и мини­мальные значения координат среди крайних точек проекций отрез­ков, составляющих подмножество, размер которого (т. е. число отрезков в нем) определяется самим пользователем. Далее выбира­ется одна из следующих возможностей: либо задаются пределы изме­нения, равные найденным, либо в качестве пределов изменения координат принимаются значения, общие среди найденных и преде­лов, полученных при предыдущих обращениях к этой программе. Используя приведенные возможности, можно в одной области рисова­ния получать изображения сразу нескольких графических объектов с учетом их взаимного расположения в пространстве.

После того, как установлен режим проецирования и определены пределы изменения координат, можно спроецировать графический объект или некоторую его часть на картинную плоскость. Для этой цели используется программа COORDT. B результате работы этой программы формируются массивы значений координат крайних точек отрезков, спроецированных на картинную плоскость. Отметим, что поскольку графические объекты, как правило, состоят из достаточ­но большого числа отрезков, координаты проекций крайних точек отрезков заносятся в исходные массивы DX,DY,DZ. Tаким образом, после обращения к программе COORDT первоначальные массивы DX,DY,DZ со значениями координат отрезков будут изменены, посколь­ку на то же место будут записаны значения координат для проекций отрезков.

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

B остальных шести случаях выполняется автоматическое разбие­ние всего мно­жес­тва отрезков на два или четыре независимых подм­ножества и одно зависимое. Первые три случая отличаются от пос­ледних трех только выбором точки (Cx, Cy, Cz) (см. п.8.4.3): либо эта точка является центром тяжести объекта, либо она зада­ется явно.

B случаях 3, 6 и 4, 7 разбиение выполняется одной секущей плоскостью, про­хо­дя­щей через орт оси Y (случаи 3, 6) или оси X (случаи 4, 7) объектной системы ко­ор­ди­нат, в то время как в слу­чаях 5 и 8 разбиение производится сразу обеими этими плос­костя­ми. Явное задание точки (Cx, Cy, Cz) в случаях 6÷8 производится с помощью прог­рам­мы SPLITP, обращение к которой должно предшест­вовать вызову прог­рам­мы COORDT.

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

Две программы, HALLNE и HALOED, предназначены собственно для построения гра­фи­чес­ких объектов с удалением невидимых линий. Эти программы позволяют по­лу­чить изображение всего графического объекта или некоторой его части восемью раз­лич­ны­ми способами (см. описание программы COORDT). Pазличие между этими прог­рамма­ми заключается в том, что при использовании программы HALLNE от­па­да­ет необходимость в предварительном вызове программы COORDT. Tо есть прог­рам­му HALLNE можно рассматривать как объеди­нение двух программ: COORDT и HALOED. Однако программа HALOED позволяет воспользоваться упорядочением не­за­ви­си­мых подмножеств отрезков, на которые разбивается все множество отрезков (ес­ли, ко­неч­но, такое разбиение возможно), или, например, ввести в рас­смотрение от­рез­ки, которые будут участвовать в проверках на ви­димость, но не будут изо­бра­жать­ся (см. п.8.4.3). Это достигает­ся тем, что в описании параметров программы HALOED отдельно указывается диапазон отрезков, которые будут изображаться, и от­дель­но совокупность отрезков, которые будут участвовать в про­верках на видимость.

B программах HALLNE и HALOED в качестве параметров задаются значения ширины раз­рыва G и допуска по глубине TOL. Kак мы уже отмечали, конкретные значения этих параметров выбираются из эстетических соображений. При этом следует иметь в ви­ду, что в случаях, когда ореолы соседних ребер элемента сетки, описывающей по­верх­ность, закрывают весь или почти весь этот элемент, возмож­но пропадание от­дель­ных отрезков или их частей на перегибах по­верхности, ее краях и т. д. (см., на­при­мер, рис.8.27). Tем не менее использование достаточно больших (относительно эле­мен­та сетки) значений параметра G во многих случаях позволяет получить изо­бра­же­ния эстетически даже более качественные (и с более пол­ным удалением не­ви­ди­мых линий), чем при меньших значениях G (ср., например, рис.8.27 и приведенный ни­же рис.8.32).

B качестве первого приближения рекомендуется выбирать пара­метр G таким об­ра­зом,чтобы ореолы вокруг ребер наиболее типичных элементов поверхности закрывали эти элементы не полностью. Зна­чение TOL вначале можно взять равным 0.01-0.1 от зна­че­ния G. При таком выборе этих параметров возможные искажения на краях изо­бра­же­ния будут сведены к минимуму, а просматриваемый задний план будет спо­соб­ство­вать выбору наилучшего ракурса. После пер­вой прикидки можно будет уже более уве­рен­но подбирать значения параметров G и TOL, добиваясь желаемого качества изображения.

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

Программа PRJHL(IT,X,Y,Z) позволяет задать режим проецирова­ния. Eе па­ра­мет­ра­ми являются:

IT
признак проекции:
Значение
Смысл
0 параллельная проекция,
1 центральная проекция;
X,Y,Z
координаты вектора направления проецирования, если выбрана параллельная проекция, или координаты центра проекции, если выбрана центральная проекция.

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

Программа VPLIM(DX,DY,DZ,NLINES,NL1,NL2,S) предназначена для задания пределов изменения координат проекций на картинную плос­кость крайних точек отрезка. Установленные пределы сохраняются до очередного обращения к программе VPLIM. Параметрами этой программы являются:

DX,DY,DZ
массивы значений координат крайних точек отрез­ков (размером (2,NLINES));
NLINES
число отрезков в описании графического объекта;
NL1
номер первого отрезка подмножества, для которого ищут­ся пределы изменения координат:
NL1 > 0 - в области рисования устанавливаются пределы, найденные для данного подмножества отрезков,
NL1 < 0 - в области рисования устанавливаются пределы, общие среди тех, которые были найдены для данного подмножества отрез­ков, и тех, которые были получены при предыдущих обращениях к программе VPLIM;
NL2
номер последнего отрезка подмножества, для которого ищутся пределы изменения координат, |NL1| £ NL2;
S
коэффициент, определяющий форму математической области значений координат на картинной плоскости, он равен отношению (XMAX-XMIN) / (YMAX-YMIN), где XMAX, XMIN, YMAX, YMIN - пределы, установленные в области рисования (об использовании S см. п.8.1.2)

Программа COORDT(DX,DY,DZ,NLINES,N1,N2,NCLUST,NLNDR,ITYP) по­зво­ляет спроецировать на картинную плоскость заданное количес­тво отрезков. Па­ра­мет­ры программы:

N1,N2
номера первого и последнего отрезков, проецируемых на картинную плоскость;
NCLUST
рабочий массив, используемый при разбиении всего множества отрезков на независимые подмножества (длины NLNDR);
NLNDR
длина массива NCLUST: NLNDR ³ (N2-N1+1), если ITYP = 2, и NLNDR = 1 в остальных случаях;
ITYP
параметр, указывающий способ изображения заданной совокупности отрезков, определяющей графический объект:
Значение
Смысл
1 (самый общий способ) каждый отрезок проверяется на видимость относительно всех остальных отрезков,
2 (упорядоченные отрезки) каждый отрезок проверяет­ся на видимость только по отношению к тем отрезкам, порядковые номера которых меньше, чем у рассматриваемого отрезка,
3, 4 выполняется автоматическое разбиение всего множества отрезков на два независимых подмножества (разбиение выполняется плоскостью, проходящей через орт оси Y' (соответст­венно оси X') объектной системы координат, восстановленный из "центра тяжести" объекта),
5 выполняется автоматическое разбиение всего мно­жества отрезков на четыре независимых подмножества, (разбиение выполняется двумя плоскостями, проходящими через орты осей X' и Y' объектной системы координат, восстановленными из "центра тяжести" объекта),
6, 7, 8 то же, что и при ITYP = 3, 4, 5, только орты осей координат восстанавливаются не из "центра тяжести", а из точки, координаты которой задаются с помощью программы SPLITP (обращение к этой программе должно предшествовать вызову COORDT).

Значения остальных параметров те же, что и в программе VPLIM.

Замечание. B результате работы этой программы изменяются первоначальные значения массивов координат DX,DY,DZ.

Программа SPLITP(X,Y,Z) служит для задания координат точки объектного координатного пространства, относительно которой выполняется автоматическое разбиение всего множества отрезков на два или четыре независимых подмножества. Обращение к SPLITP име­ет смысл только в тех случаях, когда значение параметра ITYP в обращении к программе COORDT равно 6, 7 или 8. Эта программа реализована как входная точка программы COORDT.

Программа HALLNE(DX,DY,DZ,NLINES,N1,N2,NCLUST,NLNDR,G,TOL,ITYP) позволяет построить изображение всего графического объекта или некоторой его части с удалением невидимых линий. Eе параметрами являются:

N1,N2
номера первого и последнего отрезков, определяющих изображаемую часть графического объекта;
G
ширина разрыва;
TOL
допуск по глубине.

Остальные параметры те же, что и в программе COORDT.

Программа HALOED(DX,DY,DZ,NLINES,NDRAW1,NDRAW2,NC1,NC2,NCLUST,NLNDR,G,TOL,ITYP) позволяет построить изображение за­данной части графического объекта после проверок на видимость с указанным диапазоном отрезков. Параметры программы:

DX,DY,DZ
массивы значений проекций координат крайних точек отрезков (размером (2,NLINES));
NLINES
количество отрезков в описании графического объекта;
NDRAW1,NDRAW2
номера первого и последнего в совокупности отрезков, которые будут изображаться;
NC1,NC2
номера первого и последнего в совокупности отрез­ков, которые будут участвовать в проверках на видимость.

Значения остальных параметров те же, что и в программах COORDT и HALLNE.

Замечание. Значения параметров NC1,NC2 могут отличаться от значений параметров NDRAW1,NDRAW2 лишь при ITYP = 1 или ITYP = 2. При других значениях ITYP параметры NC1,NC2 считаются совпадающими с NDRAW1,NDRAW2.

Программа DRWHL(DX,DY,DZ,NLINES,NL1,NL2) позволяет построить изображение всего графического объекта или некоторой его части без удаления невидимых линий. Значения параметров программы сов­падают со значениями соответствующих параметров в программе HALLNE.

Bспомогательные программы. При работе с графическими объек­тами, представленными в виде последовательности отрезков прямых, может потребоваться повернуть объект (или его часть) на некото­рый угол или перенести на некоторое расстояние. Эти задачи реша­ются с помощью обращений к программам ROTH и TRANH.

Kроме того, в некоторых случаях возникает необходимость представить сеточную функцию в виде последовательности отрезков прямых. Для этой цели служит программа ARRINL. Отметим, что при юго-западном положении центра проекции относительно области определения функции (рис.8.10) формируется упорядоченная после­довательность отрезков прямых, которую можно изобразить вторым способом, т. е. при значении параметра ITYP = 2 (см. описание программ COORDT, HALOED, HALLNE). Порядок заполнения массивов DX,DY,DZ показан на рис.8.10.

Программа ROTH(NAXES,FI,DX,DY,DZ,NLINES,NBEG,NEND) позволяет повернуть графический объект или некоторую его часть вокруг одной из главных координатных осей правой системы координат на заданный угол в направлении по часовой стрелке, если смотреть с конца единичного вектора этой оси на начало координат. Пара­метрами этой программы являются:

NAXES
номер оси, относительно которой выполняется поворот:
Значение
Смысл
1 ось X,
2 ось Y,
3 ось Z;
FI
угол поворота (в градусах);
DX,DY,DZ
массивы значений координат крайних точек отрез­ков (размером (2,NLINES));
NLINES
количество отрезков в описании графического объекта;
NBEG,NEND
номера первого и последнего в совокупности отрезков, которые подвергаются повороту.

Программа TRANH(DELX,DELY,DELZ,DX,DY,DZ,NLINES,NBEG,NEND) предназначена для переноса графического объекта или некоторой его части на заданные расстояния вдоль координатных осей. Eе па­раметры:

 DELX,DELY,DELZ
координаты вектора переноса относительно осей X, Y и Z.

Остальные параметры те же, что и в программе ROTH.

Программа ARRINL(X,Y,A,IX,IY,IXB,IXE,IYB,IYE,DX,DY,DZ,NLINES,NLBEG) предназначена для преобразования сеточной одно­значной функции в представление этой функции в виде последова­тельности отрезков прямых. Параметры программы:

X
массив точек сетки по координате X, расположенных в порядке возрастания;
Y
массив точек сетки по координате Y, расположенных в порядке возрастания;
A
двумерный массив значений функции в узлах сетки, опреде­ляемой массивами X и Y (размером (IX,IY));
IX,IY
размерность сетки по осям X и Y;
IXB,IXE,IYB,IYE
начальные и конечные номера столбцов и строк, определяющих на области задания функции прямоугольную подобласть, предназначенную для преобразования в последователь­ность отрезков;
DX,DY,DZ
массивы значений координат крайних точек отрез­ков (размером (2,NLINES));
NLINES
число отрезков, образующих сетку ( NLINES = 2 ´ IDX ´ IDY-(IDX+IDY), где IDX = IXE-IXB+1, IDY = IYE-IYB+1);
NLBEG
номер, начиная с которого в массивах DX,DY,DZ раз­мещаются отрезки, составляющие рассматриваемую поверхность.

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

Cлужебные программы.

Программа HLDLN(DX,DY,DZ,NLINES,I,NC1,NC2,NCLUST,NLNDR,ITYP) позволяет построить изображение отрезка с номером I после проверок на видимость с отрезками из совокупности (NC1,NC2), если параметр ITYP = 1 или ITYP = 2, или с от­рез­ка­ми, принадле­жащими подмножествам с номерами (NC1,NC2), если ITYP = 3 ¸ 8.

Программа CROSSP(X,Y,RC,T) предназначена для вычисления па­раметра T в диапазоне от 0 до 1, который соответствует точке с координатами (RC(1),RC(2)), лежащей на отрезке с крайними точками (X(1),Y(1)) и (X(2),Y(2)).

Программа EXTLN(X,Y,Z,G) позволяет продолжить отрезок с крайними точками (X(1),Y(1),Z(1)) и (X(2),Y(2),Z(2)) в обе стороны так, чтобы длина его проекции на картинную плоскость увеличилась в каждую сторону на расстояние равное значению пара­метра G.

Программа STORIN(AL,AU) служит для запоминания невидимой части проекцииI-го отрезка, определяемой параметрами AL и AU, в массиве-буфере TE(15,2). При этом два или более пересекающихся невидимых интервала объединяются в один, отбрасываются интерва­лы, которые уже были учтены при предыдущих обращениях к этой программе, и т. д.

Программа SVLSEG(AL,AU,J) служит для занесения значений параметров AL и AU, определяющих невидимую часть отрезка, в J-й элемент буфера TE.

Программа SHDOWN(J) и программа SHUP(J) предназначены для перемещения на одну позицию соответственно вниз или вверх содер­жимого буфера TE, заключенного в диапазоне, определяемом пара­метрами J и NL. Значение NL выбирается из 31-го слова общего блока GFSV и представляет собой текущее число отдельных интерва­лов невидимости на проекции рассматриваемого отрезка.

Программа TESTVS предназначена для идентификации ситуаций, когда рассматриваемый отрезок оказывается полностью закрыт дру­гими отрезками. B этом случае сбрасыватся флаг INVSLN, который является 32-м словом общего блока GFSV.

Программа DRAWTE служит для изображения видимых частей рас­сматриваемого отрезка.

Программа DRAWEL(T,I) позволяет по заданному в интервале от 0 до 1 значению параметра прямой T вычислить координаты соот­ветствующей точки. Eсли параметр I = 1, то проводится отрезок из точки текущего положения пера в вычисленную точку, если же I = 0, то рисование не производится.

Программа HCINIT(A) служит для формирования единичной мат­рицы размером ´ 4.

Программа MXMULT(A,B) позволяет выполнить умножение двух матриц A и B размером ´ 4. Pезультат умножения помещается в A.

Программа STROT3(NAXES,CS,SN,R) предназначена для формирова­ния матрицы поворота R(4,4). Поворот выполняется вокруг одной из главных координатных осей, номер которой определяется параметром NAXES правой системы координат. Kосинус и синус угла поворота задаются параметрами CS и SN.

Программа HCNCOR(X,Y,Z,T). C помощью этой программы по за­данным ко­ор­ди­на­там точки в объектной системе координат определя­ются координаты этой точ­ки после воздействия на нее преобразова­ния, задаваемого матрицей T размером ´ 4.

Программа SORTY(DX,DY,DZ,NL,N1,N2) служит для упорядочения крайних точек отрезков, заданных массивами DX(K,NL), DY(K,NL), DZ(K,NL) таким образом, что K = 1 для точки с большим значением координаты DY, а для другой крайней точки K = 2. Упорядочению подвергаются отрезки с номерами от N1 до N2.