ソースコードの所在: /home/kizu/pgplot/samples/pgex11.f
(このプログラムで描ける絵は、こちら)
PROGRAM PGEX11
C-----------------------------------------------------------------------
C Test routine for PGPLOT: draws a skeletal dodecahedron.
C-----------------------------------------------------------------------
INTEGER NVERT, PGOPEN
REAL T, T1, T2, T3
PARAMETER (NVERT=20)
PARAMETER (T=1.618)
PARAMETER (T1=1.0+T)
PARAMETER (T2=-1.0*T)
PARAMETER (T3=-1.0*T1)
INTEGER I, J, K
REAL VERT(3,NVERT), R, ZZ
REAL X(2),Y(2)
C
C Cartesian coordinates of the 20 vertices.
C
DATA VERT/ T, T, T, T, T,T2,
3 T,T2, T, T,T2,T2,
5 T2, T, T, T2, T,T2,
7 T2,T2, T, T2,T2,T2,
9 T1,1.0,0.0, T1,-1.0,0.0,
B T3,1.0,0.0, T3,-1.0,0.0,
D 0.0,T1,1.0, 0.0,T1,-1.0,
F 0.0,T3,1.0, 0.0,T3,-1.0,
H 1.0,0.0,T1, -1.0,0.0,T1,
J 1.0,0.0,T3, -1.0,0.0,T3 /
C
C Call PGOPEN to initiate PGPLOT and open the output device; PGOPEN
C will prompt the user to supply the device name and type. Always
C check the return code from PGOPEN.
C
IF (PGOPEN('?') .LE. 0) STOP
C
C Initialize the plot (no labels).
C
CALL PGBBUF
CALL PGSAVE
CALL PGENV(-4.,4.,-4.,4.,1,-2)
CALL PGSCI(2)
CALL PGSLS(1)
CALL PGSLW(1)
C
C Write a heading.
C
CALL PGLAB(' ',' ','PGPLOT Example 11: Dodecahedron')
C
C Mark the vertices.
C
DO 2 I=1,NVERT
ZZ = VERT(3,I)
CALL PGPT1(VERT(1,I)+0.2*ZZ,VERT(2,I)+0.3*ZZ,9)
2 CONTINUE
C
C Draw the edges - test all vertex pairs to find the edges of the
C correct length.
C
CALL PGSLW(3)
DO 20 I=2,NVERT
DO 10 J=1,I-1
R = 0.
DO 5 K=1,3
R = R + (VERT(K,I)-VERT(K,J))**2
5 CONTINUE
R = SQRT(R)
IF(ABS(R-2.0).GT.0.1) GOTO 10
ZZ = VERT(3,I)
X(1) = VERT(1,I)+0.2*ZZ
Y(1) = VERT(2,I)+0.3*ZZ
ZZ = VERT(3,J)
X(2) = VERT(1,J)+0.2*ZZ
Y(2) = VERT(2,J)+0.3*ZZ
CALL PGLINE(2,X,Y)
10 CONTINUE
20 CONTINUE
CALL PGUNSA
CALL PGEBUF
C
C Finally, call PGCLOS to terminate things properly.
C
CALL PGCLOS
C
END