При построении изображений с использованием метода ореола сохраняется обычный принятый в Графоре порядок работы: открытие страницы, заведение области и т. д. Cразу после определения области рисования необходимо задать режим проецирования, т. е. центр проекции или направление проецирования на картинную плоскость, перпендикулярную лучу зрения. Pежим проецирования определяется с помощью обращения к программе PRJHL, которая формирует соответствующую матрицу преобразований размером 4 ´ 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 ´ 4.
Программа MXMULT(A,B) позволяет выполнить умножение двух матриц A и B размером 4 ´ 4. Pезультат умножения помещается в A.
Программа STROT3(NAXES,CS,SN,R) предназначена для формирования матрицы поворота R(4,4). Поворот выполняется вокруг одной из главных координатных осей, номер которой определяется параметром NAXES правой системы координат. Kосинус и синус угла поворота задаются параметрами CS и SN.
Программа HCNCOR(X,Y,Z,T). C помощью этой программы по заданным координатам точки в объектной системе координат определяются координаты этой точки после воздействия на нее преобразования, задаваемого матрицей T размером 4 ´ 4.
Программа SORTY(DX,DY,DZ,NL,N1,N2)
служит для упорядочения крайних точек отрезков, заданных массивами