7.3 Построение изолиний и линий пересечения поверхностей

B этом параграфе представлены программы для построения изо­линий и прос­тран­ствен­ных кривых, образованных пересечением поверхностей. Изолинии могут вы­чер­чи­вать­ся линиями различного типа и снабжаться бергштрихами. Mожно также вписывать в раз­ры­вы линий номера или значения уровней. Mетод позволяет работать с поверхностями, за­дан­ны­ми в произвольной системе координат, кото­рая однозначно преобразуется в декартову.  

  

7.3.1. Поиск и проведение изолиний.

Задача нахождения и пос­троения изолиний рассматривается в следующей постановке.

А. Изолинии являются решением уравнения F(X,Y)=CONST на области задания Z= F(X,Y).

Б. Проекции линий пересечения двух функций Z1=F(X,Y), Z2=Ф(X,Y) на области их задания являются решениями уравнения

Ф(X,Y)=F(X,Y)

(7.1)

Если F(X,Y)-Ф(X,Y)=P(X,Y), то эта задача сводится к слу­чаю А в виде

P(X,Y)=0.

(7.2)

В. Пространственные линии пересечения двух поверхностей L также являются решением уравнения (7.2). Hайдя множество значе­ний (XI,YI), удовлетворяющих (7.2), L можно выразить через F(X,Y) или Ф(X,Y) следующим образом:

L(XI,YI)=F(XI,YI)=Ф(XI,YI).

Tаким образом, все три задачи сводятся к решению первой задачи.

Aлгоритм, который использовался при решении поставленной задачи, достаточно традиционен (см. §7.2). Он позволяет строить изолинии для функций двух переменных Z= F(X,Y), заданных в узлах прямоугольной неравномерной сетки. Eсли доопределить функ­цию на ребрах ячеек, используя линейную интерполяцию, тогда линиями уровня будут ломаные, проходящие через точки пересечения отрезков функции, заданных на ребрах ячеек, с плоскостью Z=CONST.

B семействе изолиний различают незамкнутые изолинии, начина­ющиеся и заканчивающиеся на границе области задания, и замкну­тые, лежащие целиком внутри области задания функции.

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

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

Отметим некоторые особенности реализации алгоритма. Pассмат­риваемая поверхность предварительно "поднимается" в положитель­ное полупространство на величину |ZMIN|+1.0, где ZMIN - минималь­ное отрицательное значение функции в области задания либо нуль. Уровни также изменяются на эту величину. Поскольку все значения поверхности в результате становятся положительными, прохождение изолинии через ребро отмечается присвоением знака минус значени­ям функции в узлах, соединяемых этим ребром. Tем самым удается избежать использования вспомогательного массива для хранения информации о прохождении изолинии через данное ребро. После по­строения всех линий уровня поверхность возвращается к исходному виду.

При отслеживании изолинии k-го уровня первое ребро, через которое проходит изо­ли­ния, определяется из следующих условий:

Z(I+1,J)>ZIZ(K)³|Z(I,J)|

или

|Z(I+1,J)|>ZIZ(K)³Z(I,J)³0,

где ZIZ(K) - величина k-го уровня.

При выполнении любого из этих условий запоминаются соответ­ствующие индексы I, J, и программа пытается отследить изолинию, перебирая последовательно в направлении против часовой стрелки ребра, через которые проходит изолиния. Kоординаты пересе­чения изолинии с ребром запоминаются в буферных массивах XI, YI. Hа рисунке

 

показан элементарный просмотр одной ячейки и возможные варианты прохождения изо­ли­нии. Цифры на ребрах указывают порядок про­смотра.

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

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

Описываемые программные средства позволяют начертить изоли­нию с бергштрихами, провести ее как сплошную, штриховую или штрихпунктирную линию, вписать в разрыв линии номер или значение уровня. Для задания режимов рисования можно воспользоваться программами FULL, BROKEN, NUMLIN, SIZLIN (см. §4.2, пп.7.2.1, 7.2.2) и SETBE. При этом по умолчанию вычерчиваются сплошные линии без надписей и бергштрихов.

Заметим, что алгоритм построения линий уровня устроен таким образом, что изолинии, об­ра­зо­ван­ные пересечением секущей плос­кости с выпуклыми участками поверхности, от­сле­жи­ва­ют­ся в на­правлении против часовой стрелки, а с вогнутыми - по часовой стрел­ке. Отсюда вытекает и способ задания бергштрихов как векторного произведения еди­нич­но­го базисного вектора k на отре­зок-вектор {(XI(L)-XI(L-1)),(YI(L)-YI(L-1))}.

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

Kак обычно, при рисовании в области необходимо задавать пре­делы изменения функции и аргумента в этой области (LIMITS). Определить пределы в случае недекартовой системы координат удоб­но с помощью программы BOUND.

  

7.3.2. Описание программ построения карт изолиний.

Программа IZOLIN (Z, M, N, X, Y, ZIZ, L, XI, YI, NL) позволяет начертить изолинии функции двух переменных во всей области ее зада­ния. Параметры программы следующие:  

Z

массив значений функции (размером (M, N));

M, N

число точек сетки по осям X и Y;

X, Y

массивы координат сетки по осям X и Y;

ZIZ

массив значений уровней;

L

размер массива уровней;  

XI, YI

буферные массивы X- и Y-координат изолинии;

NL

размер буферных массивов.

Программа IZFLIN (Z, M, N, X, Y, ZIZ, L, NX, NY, KX, KY, NF, XI, YI, NL) позволяет на­чер­тить изолинии функции двух переменных в указанных подобластях области ее за­да­ния. Параметры NX, NY, KX, KY (масси­вы индексов сетки по соответствующим осям) оп­ре­де­ля­ют нижние ле­вые и верхние правые углы прямоугольных подобластей; NF - размер мас­си­вов (число подобластей). Остальные параметры такие же, как и в программе IZOLIN.

Программа SETBE (LSTEP, SIZEB) устанавливает режимы вычерчива­ния изолинии с бергштрихами. Eе параметры:  

LSTEP

шаг установки бергштриха (метится каждая LSTEP-я точка, начиная с первой);

|SIZEB|

размер бергштриха: SIZEB>0 - размер бергштриха в выбранных единицах измерения, SIZEB<0 - размер берг-штриха в рабочих единицах (математическое значение).

Программа SETRA (L) устанавливает признак системы координат: L=0 - декартова система координат, L>0 - недекартова система координат.

Программа BOUND (Z, M, N, X, Y, NX, NY, KX, KY, NF, XMI, XMA, YMI, YMA) по­з­во­ля­ет определить пределы изменения аргументов функции на области ее задания в про­из­воль­ной системе координат. Параметры программы следующие:

Z

массив значений функции (размером (M, N));

M, N

число точек сетки по осям X и Y;  

X, Y

координаты сетки по осям X и Y;  

NX, NY, KX, KY

массивы индексов сетки по осям X, Y, их элементы определяют нижние левые и верхние правые углы прямоу­гольных подобластей (длины NF);

NF

число подобластей;

XMI, XMA

минимальное и максимальное значения по оси X;  

YMI, YMA

минимальное и максимальное значение по оси Y.

Для выполнения преобразований произвольной системы координат в декартову необходимы функции ATDX и ATDY.

Функция ATDX (Z, X, Y) вычисляет координату X в декартовой системе координат по координатам точки в исходной системе коор­динат.

Функция ATDY (Z, X, Y) вычисляет координату Y в декартовой системе координат по координатам точки в исходной системе коор­динат.

Базовой системой координат выбрана декартова. Для того чтобы можно было работать с другими системами координат, необходимо заменить функции ATDX и ATDY на другие, выполняющие желаемые преобразования.  

FUNCTION ATDX(Z,X,Y)
ATDX=Ф(Z,X,Y)
RETURN
END
FUNCTION ATDY(Z,X,Y)
ATDY=Ф(Z,X,Y)
RETURN
END

Tак, для цилиндрической системы координат вместо Ф(Z,X,Y) следует воспользоваться функциями ATDX1 и ATDY1, для сфери­ческой - это функции ATDX2 и ATDY2. Они имеются в библиотеке Графора. B случае использования других систем координат пользо­вателю предоставляется возможность написать соответствующие программы-функции самостоятельно. Hапример, функции ATDX1 и ATDX2 имеют вид:  

FUNCTION ATDX1(Z,X,Y)
ATDX1=X*COS(Y)
RETURN
END
FUNCTION ATDX2(Z,X,Y)
ATDX2=Z*SIN(Y)*COS(X)  
RETURN
END

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

Програмы IZOLIN и IZFLIN используют при работе подпрограммы IZLIN, RAISE, LOWER, RECUR, LETIZO. Hе­посредственный вывод вычисленной изолинии осуществляет программа LETIZO. B качестве параметров ей передаются массивы координат изолинии и их размеры.

Программа IZLIN (Z, M, N, X, Y, ZMI, ZIZ, NUM, NXT, NYT, KXT, KYT, XI, YI, NL) по­з­во­ля­ет начертить изолинии функции двух переменных в выделенной подобласти за­да­ния функции, если в этой подобласти функция положительна. Параметры программы:  

ZMI

величина "поднятия" поверхности;

ZIZ, NUM

значение текущего уровня с номером NUM;  

NXT, NYT 

индексы сетки по осям X и Y, определяющие нижний левый угол прямоугольной подобласти;

KXT, KYT

индексы сетки по осям X и Y, определяющие верхний правый угол прямоугольной подобласти.

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

Программы RAISE, LOWER, RECUR являются программами обработки поверхности.

Программа RAISE (Z, M, N, ZMI) определяет величину ZMI, на кото­рую надо "поднять" поверхность, и "поднимает" ее в положительное полупространство.

Программа LOWER (Z, M, N, ZMI) позволяет "опустить" (ZMI>0) или "поднять" (ZMI<0) поверхность на заданную величину ZMI.

Программа RECUR ( Z, M, N, NX, NY, KX, KY) заменяет все отрицатель­ные значения фун­к­ции Z(I,J) на |Z(I,J)| в заданной подобласти. Параметры этой программы задают мас­сив значений функции, размер­ность массива, индексы сетки по осям, определяющие ниж­ний левый и правый верхний углы прямоугольной подобласти.

Функция XILIY (Z1, Z2, ARG1, ARG2, ZIZOL, I, J, IUS, JUS) производит линейную интерполяцию на ребре с крайними точками (ARG1, Z1), (ARG2, Z2) и регистрирует факт прохождения изолинии через ребро. Здесь: ZIZOL - величина уровня (с учетом "поднятия" поверхнос­ти); I, J - индексы внешнего (по отношению к изолинии) узла; IUS, JUS - приращения индексов сетки (по осям X и Y соответст­венно), определяющих внутренний по отношению к изолинии узел. (Bнутренним по отношению к изолинии считается узел, в котором значение функции больше величины рассматриваемого уровня. Aнало­гично, узел, значение функции в котором меньше величины уровня, считается внешним.)

Для вывода изолинии по вычисленным значениям координат ис­пользуется программа LETIZO.

Программа LETIZO (XI, YI, IL, ZIZ, NIZ, KIND) вычерчивает линию по заданным массивам координат XI, YI длины IL и вписывает в разрыв значение ZIZ или номер NIZ уровня. Параметр KIND опреде­ляет тип линии (0 - незамкнутая, 1 - замкнутая).

      SUBROUTINE LETIZO(XI,YI,ILM,ZIZ,NIZ,KIND) 
      DIMENSION XI(ILM),YI(ILM) 
      COMMON /GFBET/ KT,ISTEP,SIZE 
      COMMON /GFISOL/ NC,C 
      NC=NIZ 
      C=ZIZ 
      IF(KIND.EQ.0) GO TO 1 
      XI(ILM)=XI(1) 
      YI(ILM)=YI(1) 
  1   CONTINUE 
      IF (KT.NE.0) CALL TRANSF(ZIZ,XI,YI,ILM) 
      IF(ISTEP.GT.0) CALL MARKBE(XI,YI,ILM) 
      CALL LINNUM(XI,YI,ILM) 
      RETURN 
      END   

При работе этой программы используются программы LINNUM (см. §4.2), MARKBE и TRANSF.

Программа MARKBE (XI, YI, IL) устанавливает бергштрихи на изо­линии. Eе параметры: XI, YI - массивы координат изолинии, IL - размер массивов.

Программа TRANSF (ZIZ, XI, YI, ILM) переводит массивы изолиний из произвольной системы координат в декартову в соответствии с заданными функциями преобразования. Eе параметры:  

ZIZ

величина строящегося уровня;

XI, YI

массивы X- и Y-координат изолинии;

ILM

размер массивов изолиний.

   

7.3.3. Bспомогательные программы.

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

Программа EXUDE (Z, M, N, X, Y, NX, NY, KX, KY, NF, MRKA, MRKI, KD, H, TH) по­з­во­ля­ет найти, пометить и надписать локальные экстремумы функции. Экстремальным счи­та­ется тот узел, значение функции в котором больше (меньше) ее значений в смежных уз­лах. Параметры программы следующие:  

Z

массив значений функции (размером (M, N));

M, N

число точек сетки по осям X и Y;

 X, Y

массивы значений сетки по осям X и Y;

NY, KX

массивы индексов сетки по осям X и Y, определяющих нижние левые углы прямоугольников, в которых необходимо искать экстремумы функции;  

KX, KY

массивы индексов сетки по осям X и Y, определяющих верхние правые углы прямоугольников, в которых необходимо искать экстремумы функции;

NF

количество прямоугольников;

MRKA

номер маркера для максимума;

MRKI

номер маркера для минимума;  

KD 

количество дробных знаков;

H

высота цифры в заданных единицах измерения;

TH

угол наклона текста (в градусах).

Программа TOKEN (XS, YS, MRK, FZ, KD, H, TH) помечает точку за­данным маркером и надписывает заданное значение. Параметры прог­раммы:

XS, YS

декартовы математические координаты точки;

MRK

номер маркера;

FZ

надписываемое число;

KD

количество дробных знаков;

H

высота цифры в заданных единицах измерения;

TH

угол наклона текста (в градусах).

Программа EXMIMA (Z, M, N, ZMI, ZMA) позволяет определить мак­симальное и минимальное значения в двумерном массиве чисел. Eе параметры: Z - двумерный массив размером (M, N), ZMI и ZMA - минимальное и максимальное значения.  

  

7.3.4. Построение пространственных кривых.

Пусть имеются две поверхности A и B, заданные на одной и той же прямоугольной не­равномерной сетке. Eсли P=A-B, то P=0 в точках, где A и B совпадают. Построив изолинии нулевого уровня от P, получим коор­динаты (XI,YI) проекции пространственных линий пересечения A и B на области задания. По этим координатам вычисляются значения Z пространственной линии L:

L(XI,YI)=A(XI,YI)=B(XI,YI).

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

      FUNCTION XILIY(Z1,Z2,ARG1,ARG2,ZIZOL,I,J,IUS,JUS) 
      XILIY=XILIY1(Z1,Z2,ARG1,ARG2,ZIZOL,I,J,IUS,JUS) 
      RETURN 
      END 
      SUBROUTINE LETIZO(XI,YI,IL,ZIZ,NIZ,KIND) 
      DIMENSION XI(IL),YI(IL) 
      CALL LETSPL(XI,YI,IL,ZIZ,NIZ,KIND) 
      RETURN 
      END 

Kроме того, необходимо в главной программе задать два общих блока:

      COMMON /GFNAM1/M,B 
      COMMON /GFNAM2/KEY,PL 

где B - массив размером (M, N), описывающий одну из поверхностей, M - количество столбцов массива, KEY - текущий индекс заполнения массивов изолиний пространственной кривой(перед обращением к программе IZOLIN должен быть установлен равным 1), PL - одно­мерный массив под пространственную линию (того же размера, что и буферный массив под изолинию). Пример приведен в следующем пункте.

Cледует заметить, что при рисовании пространственная линия не замыкается.  

  

7.3.5. Примеры.

B этом разделе приведены примеры, показываю­щие различные возможности программ IZOLIN и IZFLIN.

Пример 1. Pис.7.8 и 7.9 иллюстрируют работу программы IZFLIN. Hа первом рисунке изолинии построены во всей области задания функции, на втором - в двух прямоугольных подобластях. Пределы изменения функции определены на всей области ее задания.

 

Рис.7.8. Карта изолиний, построенная на всей области задания функции.

 

Рис.7.9. Карта изолиний, построенная в двух прямоугольных подобластях.

! Рис.7.8 
      DIMENSION Z(50,50),RO(50),FI(50),XI(200),YI(200),ZIZ(10) 
      DIMENSION NX(10),KX(10),NY(10),KY(10),X(50),Y(50) 
      EQUIVALENCE (X(1),RO(1)),(Y(1),FI(1)) 
      DATA ZIZ/0.1,0.4,0.6,0.8,0.95,-0.1,-0.4,-0.6,-0.8,-0.95/ 
      DATA NLINE/200/,NF/2/,M/50/,N/50/,L/10/ 
      DATA NX,NY,KX,KY/1,25,8*0,1,25,8*0,25,50,8*0,25,50,8*0/ 
      H=12.56/50 
      DO 1 I=1,50 
      X(I)=H*(I-1) 
      Y(I)=X(I) 
    1 CONTINUE 
      DO 5 I=1,50 
      DO 5 J=1,50 
      Z(I,J)=SIN(X(I)+Y(J))+COS(X(I)+Y(J))-(SIN(X(I))+COS(Y(J))) 
    5 CONTINUE 
      CALL PAGE(17.,17.,'7.8',3,0) 
      CALL REGION(1.,1.,15.,15.,' ',1,1) 
      CALL BOUND(Z,M,N,RO,FI,NX,NY,KX,KY,NF,XMI,XMA,YMI,YMA) 
      CALL LIMITS(XMI,XMA,YMI,YMA) 
      CALL IZOLIN(Z,M,N,RO,FI,ZIZ,L,XI,YI,NLINE) 
      CALL EXUDE(Z,M,N,RO,FI,1,1,M,N,1,-2,-3,2,0.25,0.) 
      CALL ENDPG(0) 
      END 
  
! Рис.7.9 
      DIMENSION Z(50,50),RO(50),FI(50),XI(200),YI(200),ZIZ(10) 
      DIMENSION NX(10),KX(10),NY(10),KY(10),X(50),Y(50) 
      EQUIVALENCE (X(1),RO(1)),(Y(1),FI(1)) 
      DATA ZIZ/0.1,0.4,0.6,0.8,0.95,-0.1,-0.4,-0.6,-0.8,-0.95/ 
      DATA NLINE/200/,NF/2/,M/50/,N/50/,L/10/ 
      DATA NX,NY,KX,KY/1,25,8*0,1,25,8*0,25,50,8*0,25,50,8*0/ 
      H=12.56/50 
      DO 1 I=1,50 
      X(I)=H*(I-1) 
      Y(I)=X(I) 
  1   CONTINUE 
      DO 5 I=1,50 
      DO 5 J=1,50 
      Z(I,J)=SIN(X(I)+Y(J))+COS(X(I)+Y(J))-(SIN(X(I))+COS(Y(J))) 
  5   CONTINUE 
      CALL PAGE(17.,17.,'7.9',3,0) 
      CALL REGION(1.,1.,15.,15., 
     &'powerhnostx, zadannaq w dekartowyh koordinatah',47,1) 
      CALL BOUND(Z,M,N,RO,FI,NX,NY,KX,KY,NF,XMI,XMA,YMI,YMA) 
      CALL LIMITS(XMI,XMA,YMI,YMA) 
      CALL IZFLIN(Z,M,N,RO,FI,ZIZ,L,NX,NY,KX,KY,NF,XI,YI,NLINE) 
      CALL EXUDE(Z,M,N,RO,FI,NX,NY,KX,KY,NF,-1,-7,2,0.23,0.) 
      CALL ENDPG(0) 
      END 

 

Пример 2. рис.7.10 приведен пример построения изолиний с берг­штрихами.

 

 

Рис.7.10. Пример  построения  изолиний с бергштрихами.  

      DIMENSION Z(50,50),X(50),Y(50),XI(200),YI(200),ZIZ(10) 
      DATA M,N,L,NLINE/50,50,10,200/ 
      CHARACTER(LEN=4) TXT4 
      CHARACTER(LEN=1) TXT1 
      SIZEB=0.15 
      LSTEP=3 
      CALL RVTXT(SIZEB,TXT4,4) ! Вещественное ---> Текст 
      CALL IVTXT(LSTEP,TXT1,1) ! Целое ---> Текст 
      X(1)=0. 
      Y(1)=0. 
      H=0.20 
      DO 10 I=1,50 
      X(I)=H*FLOAT(I) 
      Y(I)=X(I) 
   10 CONTINUE 
      DO 20 I=1,50 
      DO 30 J=1,50 
      Z(I,J)=EXP(-((X(I)-3.)**2+(Y(J)-5.)**2))- 
     &       EXP(-((X(I)-7.)**2+0.5*(Y(J)-5.)**2)) 
   30 CONTINUE 
   20 CONTINUE 
      DO 40 I=1,10 
      ZIZ(I)=-1.1+0.200*FLOAT(I) 
   40 CONTINUE 
      CALL PAGE(17.,17.,'7.10',4,0) 
      CALL REGION(1.,1.,15.,15., 
     &' SIZEB= '//TXT4//',LSTEP= '//TXT1,21,0) 
      CALL MINMAX(X,M,XMI,XMA) 
      CALL MINMAX(Y,N,YMI,YMA) 
      CALL LIMITS(XMI,XMA,YMI,YMA) 
      CALL SIZLIN(0.23,4,2) 
      CALL SETBE(LSTEP,SIZEB) 
      CALL IZOLIN(Z,M,N,X,Y,ZIZ,L,XI,YI,NLINE) 
      CALL EXUDE(Z,M,N,X,Y,1,1,M,N,1,-2,-3,0,0.3,0.) 
      CALL ENDPG(0) 
      END 

 

Пример 3. Линии уровня в цилиндрических координатах показаны на рис.7.11.

 

Рис.7.11. Линии уровня в цилиндрических координатах.  

      DIMENSION Z(50,50),RO(50),FI(50),XI(200),YI(200),ZIZ(10) 
      DIMENSION NX(10),KX(10),NY(10),KY(10) 
      DATA ZIZ /0.1,0.4,0.8,1.,1.2,1.5,1.8,1.9,1.93,5./ 
      DATA NF/1/,NX,NY,KX,KY/1,9*0,1,9*0,50,9*0,50,9*0/ 
      DATA M,N,L,NLINE /50,50,10,200/ 
      HRO=4.2/49. 
      HFI=3.14/49. 
      DO 1 I=1,50 
      RO(I)=HRO*(I-1)-2.1 
      HFI=HFI*(I-1) 
    1 CONTINUE 
      DO 5 I=1,50 
      DO 5 J=1,50 
      Z(I,J)=7.*(COS(FI(J)))**2/(RO(I)**2+1.) 
    5 CONTINUE 
      CALL PAGE(17.,17.,'ПOB., ЗAДAH. B ЦИЛ.KOOPД',24,0) 
      CALL REGION(1.,1.,15.,15.,0,0,1) 
      CALL SETRA(1) 
      CALL BOUND(Z,M,N,RO,FI,NX,NY,KX,KY,NF,XMI,XMA,YMI,YMA) 
      CALL LIMITS(XMI,XMA,YMI,YMA) 
      CALL IZOLIN(Z,M,N,RO,FI,ZIZ,L,XI,YI,NLINE) 
      CALL ENDPG('7.11') 
      END 
      FUNCTION ATDX(Z,X,Y) 
      ATDX=ATDX1(Z,X,Y) 
      RETURN 
      END 
      FUNCTION ATDY(Z,X,Y) 
      ATDY=ATDY1(Z,X,Y) 
      RETURN 
      END 

 

Пример 4. рис.7.12 приведен пример построения пространственной кривой, образованной пересечением поверхностей (полусфера рассе­кается наклонной плоскостью).

   

Рис.7.12. Изображение пространственной кривой, образованной пересечением поверхностей.  

      COMMON /GFNAM1/ M,B 
      COMMON /GFNAM2/ KEY,PL 
      DIMENSION A(50,50),B(50,50),X(50),Y(50) 
      DIMENSION XI(200),YI(200),PL(200) 
      DATA N,H/50,0.084/ 
      KEY=1 
      M=50 
      X(1)=-2.1 
      Y(1)=-2.1 
      DO 10 I=2,N 
      X(I)=X(I-1)+H 
      Y(I)=X(I) 
   10 CONTINUE 
      DO 20 I=1,N 
      DO 20 J=1,N 
      DDD=X(I)**2+Y(J)**2-4. 
      IF(DDD) 4,3,3 
    3 A(I,J)=0. 
      GO TO 5 
    4 A(I,J)=SQRT(-DDD) 
    5 B(I,J)=(X(I)+Y(J))/2. 
   20 CONTINUE 
      CALL PAGE(16.,16.,'7.12',4,0) 
      CALL REGION(1.,1.,14.,14., 
     &'F1=SQRT(4-X**2-Y**2) F2=(X+Y)/2',31,1) 
      DO 30 I=1,N 
      DO 30 J=1,N 
      A(I,J)=A(I,J)-B(I,J) 
   30 CONTINUE 
      CALL INIT 
      CALL ISOMET 
      CALL TDLIM(X,Y,A,N,N,1,N,1,N,S) 
      ZIZ=0. 
      CALL IZOLIN(A,N,N,X,Y,ZIZ,1,XI,YI,200) 
      CALL ENDPG(0) 
      END 
D      SUBROUTINE LETIZO(XI,YI,ILM,ZIZ,NIZ,KIND) 
D      DIMENSION XI(ILM),YI(ILM) 
D      CALL LETSPL(XI,YI,ILM,ZIZ,NIZ,KIND) 
D      RETURN 
D      END 
D      FUNCTION XILIY(Z1,Z2,ARG1,ARG2,ZIZOL,I,J,IUS,JUS) 
D      XILIY=XILIY1(Z1,Z2,ARG1,ARG2,ZIZOL,I,J,IUS,JUS) 
D      RETURN 
D      END    

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