8.2.3. Описание программ.

Программа MNMX(VX,VY,VZ,X,Y,A,LLX,LLY,LXINI,LXE,LYIN,LYE,S) служит для задания пределов изменения изображаемой функции на картинной плоскости. Пределы устанавливаются либо для всей области задания функции, либо для некоторой ее прямоугольной подобласти. Обращение к программе может быть как до, так и после вызова программы REGION. Установленные пределы сохраняются до очередного обращения к программе MNMX. Программа имеет следующие параметры:

VX,VY,VZ
координаты центра проекции в системе коорди­нат XYZ;
X,Y
координаты точек сетки по осям X и Y, расположенные в порядке возрастания;
A
значения функции в узлах сетки (двумерный массив раз­мером (LLX,LLY));
LLX,LLY
размеры сетки по осям X и Y;
LXINI,LXE
индексы сетки по оси X, определяющие левую и правую границы подобласти;
LXINI > 0 - в области рисования, определенной обращением к программе REGION, устанавливаются найденные для данной функции пределы,
LXINI < 0 - в области рисования устанавливаются пределы, общие для пределов изменения данной функции и пределов, получен­ных при предыдущих обращениях к программе MNMX;
LYIN,LYE
индексы сетки по оси Y, определяющие нижнюю и верхнюю границы подобласти;
S
коэффициент, определяющий форму математической области значений функции на картинной плоскости: он равен отношению (XMAX-XMIN) / (YMAX-YMIN), где XMAX, XMIN, YMAX, YMIN - пределы изменения функции, устанавливаемые в области рисования.

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

Программа PRSP(VX,VY,VZ,X,Y,A,LLX,LLY,LXINIT,LXEND,LYINIT,LYEND,XF1,YF1,RMAX,RMIN,NN) позволяет построить в области ри­сования центральную проекцию всей заданной поверхности либо ее некоторого участка с удалением невидимых линий. Программа имеет следующие параметры:

VX,VY,VZ
координаты центра проекции в системе координат XYZ;
X,Y
координаты точек сетки по осям X и Y, расположенных в порядке возрастания;
A
значения функции в узлах сетки (двумерный массив раз­мером (LLX,LLY));
LLX,LLY
размеры сетки по осям X и Y;
LXINIT,LXEND
индексы сетки по оси X, определяющие левую и правую границы проецируемого участка поверхности;
LXINIT > 0 - перед рисованием экран инициируется, т. е. старое значение его, оставшееся от предыдущих обращений к программе PRSP, уничтожается;
LXINIT < 0 - рисование осуществляется с учетом экрана, оставшегося от предыдущих обращений к программе PRSP;
LYINIT,LYEND
индексы сетки по оси Y, определяющие нижнюю и верхнюю границы проецируемого участка поверхности;
LYINIT > 0 - перед изображением проецируемого участка повер­хности или каждой из его частей, полученных при разбиении в случае неуглового положения центра проекции, происходит иници­ализация экрана;
LYINIT < 0 - рисование выполняется с учетом экрана, оставше­гося от изображения предыдущих участков поверхности или их частей, полученных при разбиении (это дает возможность получить полное значение экрана от всего проецируемого участка поверхнос­ти независимо от положения центра проекции);
XF1,YF1
рабочие массивы длины соответственно 2 ´ LLX и LLX, предназначенные для запоминания X- и Y- компонент координат точек сетки, расположенных вдоль оси X;
RMAX,RMIN
массивы, используемые для хранения верхней и нижней границ экрана (они должны иметь длину не менее NN);
NN
число делений физической сетки на области рисунка (т. е. размер экрана).

Замечания.

1) Eсли при изображении нескольких проекций поверхностей с учетом того, что они могут закрывать друг друга, центр проекции находится в угловом положении относительно первой поверхности, то при обращении к программе PRSP для первой поверхности знак LYINIT безразличен.

2) При обращении к программе PRSP надо следить, чтобы центр проекции не попал на поверхность изображаемого объекта.

Программа PRJT(VX,VY,VZ,X,Y,A,LLX,LLY,LXIN,LXE,LYIN,LYE,XF1,YF1) по­з­во­ля­ет построить в области рисования центральную проекцию всей заданной по­верх­но­сти либо ее некоторого участка без удаления невидимых линий. Параметры прог­рам­мы следующие:

LXIN,LXE
индексы сетки по оси X, определяющие левую и правую границы проецируемого участка;
LYIN,LYE
индексы сетки по оси Y, определяющие нижнюю и верхнюю границы проецируемого участка;

Остальные параметры имеют то же значение, что и в предыдущей программе.

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

Bспомогательные и служебные программы.

Программа MAP(X,Y,Z) по заданным координатам точки в де­картовой системе координат позволяет определить координаты про­екции этой точки на картинную плоскость. Bычисленные координаты XP, YP помещаются в общий блок GFVP, описываемый как

    COMMON /GFVP/ V1,V2,V3,XP,YP,INFIN. 
При этом параметр INFIN является признаком, определяющим, попадает ли данная точка поверхности в конус зрения (INFIN = 0 - попадает, INFIN = 1 - лежит за его пределами).

Программа CORNL(LXI1,LX1,LYJ1,LY1,K1,M1,K2,M2,X,Y,A,LXX,LYY,XF1,YF1,RMAX,RMIN) позволяет построить центральную проекцию части поверхности (за­да­ва­е­мой первыми четырьмя параметрами), относительно которой центр проекции имеет уг­ло­вое положение. Построение производится с удалением невидимых линий. Параметры K1, K2 определяют координаты ближайшего к центру проекции угла проецируемой части по­вер­х­ности, а M1,M2 задают порядок перебора элементов соответственно строк и столб­цов рассматриваемой части поверхности (от начального элемента к конечному или от ко­неч­но­го к начальному). Остальные параметры имеют те же значения, что и в программе PRSP.

Программа PATCH(XF1,YF1,RMAX,RMIN) служит для построения на картинной плоскости проекции одного элемента изображаемой части поверхности с удалением невидимых линий.

Программа SEARCH(IX1,Y1,IX2,Y2,XF1,YF1,RMAX,RMIN) предназ­начена для обработки частично видимых ребер элементов поверх­ности (первые два параметра задают видимую конечную точку ребра, а вторые два - невидимую). C этой целью на физической сетке ищется первая видимая точка ребра, после чего изображается отре­зок, соединяющий видимую конечную точку с найденной точкой. (Параметры IX1,IX2 определены на физической сетке, введенной в области рисования, поэтому их значения - целые числа).

Программа INTRSC(X1,Y1,X2,Y2,X3,Y3,X4,Y4,X0,Y0) позволяет найти точку пересечения (X0,Y0) двух отрезков, заданных коорди­натами конечных точек.

Программа BUFL(IX1,Y1,IX2,Y2,RMAX,RMIN) запоминает информа­цию о видимой части заднего ребра каждого элемента поверхности и после полного просмотра элемента модифицирует экран.

Программа LININT(JX1,Y1,JX2,Y2,RMAX,RMIN) позволяет линейно ин­тер­по­ли­ро­вать функции RMAX или RMIN (возможно обе) между двумя заданными точками (JX1,Y1) и (JX2,Y2). При этом новые значения заносятся в RMAX (RMIN) только в том случае, ес­ли они больше (меньше) старых.