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