1000  FILES RDATA,PDATA,TEMP,LVIEW,RVIEW,PLOTL,PLOTR
1010  DIM A[4,4],B[4,4],C[4,4]
1020  READ #1,1
1030  READ #1;X,Y,Z,P
1040  X8=X9=X
1050  Y8=Y9=Y
1060  Z8=Z9=Z
1070  READ #1;X,Y,Z,P
1080  X8=(X8 MIN X)
1090  X9=(X9 MAX X)
1100  Y8=(Y8 MIN Y)
1110  Y9=(Y9 MAX Y)
1120  Z8=(Z8 MIN Z)
1130  Z9=(Z9 MAX Z)
1140  IF TYP(1)=1 THEN 1070
1150  R=(X9-X8) MAX (Y9-Y8) MAX (Z9-Z8)
1160  T1=(X9+X8)/2
1170  T2=(Y9+Y8)/2
1180  T3=(Z9+Z8)/2
1190  READ #1,1
1200  READ #3,1
1210  READ #1;X,Y,Z,P
1220  X=(X-T1)/R
1230  Y=(Y-T2)/R
1240  Z=(Z-T3)/R
1250  PRINT #3;X,Y,Z,P
1260  IF TYP(1)=1 THEN 1210
1270  PRINT #3; END 
1280  READ #1,1
1290  READ #3,1
1300  READ #3;X,Y,Z,P
1310  PRINT #1;X,Y,Z,P
1320  IF TYP(3)=1 THEN 1300
1330  PRINT #1; END 
1340  MAT A=IDN
1350  PRINT 
1360  PRINT "--ALL ANGLES IN DEGREES, NUMERIC RESPONSES--"
1370  PRINT "INITIAL ROTATION:"
1380  PRINT "  YAW ANGLE:";
1390  INPUT T
1400  REM SET UP YAW MATRIX
1410  GOSUB 3800
1420  REM CARRY OUT MATRIX MULTIPLICATION
1430  GOSUB 3960
1440  PRINT "  PITCH ANGLE:";
1450  INPUT T
1460  REM SET UP PITCH MATRIX
1470  GOSUB 3880
1480  REM CARRY OUT MATRIX MULTIPLICATION
1490  GOSUB 3960
1500  PRINT 
1510  PRINT "SPECIFY PROJECTION:"
1520  PRINT "  1) AXONOMETRIC"
1530  PRINT "  2) OBLIQUE"
1540  PRINT "  3) PERSPECTIVE"
1550  PRINT "  4) STEREOGRAPHIC"
1560  INPUT S1
1570  GOTO S1 OF 1580,2270,2490,2920
1580  REM AXONOMETRIC PROJECTIONS
1590  PRINT "SPECIFY:"
1600  PRINT "  1) ISOMETRIC"
1610  PRINT "  2) DIMETRIC"
1620  PRINT "  3) TRIMETRIC"
1630  INPUT S1
1640  GOTO S1 OF 1650,1800,1990
1650  REM ISOMETRIC SET UP.
1660  PRINT 
1670  PRINT "  YAW ANGLE: 45"
1680  PRINT "  PITCH ANGLE: 35.264"
1690  T=45
1700  REM SET UP YAW MATRIX
1710  GOSUB 3800
1720  REM CARRY OUT MATRIX MULTIPLICATION
1730  GOSUB 3960
1740  T=35.264
1750  REM SET UP PITCH MATRIX
1760  GOSUB 3880
1770  REM CARRY OUT MATRIX MULTIPLICATION
1780  GOSUB 3960
1790  GOTO 2130
1800  REM DIMETRIC SET UP
1810  PRINT 
1820  PRINT "  YAW ANGLE:";
1830  INPUT T
1840  T1=T
1850  REM SET UP YAW MATRIX
1860  GOSUB 3800
1870  REM CARRY OUT MATRIX MULTIPLICATION
1880  GOSUB 3960
1890  T1=T1/57.2958
1900  T2=SIN(T1)^2/(1-SIN(T1)^2)
1910  T3=SQR(1/(1-T2^2)-1)
1920  T=ATN(T3)*57.2958
1930  PRINT "  PITCH ANGLE:"T
1940  REM SET UP PITCH MATRIX
1950  GOSUB 3880
1960  REM CARRY OUT MATRIX MULTIPLICATION
1970  GOSUB 3960
1980  GOTO 2130
1990  REM TRIMETRIC SET UP
2000  PRINT 
2010  PRINT "  YAW ANGLE:";
2020  INPUT T
2030  REM SET UP YAW MATRIX
2040  GOSUB 3800
2050  REM CARRY OUT MATRIX MULTIPLICATION
2060  GOSUB 3960
2070  PRINT "  PITCH ANGLE:";
2080  INPUT T
2090  REM SET UP PITCH MATRIX
2100  GOSUB 3880
2110  REM CARRY OUT MATRIX MULTIPLICATION
2120  GOSUB 3960
2130  REM CARRY OUT PROJECTION
2140  PRINT 
2150  PRINT "PROJECTION RAYS PARALLEL TO Z AXIS."
2160  READ #1,1
2170  READ #2,1
2180  READ #1;X,Y,Z,P
2190  X1=X*A[1,1]+Y*A[2,1]+Z*A[3,1]+A[4,1]
2200  Y1=X*A[1,2]+Y*A[2,2]+Z*A[3,2]+A[4,2]
2210  PRINT #2;X1,Y1,P
2220  IF TYP(1)=1 THEN 2180
2230  PRINT #2; END 
2240  PRINT 
2250  PRINT "--TRANSFORMATION COMPLETE--"
2260  STOP 
2270  REM OBLIQUE PROJECTIONS
2280  PRINT 
2290  PRINT "  ANGLE TO OBLIQUE AXIS:";
2300  INPUT T
2310  T=T/57.2958
2320  PRINT "  OBLIQUE AXIS FORESHORTENING FACTOR:";
2330  INPUT F
2340  F1=F*COS(T)
2350  F2=F*SIN(T)
2360  READ #1,1
2370  READ #2,1
2380  READ #1;X,Y,Z,P
2390  Z1=X*A[1,3]+Y*A[2,3]+Z*A[3,3]+A[4,3]
2400  X1=X*A[1,1]+Y*A[2,1]+Z*A[3,1]+A[4,1]-Z1*F1
2410  Y1=X*A[1,2]+Y*A[2,2]+Z*A[3,2]+A[4,2]-Z1*F2
2420  PRINT #2;X1,Y1,P
2430  IF TYP(1)=1 THEN 2380
2440  PRINT #2; END 
2450  READ #1,1
2460  PRINT 
2470  PRINT "--TRANSFORMATION COMPLETE--"
2480  STOP 
2490  REM PERSPECTIVE PROJECTION
2500  PRINT 
2510  READ #1,1
2520  READ #2,1
2530  READ #3,1
2540  READ #1;X,Y,Z,P
2550  X1=X*A[1,1]+Y*A[2,1]+Z*A[3,1]+A[4,1]
2560  Y1=X*A[1,2]+Y*A[2,2]+Z*A[3,2]+A[4,2]
2570  Z1=X*A[1,3]+Y*A[2,3]+Z*A[3,3]+A[4,3]
2580  PRINT #3;X1,Y1,Z1,P
2590  IF TYP(1)=1 THEN 2540
2600  PRINT #3; END 
2610  READ #3,1
2620  READ #3;X1,Y1,Z1,P
2630  Z9=Z1
2640  READ #3;X1,Y1,Z1,P
2650  Z9=(Z9 MAX Z1)
2660  IF TYP(3)=1 THEN 2640
2670  MAT A=IDN
2680  A[4,3]=-Z9
2690  PRINT "  X-TRANSLATION:";
2700  INPUT X3
2710  A[4,1]=X3
2720  PRINT "  Y-TRANSLATION:";
2730  INPUT Y3
2740  A[4,2]=Y3
2750  PRINT "  DISTANCE TO CENTER OF PROJECTION:";
2760  INPUT K
2770  A[4,4]=(1+Z9/K)
2780  A[3,4]=-1/K
2790  READ #3,1
2800  READ #3;X,Y,Z,P
2810  X1=X+A[4,1]
2820  Y1=Y+A[4,2]
2830  H=Z*A[3,4]+A[4,4]
2840  X1=X1/H-X3
2850  Y1=Y1/H-Y3
2860  PRINT #2;X1,Y1,P
2870  IF TYP(3)=1 THEN 2800
2880  PRINT #2; END 
2890  PRINT 
2900  PRINT "--TRANSFORMATION COMPLETE--"
2910  STOP 
2920  REM STEREOGRAPHIC PROJECTION
2930  PRINT 
2940  READ #1,1
2950  READ #3,1
2960  READ #1;X,Y,Z,P
2970  X1=X*A[1,1]+Y*A[2,1]+Z*A[3,1]+A[4,1]
2980  Y1=X*A[1,2]+Y*A[2,2]+Z*A[3,2]+A[4,2]
2990  Z1=X*A[1,3]+Y*A[2,3]+Z*A[3,3]+A[4,3]
3000  PRINT #3;X1,Y1,Z1,P
3010  IF TYP(1)=1 THEN 2960
3020  PRINT #3; END 
3030  READ #3,1
3040  READ #3;X1,Y1,Z1,P
3050  Z9=Z1
3060  READ #3;X1,Y1,Z1,P
3070  Z9=(Z9 MAX Z1)
3080  IF TYP(3)=1 THEN 3060
3090  MAT A=IDN
3100  A[4,3]=-Z9
3110  PRINT "  X-TRANSLATION:";
3120  INPUT X3
3130  A[4,1]=X3
3140  PRINT "  Y-TRANSLATION:";
3150  INPUT Y3
3160  A[4,2]=Y3
3170  PRINT "  EYE SEPARATION (INCHES):";
3180  INPUT W
3190  A[4,1]=A[4,1]+.2
3200  PRINT "  DISTANCE TO CENTER OF PROJECTION:";
3210  INPUT K
3220  A[4,4]=1+Z9/K
3230  A[3,4]=-1/K
3240  READ #3,1
3250  READ #4,1
3260  READ #3;X,Y,Z,P
3270  X1=X+A[4,1]
3280  Y1=Y+A[4,2]
3290  H=Z*A[3,4]+A[4,4]
3300  X1=X1/H-X3
3310  Y1=Y1/H-Y3
3320  PRINT #4;X1,Y1,P
3330  IF TYP(3)=1 THEN 3260
3340  PRINT #4; END 
3350  READ #3,1
3360  READ #5,1
3370  A[4,1]=A[4,1]-.4
3380  READ #3;X,Y,Z,P
3390  X1=X+A[4,1]
3400  Y1=Y+A[4,2]
3410  H=Z*A[3,4]+A[4,4]
3420  X1=X1/H-X3
3430  Y1=Y1/H-Y3
3440  PRINT #5;X1,Y1,P
3450  IF TYP(3)=1 THEN 3380
3460  PRINT #5; END 
3470  READ #4,1
3480  READ #5,1
3490  REM FIND MAX AND MIN VALUES IN LVIEW AND RVIEW
3500  READ #4;X,Y,P
3510  L8=L9=X
3520  READ #5;X,Y,P
3530  R8=R9=X
3540  READ #4;X,Y,P
3550  L8=(L8 MIN X)
3560  L9=(L9 MAX X)
3570  READ #5;X,Y,P
3580  R8=(R8 MIN X)
3590  R9=(R9 MAX X)
3600  IF TYP(4)=1 THEN 3540
3610  REM COMPUTE VIEW SEPARATION ADJUSTMENT
3620  S=(2*W-R9-R8+L9+L8)/4
3630  REM COMPUTE AND STORE PLOTTING VALUES
3640  READ #4,1
3650  READ #5,1
3660  READ #6,1
3670  READ #7,1
3680  READ #4;X,Y,P
3690  X=X-S
3700  PRINT #6;X,Y,P
3710  READ #5;X,Y,P
3720  X=X+S
3730  PRINT #7;X,Y,P
3740  IF TYP(4)=1 THEN 3680
3750  PRINT #6; END 
3760  PRINT #7; END 
3770  PRINT 
3780  PRINT "--TRANSFORMATION COMPLETE--"
3790  STOP 
3800  REM YAW ROTATION MATRIX
3810  T=T/57.2958
3820  MAT B=IDN
3830  B[1,1]=B[3,3]=COS(T)
3840  B[1,3]=-SIN(T)
3850  B[3,1]=SIN(T)
3860  REM END OF SUBROUTINE
3870  RETURN 
3880  REM PITCH ROTATION MATRIX
3890  T=T/57.2958
3900  MAT B=IDN
3910  B[2,2]=B[3,3]=COS(T)
3920  B[2,3]=SIN(T)
3930  B[3,2]=-SIN(T)
3940  REM END OF SUBROUTINE
3950  RETURN 
3960  REM MATRIX MULTIPLICATION
3970  MAT C=A*B
3980  MAT A=C
3990  REM END OF SUBROUTINE
4000  RETURN 
4010  END 
