8.4.5. Примеры.

B этом разделе приводятся примеры, иллюстри­рующие использование описанных выше программ проецирования с удалением невидимых линий.

Пример 1. На рис.8.26 показана поверхность, построенная с исполь­зованием программы HALLNE. Данные для поверхности (центр которой находится в начале координат) формируются при обращении к прог­рамме GIPER1.

     DIMENSION DX(2,930),DY(2,930),DZ(2,930),NCLUST(930)
     DATA N,G,TOL/930,0.15,0.4/
     CALL GIPER1(2.,-2.,2.,15,30,DX,DY,DZ,N,1)
     CALL PAGE(14.,26., '8.26',4,0)
     CALL REGION(2.,8.,10.,10.,’ ’,1,0)
     CALL PRJHL(1,5.,5.,-10.)
     CALL VPLIM(DX,DY,DZ,N,1,N,S)
     CALL HALLNE(DX,DY,DZ,N,1,N,NCLUST,N,G,TOL,5)
     CALL ENDPG(0)
     END

Tот же результат получится при использовании фрагмента:

     CALL PRJHL(1,5.,5.,-10.)
     CALL PRJHL(1,5.,5.,-10.)
     CALL VPLIM(DX,DY,DZ,N,1,N,S)
     CALL SPLITP(0.,0.,0.)
     CALL HALLNE(DX,DY,DZ,N,1,N,NCLUST,N,G,TOL,8)

Bо втором случае явно указана точка, относительно которой должно проводиться разбиение графического объекта на независимые подмножества (см. пп.8.4.3 и 8.4.4).


Рис.8.32. Изображение сцены, допускающей представление в виде двух независимых подмножеств отрезков.

 

Пример 2. На рис.8.32 показана сцена, состоящая из двух изолиро­ванных графических объектов: цилиндра и сферы. Цилиндр формиру­ется с помощью обращения к подпрограмме CILIND, сфера - в результате вызова двух подпрограмм - SPHERG и SPHERV. Благодаря тому, что сцена допускает описание в виде независимых подмно­жеств отрезков, которые можно разделить плоскостью, время, зат­рачиваемое на вычисления, удается заметно сократить (в данном случае на 60%).

 
     DIMENSION DX(2,660),DY(2,660),DZ(2,660),NCL(280)
     DATA N,NC/660,280/
C...ЦИЛИHДP (ОTPEЗKИ 1 - 280):
     CALL CILIND(0.4,-1.,0.9,12,20,DX,DY,DZ,N,1)
     CALL TRANH(1.7,0.,0.,DX,DY,DZ,N,1,NC)
C...CФEPA (ОTPEЗKИ 281 - 660)
     CALL SPHERG(1.,20,10,DX,DY,DZ,N,NC+1)
     CALL SPHERV(1.,20,10,DX,DY,DZ,N,NC+1+180)
C...ИЗОБPAЖEHИE CЦEHЫ:
     CALL PAGE(14.,26., '8.32',4,0)
     CALL REGION(2.,8.,10.,10.,’ ’,1,0)
     CALL PRJHL(1,10.,5.,-3.)
     CALL VPLIM(DX,DY,DZ,N,1,N,S)
C...ИЗОБPAЖEHИE ЦИЛИHДPA:
     CALL COORDT(DX,DY,DZ,N,1,NC,NCL,NC,3)
     CALL HALOED(DX,DY,DZ,N,1,NC,1,NC,NCL,NC,0.1,0.3,3)
C...ИЗОБPAЖEHИE CФEPЫ:
     CALL COORDT(DX,DY,DZ,N,NC+1,N,NCL,1,1)
     CALL HALOED(DX,DY,DZ,N,NC+1,N,1,N,NCL,1,0.15,0.5,1)
     CALL ENDPG(0)
     END


Рис.8.33. Изображение пространственной кривой, построенное с использованием метода ореола.

 

Пример 3. Hа рис.8.33 изображена центральная проекция пространст­венной кривой, построенная с использованием метода ореола.

     DIMENSION DX(2,880),DY(2,880),DZ(2,880),NCLUST(880)
     DATA NN,N1,M,N,K/8,110,3,4,1/,G,TOL,ITYP/0.05,0.2,5/
     N2=NN*N1
     H1=3.5/NN
     H2=4.5/NN
     FI=H1
     PSI=H2
     DO 21 J=1,N2
     FI=FI+H1/N1
     PSI=PSI+H2/N1
     TH=6.283*(J-1)/(N1-1)
     X=SIN(TH)
     Y=1.2*SIN(M*TH+FI)
     Z=1.5*SIN(N*TH+PSI)
     IF(K.EQ.1)$GOTO 20
     DX(2,K-1)=X
     DY(2,K-1)=Y
     DZ(2,K-1)=Z
     IF(K.EQ.N2)$GOTO 21
  20 DX(1,K)=X
     DY(1,K)=Y
     DZ(1,K)=Z
     K=K+1
  21 CONTINUE
C...PИCОBAHИE ПPОEKЦИИ ПPОCTPAHCTBEHHОЙ KPИBОЙ:
     CALL PAGE(15.,15.,0,0,1)
     CALL REGION(1.,1.,13.,13.,0,0,0)
     CALL PRJHL(1,15.,8.,3.)
     CALL VPLIM(DX,DY,DZ,N2,1,N2,S)
     CALL HALLNE(DX,DY,DZ,N2,1,N2,NCLUST,N2,G,TOL,ITYP)
     CALL ENDPG('8.33')
     END